التوارث في السى بلس بلس

التوارث

ويترتب على مفهوم الفئات مفهوم اخر هو التوارث inheritance فمن معارفنا العامة يمكن ان تضم فئة ما " فئات جزئية subclasses " تنتمى إليها . ففئة الحيوانات تضم الثدييات والبرمائيات واللافقاريات .. الخ , وفئة المركبات تضم السيارات والباصات وغيرها .
والسمة المميزة لهذه العلاقة ان كل فئة جزئية تحمل كافة صفات الفئة الاعلى , وتحمل ايضا صفات تميزها هى عن بقية الفئات الجزئية الاخرى . فالسيارات والباصات لها عجلات ومحرك , لكن كل نوع له سماته التى تميزه عن النوع الاخر . ويمثل الشكل 1 - 6 هذا المفهوم , ومنه ترى ان كافة الكائنات تحمل الصفتين أ و ب , بينما تحمل كل فئة جزئية صفاته الخاصة بها .
Inheritance
وبنفس المفهوم , تتفرع الفئات إلى فئات جزئية Subclasses وتسمى الفئة الاولى الفئة الاصلية او الاساسية base class بينما تسمى الفئة الجزئية فئة مشتقة derived class .
ولتنتبه إلى عدم الخلط بين العلاقة بين الكائن وفئته من ناحية , والفئة الاصلية والفئة الجزئية من ناحية اخرى , فالكائن , والذى يكون مخزنا فى ذاكرة الحاسوب , يكتسب كافة خصائص الفئة التى ينتمي اليها , اما الفئة الجزئية فتكتسب كافة الصفات التى للفئة الاعلي , وصفات اخرى ذاتية لها .

تكرار الاستخدام

ما ان يتم صياغة فئة ما وبعد تصحيحها والاطمئنان على سلامتها يمكن ان توزع على من يود استخدامها من المبرمجين . ويسمى ذلك تكرار الاستخدام reusability ويشابه ذلك الدوال المكتبية فى اللغات التقليدية .
إلا انه فى اللغات الكائنية تضفى خصيصة التوارث على تكرار الاستخدام توسعا هاما فالمبرمج حيث يحصل على الفئة يمكنه , دون ان يعدل فيها ان يضيف لها ما يشاء من خواص اضافية , اى يشتق منها فئات جديدة .
فعلى سبيل المثال , تصور انك قمت بصياغة فئة ( او حصلت عليها ) خاصة بقائمة كتلك التى تستخدم فى النوافذ ورايت انها تفى بغرضك تماما . الا انك اردت ان تعطي وميضا فى حالات معينة فباضافة خاصية الوميض للفئة التى حصلت عليها يكون لديك فئة مشتقة تقدم لك الامكانيات الاصلية والامكانيات التى اضفتها .
وتعتبر سهولة تكرار الاستخدام التى تتميز بها البرمجة الكائنية خاصية هامة , بل لعلها اهم الخصائص , لهذا النوع من البرمجة , فالعديد من الشركات يمكنها ان تستخدم فئات تمت صياغتها فى مشاريع سابقة , وتكون بالتالى بمثابة زيادة فى عائدات تلك المشاريع .

خلق انواع جديدة من البيانات

من بين فوائد البرمجة الكائنية انها تتيح للمبرمج ان يخلق انواعا جديدة من البيانات بطريقة سهلة . لنفرض امك تتعامل مع نقاط ذات بعدين ( كأن تكون نقاطا على مستوى او مواضع تحدد بخطوط الطول والعرض ) فى برنامجك , وتود ان تعبر عن العمليات الحسابية الجارية على تلك النقاط بالشكل التالي :
Position 1 = Position 2 + origin
حيث تكون المتغيرات المذكورة ازواجا من قيم عددية . فبانشائك نوعا من الفئات تسمية Position يتميز بانه يعرف بقيمتين , يمكنك تعريف المتغيرات المذكورة على انها تنتمي إلى تلك الفئة . انك تكون بذلك قد تمكنت من خلق نوع جديد من البيانات . والكثير من خصائص السى بلس بلس تهدف إلى تيسير خلق المتغيرات الجديدة .

