مشاهدة النسخة كاملة : [درس] الرد على أي إستفسار عن السي بلس بلس
RAAAAD
02-10-2006, 09:41 AM
بسم الله الرحمن الرحيم
كما هو مبين من العنوان ..
سأجعل هذا الموضوع للرد على أي إستفسار عن لغة السي بلس بلس :33: سواء عن البرمجة بي الكونسل او الويندوز ..
أريد التنوية:
بأن الموضوع مفتوح من الآن إلى نهاية شهر رمضان الكريم ..
-------------
يلا فتحنا المزاد ;)
CHALLENGER
02-10-2006, 11:58 AM
و الله مبادرة طيبة منك , و أهلاً بك بالمنتدى ,,,
يلا الحق نفسي قبل ما يخلص الصيام :)
س1- هل نستطيع القول عن السي ++ أنها كائنية التوجه OOP ؟
س2- ما هي دوال API الت ذكرتها أنت سابقاً هل هي مثل الـfunctions في لُغات اُخرى ؟
س3- أين أجد هذه الدوال ؟ هل هناك manual ما ؟
و شكراً
من التراب
02-10-2006, 12:25 PM
جزاك الله خير وعانك ع الأسئلة
عندي سؤال ::
أريد الوقع الرسمي لشرح المكتبات في السي ++ ...
لأن هناك موقع للمكتبات الجافا ويفيدني جدًا
وشكرا ^_^
RAAAAD
02-10-2006, 04:15 PM
س2- ما هي دوال API الت ذكرتها أنت سابقاً هل هي مثل الـfunctions في لُغات اُخرى
API هي إختصار إلى Applicatin Programming Interface ..
وهي عبارة عن ملفات يستخدمها المبرمجون من أجل ربط برامجهم بي نظام التشغيل (Operating System).
تقوم فكرتها كالتالي: بما أن نظام التشغيل يستخدم
بعض العناصر مثل (textbox, frame, font, color, button) أو بعض الدوال (Functions) مثل (Createwindow, SetwindowText, ExitWindow, TextOut, Copyfile) أو بعض المكتبات مثل (User32, Gdi32.dll, Kernel32) أو بعض من Data Structure مثل (Font) من أجل التحكم في عملياتهفإذن سأقوم بإستخدامها أنا أيضاً لمصلحة برنامجي
ظهرت هذه المكاتب في ثلاثة أجيال وجيل منتظر:
الأول: win16 Bit وهو قديم جداً.
الثاني : win32 Bitحيث كتبت دوالها بإستخدام لغة السي والسي بلاس بلاس, وجائت بالمكتابات (User32, Gdi32.dll, Kernel32)
الثالث: win64 Bit حيث أنها إحتوت على نفس الـ win32 ولأكن بشكل أوسع فتستطيع الدوال الآن معالجة وعنونة أرقام أكبر, وجائت هذه المكاتب على نظامي التشغيل windows XP و Window Server 2003
الرابع: Winfix وهذا الجيل هو المنتظر في windows Vista (على الأقل إلى الآن) حيث أنها كما أعلنوا ستدعم جميع خصائص الـ .Net بما فيها Garbage Collector System (GLR), وأيضاً سوف تستبدل مكتبات الرسومات وهي الـ GUI بي الـ Avalon
ولجعل الأمور تأخذ منحى عملي .. لنأخذ مثال بسيط وهو إظهار Message Box
نقوم بفتح مشروع جديد من نوع Windows Application ونكتب الكود التالي:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "RAAD Say Hi To ALL", "RAAD", MB_OK);
return 0;
}
الشرح ..
#include <windows.h>
الهيدر الخاص بإستدعاء دوال API
int WINAPI WinMain
وهي الدالة الرئيسية Access Point الخاصة بي دوال API أي مثل int main()
HINSTANCE hInstance
وهي التي توضح نوع الملف المراد إخراجة بعد عملية التنفيذ هل exe أم dll
HINSTANCE hPrevInstance
لا تستخدم ,, إلا بالأنظمة القديمة مثل win16
LPSTR lpCmdLine
تختص بأمور الـ datatype
int nCmdShow
للإتصال بالدالة ShowWindow(). من أجل عرض النتيجة على الشاشة
-------------------------------
قد لا تكون هذه الأكواد مألوفة للوهله الأولي .. ولأكن مع كثرة التدرب عليها ستري أنك بدأت تفهمها ..
حسناً الآن ما علاقة الـ api ببرمجة الألعاب .. في الحقيقة أن لها كل العلاقة .. عندما تخاطب كرت الشاشة فأنت بحاجة إليها عن طريق Device Context , حسناً عندما تريد إدخال صورة .. فأنت بحاجه إليها أيضاً عن طريق BitBlt , تحريك الأشكال, عمل render التحكم بي الـ buffer , حساب الـوقت المنقضي بين كل فريم ,, عمل الـ Sprites وما إلى ذلك من هذه الأمور ... والأهم عمل وبندوز لتستطيع عن كل هذا بداخلها ..
الخلاصة .. من لم يدخل في الـ api فلن يستطيع الدخول بشكل صحيح ببرمجة الألعاب .. طبعاً أن هنا لا أطالب بحفظ جميع هذه الدوال لأنها تعد بالمئات .. ولأكن أطالب بفهمها ... وبخاصة التي يتعلق الأمر فيها بأمور الرسم ..
س3- أين أجد هذه الدوال ؟ هل هناك manual ما ؟
بي الـ help التابع للـ Visual Studio أو موقع مايكروسفت ...
RAAAAD
02-10-2006, 04:18 PM
بقيت هذه الاسئلة ...
س1- هل نستطيع القول عن السي ++ أنها كائنية التوجه OOP ؟
أريد الوقع الرسمي لشرح المكتبات في السي ++ ...
وسأجيب عليها بعد الإفطار .... لأني بدأت أحس بأن العالم يلف من حولي :D
Son Of UAE
02-10-2006, 06:56 PM
مشكور على فتح موضوع كهذا ؟ يزيد التفاعل بين الاعضاء ... و ما شاء الله .. يبدو ان لديك باع طويل بالسي بلاس بلاس :bigok:
RAAAAD
02-10-2006, 09:16 PM
رجعنا بعد الفطور ... :D
أولاً أشكر كل الأخوة الذين علقوا على الموضوع ...
------------------------------
س1- هل نستطيع القول عن السي ++ أنها كائنية التوجه OOP ؟
شوف يا .. CHALLENGER .. أعرف بأن سؤالك يدل عن حيره لأن هناك من يقول نعم هي كائنية والآخر يقول لا بل ليست كذلك ... وفي الحقيقة لا أدري الصنف الآخر وهم الذين يقولون بأنها غير كائنية ما هو دليلهم ...
إذن لنرد على هذا الكلام كالتالي :
إشترط الباحثون بأن أي لغة تريد أن تكون كائنية يجب أن تدعم عدة مصطلحات ومن أهمها ..
الـ Class الفئات
الـ Polymorphism تعدد الأشكال
الـ Encapsulation التغليف
الـ Inheritance الوراثة
------------------------------
الآن لنرى هل تدعم السي بلس بلس هذه المصطلحات :
الـ Class الفئات: بكل بساطة هي عبارة عن الكائن مع محتوياته من data member و data function , بمعني آخر ((هي مجموعة من الدوال والمتغيرات لها علاقة ببعضها البعض.
في المثال بالأسفل قمنا بعمل فئة وأسمينها ((Mosters)) وحوش ,, وقمنا بتعريف القيم والمشيدات فية ,,, وأعلنا عن هذا الوحش ككائن بي الدالة الرئيسية وسميناه Kong
//By RAAAAD
#include <iostream>
#include <string>
using namespace std;
class Monsters
{
public :
Monsters(string name,int power,int damage);
void dis();
private:
string mname;
int mpower;
int mdamage;
};
Monsters::Monsters (string name,int power,int damage)
{
this->mname = name;
this->mpower = power;
this->mdamage = damage;
}
void Monsters::dis ()
{
cout << "The Name Of Monster Is: " << this->mname << endl;
cout << "The Power Of Monster Is: " << this->mpower << endl;
cout << "The Damage Of Monster Is: " << this->mdamage << endl;
}
int main()
{
Monsters Kong("KONG",4,6);
Kong.dis ();
cout << "-----------------------------"<< endl;
}
==================
الـ Polymorphism تعدد الأشكال : هو المصطلح الذي يتيح لي لجعل الفئة تتخذ أكثر من
شكل, وجميع هذه الأشكال تنتمي للشكل الرئيسي
نأخذ مثال على ذالك, حيث نلاحظ كيف أن الفئة shapes أخذت أكثر من شكل ففي مرة أخذت شكل الدائرة , وفي المرة الآخرى أخذت شكل المستطيل
//By RAAAAD
#include <iostream>
#include <string>
using namespace std;
const float pi = 3.14;
class shapes
{
public:
virtual float area();
virtual float perimeter();
virtual string type();
};
class circle : public shapes
{
public:
circle(float x);
float area();
float perimeter();
string type();
private :
float mx;
};
class rectangle : public shapes
{
public:
rectangle(float w,float l);
string type();
float area();
float perimeter();
private :
float mw;
float ml;
};
string shapes::type ()
{
return "No Shapes";
}
float shapes::area ()
{
return 0;
}
float shapes::perimeter ()
{
return 0;
}
circle::circle(float x)
{
this->mx = x;
}
float circle::area ()
{
return pi * this->mx * this->mx;
}
string circle::type()
{
return "Circle";
}
float circle::perimeter()
{
return 2 * pi * this->mx ;
}
rectangle::rectangle (float w, float l)
{
this->ml = l;
this->mw = w;
}
string rectangle::type ()
{
return "Rectangle";
}
float rectangle::area ()
{
return this->mw * this->ml ;
}
float rectangle::perimeter ()
{
return 2 * this->mw + 2* this->ml ;
}
int main()
{
shapes* ss[8];
ss[0] = new circle(1);
ss[1] = new circle(2);
ss[2] = new circle(3);
ss[3] = new circle(4);
ss[4] = new rectangle(2,4);
ss[5] = new rectangle(6,4);
ss[6] = new rectangle(2,10);
ss[7] = new rectangle(2,8);
for (int i =0;i <8;i ++)
{
cout << ss[i]->type () <<" ";
cout << ss[i]->area () << " " << ss[i]->perimeter () << endl;
}
for (int i =0;i <8;i ++)
{
delete ss[i];
}
}
==================
الـ Encapsulation التغليف : وهي إخفاء بعض البيانات لحمايات الكائن .. بواسطة إستخدام الجمل التالي :
public في حالة الرغبة بمشاركة أجزاء هذا الكائن مع أي جزء أو كائن آخر في الكود
Private : في حالة الرغبة بمشاركة أجزاء الكائن داخلياً فقط.
Protected : في حالة مشاركة أجزاء من الكائن مع كائن آخر تربطهم علاقو وراثة ..
==================
الـ Inheritance الوراثة : وهي توريث جمييع خصائص الـ Base Class إلى الـ Sub Class , كما في المثال بالأسفل .. حيث أن لدينا فئة Monsters وهي الفئة الأساسية ,, وغالباً ما تكون هذه الفئة ((Base Class )) في الفئة التي تحوي الروابط المشتركة ما بين الـ Sub Class , يعني نلاحظ في المثال بأن جميع الوحوش Gorila أو Shark سيكون لها إسم, وطاقة, وقوة تدمير ...
//By RAAAAD
#include <iostream>
#include <string>
using namespace std;
//Base Class
class Monsters
{
public :
Monsters(string name,int power,int damage);
protected:
string mname;
int mpower;
int mdamage;
};
//Derive Class
class Gorila : public Monsters
{
public:
Gorila(string name,int power,int damage,int boxing);
void dis();
private:
int mboxing;
};
class Shark : public Monsters
{
public:
Shark(string name,int power,int damage,int hunt);
void dis();
private:
int mhunt;
};
//Decleartion of Monsters
Monsters::Monsters (string name,int power,int damage)
{
this->mdamage = damage;
this->mname = name;
this->mpower = power;
}
//Decleartion of Gorila
Gorila::Gorila (std::string name,int power,int damage,int boxing) : Monsters(name,power,damage)
{
this->mboxing = boxing;
}
//Print Function
void Gorila::dis ()
{
cout << "The Name Of Monster Is: " << this->mname << endl;
cout << "The Power Of Monster Is: " << this->mpower << endl;
cout << "The Damage Of Monster Is: " << this->mdamage << endl;
cout << "The Boxing Of Monster Is: " << this->mboxing << endl;
}
Shark::Shark (std::string name,int power,int damage,int hunt) : Monsters(name,power,damage)
{
this->mhunt = hunt;
}
void Shark::dis ()
{
cout << "The Name Of Monster Is: " << this->mname << endl;
cout << "The Power Of Monster Is: " << this->mpower << endl;
cout << "The Damage Of Monster Is: " << this->mdamage << endl;
cout << "The Hunt Of Monster Is: " << this->mhunt << endl;
}
//Access Point
int main()
{
Gorila Kong("KONG",3,5,9);
Shark Fish("BigFish",4,6,7);
Kong.dis ();
cout << "-----------------------------"<< endl;
Fish.dis ();
}
الخلاصة :
نستطيع أن نستنتج بأن الـ c++ كائنية ... بلا خلاف ... ولأكن الإختلاف يكون بي نسبة دعمها لهذا المفهوم ..
ملاحظة ...
أي شئ غير مفهوم بالأعلا الرجاء إخباري .. وسأقوم بتوضيحة ;)
RAAAAD
02-10-2006, 09:31 PM
أريد الوقع الرسمي لشرح المكتبات في السي ++ ...
عندي هنا ملاحظة على كلمة ((رسمي)) ..
لغة السي بلس بلس لا يوجد لها راعي رسمي مسأول عنها أي كما في الجافا فهناك sun
أو السي شارب فهناك مايكروسوفت ...
يعني أن هذه اللغة ليست حقر لشركة معينة توجب شراء تراخيص لها ... بل هي للجميع ,, ويما أن مايكروسوفت قامت بتبنيها من ناحية التطوير, فإليك هذا الموقع, MSDN التابع لها ..
http://msdn2.microsoft.com/en-us/visualc/default.aspx
GOGENDANTESS
03-10-2006, 07:38 AM
الله يبارك فيك اخوي رااد :) انشاء الله درس الكلاسات ايي عن قريب :)
صج بارك الله فيك :)
CHALLENGER
03-10-2006, 01:38 PM
هي إختصار إلى Applicatin Programming Interface ..
وهي عبارة عن ملفات يستخدمها المبرمجون من أجل ربط برامجهم بي نظام التشغيل (Operating System).
تقوم فكرتها كالتالي: بما أن نظام التشغيل يستخدم
بعض العناصر مثل (textbox, frame, font, color, button) أو بعض الدوال (Functions) مثل (Createwindow, SetwindowText, ExitWindow, TextOut, Copyfile) أو بعض المكتبات مثل (User32, Gdi32.dll, Kernel32) أو بعض من Data Structure مثل (Font) من أجل التحكم في عملياتهفإذن سأقوم بإستخدامها أنا أيضاً لمصلحة برنامجي
ظهرت هذه المكاتب في ثلاثة أجيال وجيل منتظر:
الأول: win16 Bit وهو قديم جداً.
الثاني : win32 Bitحيث كتبت دوالها بإستخدام لغة السي والسي بلاس بلاس, وجائت بالمكتابات (User32, Gdi32.dll, Kernel32)
الثالث: win64 Bit حيث أنها إحتوت على نفس الـ win32 ولأكن بشكل أوسع فتستطيع الدوال الآن معالجة وعنونة أرقام أكبر, وجائت هذه المكاتب على نظامي التشغيل windows XP و Window Server 2003
الرابع: Winfix وهذا الجيل هو المنتظر في windows Vista (على الأقل إلى الآن) حيث أنها كما أعلنوا ستدعم جميع خصائص الـ .Net بما فيها Garbage Collector System (GLR), وأيضاً سوف تستبدل مكتبات الرسومات وهي الـ GUI بي الـ Avalon
الآن صار عندي فكرة واضحة تماماً عن الـAPI , أنا كانت مشكلتي في السي++ أنني لا اتشجع على تعلمه بسبب ان اغلب الكتب التي بدأت أقرئها تعلم على الكونسول و أنا كنت أريد عمل برمجيات Software من خلاله لذلك اتجهت للـVisual C Sharp ! و كنت استخدم الـAPI بدون اي فكرة عنه عند البرمجة بالدايركت إكس لأخرج نافذة تتضمن اللعبة !
قد لا تكون هذه الأكواد مألوفة للوهله الأولي .. ولأكن مع كثرة التدرب عليها ستري أنك بدأت تفهمها ..
حسناً الآن ما علاقة الـ api ببرمجة الألعاب .. في الحقيقة أن لها كل العلاقة .. عندما تخاطب كرت الشاشة فأنت بحاجة إليها عن طريق Device Context , حسناً عندما تريد إدخال صورة .. فأنت بحاجه إليها أيضاً عن طريق BitBlt , تحريك الأشكال, عمل render التحكم بي الـ buffer , حساب الـوقت المنقضي بين كل فريم ,, عمل الـ Sprites وما إلى ذلك من هذه الأمور ... والأهم عمل وبندوز لتستطيع عن كل هذا بداخلها ..
الخلاصة .. من لم يدخل في الـ api فلن يستطيع الدخول بشكل صحيح ببرمجة الألعاب .. طبعاً أن هنا لا أطالب بحفظ جميع هذه الدوال لأنها تعد بالمئات .. ولأكن أطالب بفهمها ... وبخاصة التي يتعلق الأمر فيها بأمور الرسم ..
المثال يلي وضعته و شرحته خلاني اسكت و ما اعرف اسئلك أي سؤال لأني فعلا كنت استخدم هالأكواد و اغلب الأشياء ما اعرف ليش استخدمها بس الحين تغيرت نظرتي لها :kiss:
ي الـ help التابع للـ Visual Studio أو موقع مايكروسفت ...
لم تخظر على بالي لأني لم ابحث اصلا , فما زلت في مرحلة القراءة من الكتب
CHALLENGER
03-10-2006, 01:50 PM
رجعنا بعد الفطور ...
أولاً أشكر كل الأخوة الذين علقوا على الموضوع ...
------------------------------
اقتباس:
س1- هل نستطيع القول عن السي ++ أنها كائنية التوجه OOP ؟
صحتين و هنا (( استغرب على ماذا يتغذى مبرمج السي++ , يمكن فيتامين C :p ))
,,, شرحك اذا كانت السي++ كائنية التوجيه مفصل و طبعا واضح انها لغة كل شيء , و انا لما دخلت في برمجة OOP ما كان عندي فكرة عنها ابدا يعني طول عمري استخدم برمجة سطر بسطر ما اعرف شو اسمها نسيت بس كل اللغات مثل الباسكال و الـphp كانت ليست OOP و عندما حاولت ادخل بسرعة لهذا النوع من البرمجة اتبهدلت فتخيل اني نزلت كتب كاملة تتكلم عن هذه الطريقة !!! و بيني و بينك ما زلت لا اعلم كل شيء عنها غير انا تعتمد على الـevents و فهمتها عندما عملت على # :)
أي شئ غير مفهوم بالأعلا الرجاء إخباري .. وسأقوم بتوضيحة
و الله انت ما تركت مجال لشي غير مفهوم و ردودك كلها Value
و ما اعرف كيف اشكرك انت يلي تطلب :)
RAAAAD
03-10-2006, 08:14 PM
صحتين و هنا (( استغرب على ماذا يتغذى مبرمج السي++ , يمكن فيتامين C ))
ههههههههههههه حلوة :D
عندما حاولت ادخل بسرعة لهذا النوع من البرمجة اتبهدلت فتخيل اني نزلت كتب كاملة تتكلم عن هذه الطريقة !!!
هذا الموضوع طال النقاش فيه .... وسأحاول إختزاله ..
شوف يا CHALLENGE ,, عند الإنتقال من البرمجة ((الإجرائية)) – سطر بي سطر ,, إلى البرمجة الكائنية .. بكل تأكيد ستشعر بصعوبة بالغة ...
سأقول لك لماذا ...
لأنك عند إختيارك لطريقة ما فإنك تعود عقلك على التفكير بأسولبها ... ويصبح من الصعب تغيير هذا الأسلوب ...
لذلك قال الباحثون في هذه الأمور التالي :-
إن من الأسهل تعلم البرمجة الكائنية لشخص لا يعرف شئ في البرمجة ,, عن تعلم البرمجة الكائنية لشخص إعتاد على البرمجة الإجرائية ... ((هل تتخيل معي صعوبة هذا الأمر))
لذلك يجب أن تعود نفسك أن تستخدم البرمجة الكائنية لكي تعتاد على التفكير بنمطها ... أكرر ((يجب أن تعود نفسك)) يعني كمثال ((صغير)) في الـ PHP بدلاً من أن تكتب
<?
echo ("RAAD Say Hi To All");
?>
قم بإستخدام مفهوم الـبرمجة الكائنية
<?
class wellcom
{
function main()
{
echo ("RAAD Say Hi To All");
}
}
$ver = new wellcom;
$ver->main();
?>
وعلى المدي البعيد ستحس بالفارق ... :biggthump
و بيني و بينك ما زلت لا اعلم كل شيء عنها غير انا تعتمد على الـevents و فهمتها عندما عملت على #
البرمجة الكائنية أكبر من مجرد الإعتماد على الـ Events ,,, فالمصطلح الوحيد المسؤول عن ذلك في السي شارب هو الـ Delegate ,,, بمعني آخر ((نستطيع عمل الـ event بالإعتماد على مصطلح الـ delegate والذي هو جزء من البرمجة الكائنية ..
نعرف مصطلح الـ Delegate بأنه هو ((مرجع Reference خاص بي دالة نستدعيها وقت ما نريدها)).
مثال
//By RAAD
using System;
class test
{
public delegate int deleme (int a,int b);
class maths
{
public int addme(int a,int b)
{
return a+b;
}
public int subme (int a,int b)
{
return a-b;
}
}
class last
{
public static void Main()
{
deleme delemeobj; // Delcare Delegate
maths mm = new maths(); // Create Object
delemeobj = new deleme (mm.addme); // CreateDelegate
int i = delemeobj (9,4); // Call Delegate
Console.WriteLine (i);
}
}
}
الآن كبف تستفيد الـ event من هذا الكلام ... بواسطة هذه الطريقة
EventName += New DelegateName (eventHandlerFinction)
مثال على ذالك ...
//By RAAD
using System;
using System.Timers ;
class test
{
static int counter = 0;
static string dis = "RAAD SAY IT IS EASY";
static void Main()
{
Timer my = new Timer(1000);
my.Elapsed += new ElapsedEventHandler (WriteChar);
my.Start();
Console.ReadLine ();
}
static void WriteChar (object my, ElapsedEventArgs z)
{
Console.WriteLine (dis[counter++ % dis.Length]);
}
}
و في النهاية أشكرك Challenge على فتح مثل هكذا مواضيع ... ,, فإني آراك من الأشخاص الذين يحبون أن يعرفوا ماذا يجرى من وراء الستار ... وهذا هو طريق الفهم الصحيح :biggthump
وإذا عندك أي سؤال .. أو أحد الأخوه ... فاليتفضل :bigok:
جميع حقوق برمجة vBulletin محفوظة ©2025 ,لدى مؤسسة Jelsoft المحدودة.
جميع المواضيع و المشاركات المطروحة من الاعضاء لا تعبر بالضرورة عن رأي أصحاب شبكة المنتدى .