السلام عليكم ورحمة الله تعالى وبركاته أما بعد
فأنا اليوم عرفت أني مبتدئ ولا أفقه الا نقطة في بحر البرمجة باستخدام لغة c++ , هاهي القصة الكاملة
بدأت برمجة الجرافيكس منذ 3 سنوات تقريبا وكنت أستخدم C++ فقط وذلك لسرعة التنفيذ و اعتمداها على المؤشرات والمرجعيات الى البرمجة الكائنية التوجه
وخلال هذه المدة كنت قرأت عدة كتب لهذه اللغة وأصبحت أستخدمه بسلاسة كبيرة وتعلمت كل شيئ مذكور في الكتاب من أساسيات اللغة والمؤشرات والبرمجة الكائنية التوجه
الا أنه كان لدي مركب نقص في تلك اللغة وكنت أشعر بأن هناك شيئا ما ناقصا لم أستطع ايجاده , المهم تابعت برمجة الجرافيكس الا أن وقعت الكارثة
أردت استخدام مكتبة CEGUI حملت المكتبة وأنجزت أول مثال لي عليها وكل شيء كان يجري على مايرام
عند تعريف كائن ما كان المثال يستخدم الكود
Direct3D10Render &Render = ...........
وهذا التعريف كان يستخدم داخل الدالة أما اذا عرفته خارج الدالة فسيظهر لك خطأ أن المرجع لم يتم تهيئته.
المشكلة الأولى أني أردت أن أعرف المرجع داخل صنف ثم أهيؤه بعد ذلك في دالة من دوال الصنف فعجزت تماما . فوضعت سؤالا في موقع المكتبة فدلوني على
الرابط التالي هاهو رابط حل المشكلة
والمشكلة أني على علم بالمؤشرات والمرجعيات وكنت عاجزا عن استخدامها ............ حسنا قررت أنها معلومة جديدة وأنه يجب أن لا أيأس أبدا فقرأت الدرس من جديد ووجدت الحل كما يلي
typedef int& A; const A aref = 3;;
وهنا انخفض معدل أملي الى الحضيض لأني أعلم أن الكلمة المفتاحية typedef تستخدم لانشاء اسم مستعار لنمط بينات معين ولم أعلم أنها تستخدم لتشير الى موقع المرجع
أخذتني العزة وحملت مجموعة كتب مخترع اللغة بحد ذاته Bjarne Stroustrup
وأنا أقرِها الآن فوصلت الى فصل البرمجة الكائنية التوجه ووجدت النصائح التالية
[
a] If you can think of ‘‘it’’ as a separate idea, make it a class.
If you can think of ‘‘it’’ as a separate entity, make it an object of some class.
[c] If two classes have a common interface, make that interface an abstract class.
[d] If the implementations of two classes have something significant in common, make that
commonality a base class.
[e] If a class is a container of objects, make it a template.
[f] If a function implements an algorithm for a container, make it a template function implementing
the algorithm for a family of containers.
[g] If a set of classes, templates, etc., are logically related, place them in a common namespace.
[2] When you define either a class that does not implement either a mathematical entity like a
matrix or a complex number or a low-level type such as a linked list:
[a] Don’t use global data (use members).
Don’t use global functions.
[c] Don’t use public data members.
[d] Don’t use friends, except to avoid [a] or [c].
[e] Don’t put a ‘‘type field’’ in a class; use virtual functions.
[f] Don’t use inline functions, except as a significant optimization.
وقد أردت تطبيق النصيحتين التاليتين
[
d] If the implementations of two classes have something significant in common, make that
commonality a base class.
If two classes have a common interface, make that interface an abstract class
.
فلطالما استخدمت الأصناف في البرمجة وهذه نصاءح مفيدة لاستخدامها ولأني كنت أتغاضى عن مفهوم الوراثة ولا أستخدمه الا نادرا ( حسنا سأكون صريحا معكم لم أستخدمه طوال حياتي البرمجية !!!)
وأيضا لم أكلف نفسي عناءا الفهم الجيد التجريد و ماهيته كما لم أعر اهتماما لتتحميل الزائد للمعاملات ( بالرغم من فهمي الجيد للتحميل الزائد للدوال ) أصبت بخيبة أمل كبيرة جدا جدا
لسبب بسيط وهو أني لم أفهم كيفية تطبيق النصيحتين وأيضا فشلت في محاولة حل المشاكل بماتعلمته عن هذه اللغة وأحس بالعار أمامكم رغم معرفتي الكبيرة بالنسبة لي والصغيرة جدا لدرجة التلاشي مقارنة بالمبرمجين الآخرين
حتى أني أصبحت كل يوم أرى شيئا جديدا في اللغة لم أألفه من قبل وهذه بعض الأمثلة
[int 'head' int function () const
وأحيانا أخرى أحمل أكواد مبرمجين آخرين وأقرِها ولا أفهم منها شيئا!!!!!!!!!
هل ألوم الكتاب العرب على عدم وجود كتب تهتم بالتعمق في لغة سي++ وشرح الأفكار المتقدمة نسبيا أم ألوم نفسي أم من ألوم
بالله عليكم كيف أكسب مهارات جديدة هل من مساعدة لوجه الله أريد أن أتعلم وأصبح من أفضل المبرمجين في العالم ( أو على الأقل فهم الكود المكتوب من قبل المبرمجين )
أرجو أن أكون قد أوصلت معاناتي لكم وأرجو أن تساعدوني على تخطي هذه الأزمة وادراج بعض المعلومات حول
1-OOP
2-POINTER & Refernce
3- مواضيع متقدمة في اللغة والتقنيات المستخدمة والمواقع وأي شيء يمكن أن يصقل مهاراتي ويطورها ( هذا اذا كانت لدي مهارة أصلا)
وأصر على المواضيع والكتب والتي تهتم بكل موضوع عن حدة وتشرحه بعمق كبير (مثال كتاب واحد فقط يسرح مثلا المؤشرات فقط طول الكتاب ولا يهتم بالأشياء الخرى وهكذا دواليك لكل موضوع)
والسلام عليكم ورحمة الله تعالى وبركاته