تعدد الهيئات وزيادة التحميل

لاحظ ان المؤثرات الحسابية مثل = او + فى المعادلة المبينة سابقا لا تعمل بطريقتها الطبيعية حين تتعامل مع متغيرات مفردة القيمة . فكيف يعلم البرنامج بطبيعة التاثير المطلوب على متغيرات ليس مالوفة فى اللغة , بل قام المبرمج بتخليفها ؟ المفروض ان يبين المبرمج كيفية تاثير هذه المؤثرات على هذه الانواع الجديدة من المتغيرات , وتصبح هذه المؤثرات من الدوال الخاصة بالكائنات من فئة Position .
وتسمى امكانية استخدام مؤثرات بطريقة خاصة تخالف الطريقة الطبيعية لها تعدد الهيئات Polymorphism فالامر بمثابة ان ياخذ المؤثر هيئات تختلف باختلاف البرامج وحيث يستخدم المؤثر مثل = او + بطريقة خاصة يقال انه قد حدث زيادة تحميل Overloading على هذا المؤثر , وزيادة تحميل المؤثرات احد صور تعدد الهيئات وهى ايضا من السمات المميزة للغة السى بلس بلس .

لغة السي ولغة السى بلس بلس

لغة السى بلس بلس متطورة عن السي وبعبارة مباشرة نقول انها فئة جزئية منها , بمعنى ان اغلب الصيغ الصحيحة فى لغة السي صحيحة ايضا فى لغة السى بلس بلس واغلب التجديدات فى لغة السى بلس بلس هى لادخال المفاهيم الكائنية كالكائنات والفئات ( كانت لغة السى بلس بلس تسمى سابقا لغة السي ذات الفئات ) الا ان السى بلس بلس تتضمن خصائص برمجية متطورة بالفعل منها اساليب جديدة للادخال والاخراج وطرق كتابة الاوامر ويبين الشكل 1 - 7 العلاقة بين اللغتين .
The relationship between C and C
والواقع ان الفرق بين اللغتين اكبر مما تتخيل فرغم انه بامكانك كتابة برنامج بلغة السى بلس بلس تبدر وكانها بلغة السي , فانه لا احد يفعل ذلك بل ان كتاب برامج السى بلس بلس يركزون على خصائص متميزة بلغة السي اكثر مما يفعل كتاب السي التقليديون .
واذا كنت عالما بلغة السي فان لك سبقا فى المضمار ( ولكن قد تكون مكتسبا لعادات سيئة ايضا ) ولكنك ستجد اكثر المواد المعروضة جديدة بالفعل .

ارساء الاساس

هدفنا تمكينك من الكتابة بلغة السى بلس بلس باسرع ما يمكن , ولكن كما لاحظت فان هذه اللغة متطورة عن السي التقليدية , ومن ثم فانه بين السطور ستجد بعضها من التقاليد الموروثة عن البرمجة الاجرائية وعلى ذلك فالفصول من الثالث إلى السادس ستكون حول الخصائص الاجرائية للسي ++ والتى توجد اغلبها فى السي . فسوف تعلم عن المتغيرات والادخال والاخراج والدوال وعن الوسائل المتحكمة فى سير البرنامج كالقرارات والدورات Loops وعن الدوال ذاتها وسوف تعلم عن الهياكل Structures حيث ان صيغ الفئات هى نفسها صيغ الهياكل واذا ما كنت تعرف بالفعل لغة السي فقد تساورك رغبة فى تخطي هذه الموضوعات ولكن هناك الكثير من الاختلافات بعضها واضح وبعضها خفى . ولذا فنصيحتنا لك ان تقرأ هذه الفصول وتمر مر الكرام على ما تراه مالوفا لك , وتركز على نقاط الاختلاف بين اللغتين .
اما العرض الفعلي للبرمجة الكائنية فيبدا من الفصل السابع حينما نبدا فى عرض مفاهيم الكائنات والفئات ومن هذه النقطة تبدأ الامثلة عن البرمجة الكائنية .

 

موجز

الفكر الكائني فى البرمجة هو نوع من التنظيم , التركيز فيه على كيفية تصميم البرامج وليس تفاصيل عملها , وبالتحديد فالبرامج الكائنية تدور حول مفهوم الكائنات , وهى العنار التى تضم كلا من البيانات والدوال التى تعمل عليها وتعتبر الفئات بمثابة الموصفات لمجموعات الكائنات .
ولغة السى بلس بلس هى فئة جزئية من لغة السي تضيف اليها امكانات جديد البرمجة الكائنية كما تضيف ايضا خصائص جديدة . وعلاوة على ذلك فان التركيز مختلف بين اللغتين فهناك من الخصائص ما يندر استخدامه فى احدى اللغتين بينما يكثر فى الاخرى والنتيجة هو الحصول على لغة مغايرة بدرجة مدهشة .
ولسوف تكون المنافسة التى كانت عامة فى هذا الفصل اكثر تفصيلا فى الفصول التالية وفى مسيرتك فى تعلم لغة السى بلس بلس ربما تحتاج بين الحين والاخر ان ترجع إلى هذا الفصل .

 

اسئلة

1- الباسكال والبيزك والسي لغات ............... بينما السى بلس بلس لغة .................
2- الموظف فى برنامج كائنى عن العاملين هو :
أ - كائن
ب - فئة
ج - دالة
د - عنصر بيانات
3- المكونان الاساسيان للكائن هما ......... و ................
4- فى السى بلس بلس تسمى الدالة المحتواه فى فئة من الكائنات
أ- دالة منتمية
ب- مؤثر
ج- وحدة بنائية
د- اجراء
5- حماية البيانات من ان تصل اليها دالة غير مخول لها بذلك يسمى ...........
6- اى من الاسيباب التالية مبرر قوي لاستخدام أسلوب البرمجة الكائنية ؟
أ- لك ان تعرف البيانات الخاصة بك .
ب- عبارات البرنامج ابسط منها فى البرمجة الاجرائية
ج- البرنامج الكائنى يمكن ان يعطي وسيلة لمعرفة اخطائه بنفسه
د- من الايسر تصور البرامج الكائنية
7- " السيد " جونز " بالنسبة لبرنامج كائنى هو :
أ- دالة
ب- عنصر بيانات
ج- فئة
د- كائن
8- صواب ام خطأ , برنامج السى بلس بلس لا يختلف عن برنامج السي التقليدية الا فى تفاصيل الصياغة .
9- يسمى دمج البيانات مع الدوال فى وحدة واحدة ............
10- يقصد بتعدد الهيئة :
أ- اشتقاق فئة من فئة اخرى .
ب- اعادة استخدام الفئات فى مواضع اخرى .
ج- امكان استخدام المؤثرات او الدوال بصور اخرى
د- امكانية وضع بيانات جديدة
11- صواب ام خطأ ؟ يمكنك بمجرد ان تنظر لاسطر البرنامج ان تعلم ان كان مكتوبا بلغة السي او السى بلس بلس
12- زيادة التحميل هو صورة من صور ...........
13- المفاهيم الجديدة فى السى بلس بلس
أ- تطوير للغة السي التقليدية
ب- هامة لادخال وتطبيق المفاهيم الكائنية
ج- تبسط من صياغة البرنامج
د- تجعل البرامج اكثر وضوحا

تعليقات

المشاركات الشائعة من هذه المدونة

المؤثرات الحسابية في C++

دوال النمط الرسومي في ++C

الرسم Graphics