المشاركات

عرض الرسائل ذات التصنيف التوارث في سي بلس بلس

ملخص التوارث في ++C

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

الاحتواء , كائن ضمن كائن في ++C

صورة
الاحتواء , كائن ضمن كائن في التوارث حينما تكون الفئة أ مشتقة من الفئة ب , يمكن أن نقول إن الفئة أ نوع من الفئة ب كمثل قولنا إن الصقور نوع من الطيور , لكونها تحمل كافة صفات الطيور ( الأجنحة , المقدرة علي الطيران) , وصفات مميزة لها (حدة الإبصار قوة المخالب والمنقار ) . ولهذا فإنه كثير ما يطلق علي التوارث : علاقة نوع من king of relation ويوجد نوع أخر يماثل هذه العلاقة تسمي : علاقة الإحتواء containership أو علاقة : له has a relation . فالصفر له ذيل بمعني أن كل صفر له ذيل ] يسمي ذلك في علم المنطق تعريف جامع , أي يجمع كافة أفراد الفئة [ وتمثل هذه العلاقة في الأسلوب الكائني حينما يتضمن كائن كائنا أخر بالصورة التالية : Class A { }; Class B { A objA; // define obj A an object of class A }; وكثيرا ما يؤدي الاحتواء والتوارث لنفس النتيجة , ففي المثال التالي سوف نعيد صياغة البرنامج empmult.cpp بحيث تعرف كل من فئة المدير والباحث علي أنهما يحتويان علي كائنات منفئتي العامل والدارس . empcont.cpp   // empcont.cpp // containership with employees and degrees // UCS...

التوارث المتعدد في ++C

صورة
التوارث المتعدد يمكن لفئة تشتق من أكثر من فئة أساسية , ويكون شكل التعريف كالتالي : Class A { }; Class B { }; Class C : public A, public B { }; يسمي هذا التوارث بالتوارث المتعدد multiple .وكمثال علي هذا تصور أننا نريد أن نسجل الخبرة الدراسية للموظفين , وإنه قد سبق لنا أن وضعنا في برنامج أخر فئة student تقوم بتسجيل المعهد الدراسي ودرجة النجاح في مصفوفة تملأ وتقرأ عن طريق دالتين grtedu(), putedu() , وأننا نريد أن نضيف هذه الإمكانية لفئة الموظفين عن طريق التوارث المتعدد . ولنتصور أننا نريد أن نعطي هذه الإمكانية لفئة المدراء والباحثين فقط ( مخالفين المبادئ الديموقراطية ) سوف يكون الشكل العام للبرنامج بعد تعديله كالأتي : Class student {}; Class employee {}; Class manager : private employee, private student {}; Class scientist : private employee, private student Class labout : public employee {}; أما صياغته الكاملة فهي : employ.cpp   // employ.cpp // models employee database using inheritance // UCS Laboratories #include <i...

التوارث العام والخاص في ++C

صورة
التوارث العام والخاص لاحظت أن الإعلان عن الفئة المشتقة يتضمن الكلمة الحاكمة public كما في : Class manager : public employee فما دورها ؟ إن هذه الكلمة تحدد أن الفئة المنتمية للفئة المشتقة تستطيع أن تتعامل مع الدوال المنتمية الأساسية , ولو كانت الفئة المشتقة معرفة private لما أمكن ذلك أنظر الشكل . شكل الاشتقاق العام والخاص والغالب من التطبيقات تتطلب أن تعلن الفئة المشتقة عامة , حتي يمكنها التعامل مع دوال الفئة الأساسية وتستفيد من إمكانياتها ولكن قد لا تقتضي ظروف أن يود المبرمج إخفاء الفئة الأساسية تماما . تخيل إنك قد صممت فئة لمصفوفة ورضيت عنها تماما وإنك أردت استخدامها لاشتقاق فئة لمكدس , وأنك تريد ألا تعامل كائنات المكدس كمصفوفات , أي عن طريق المؤثر [] , بل دائما من خلال الدالتين push(),pop() عندئذ تخفي الفئة الأساسية عن الفئة المشتقة , بأن تعلن الأخيرة خاصة . مستويات التوارث يمكن إشتقاق فئة مشتقة ففي المثال التالي سوف نشتق من فئة العمال فئة ملاحظين forman نضيف إلي بيانات بيانا بالكمية المنتجة تحت إشرافه (quota) انظر الشكل . شكل مستويات التوارث employ2.cpp ...

تدرج التوارث في ++C

صورة
تدرج التوارث كانت الأمثلة المعطاة إلي التوارث في تطوير برامج موجودة وفي المثال الأتي نستخدمها كأساس لتصميم البرنامج المراد وضعه . فهو يمثل قاعدة بيانات أولية لتجميع بيانات عن الموظفين , وجعلناهم في ثلاثة مجموعات فقط , المدراء والباحثون , والعمال . وفي حين تجمع قاعدة البيانات اسم الموظف ورقمه الكودي تجمع للمدراء الوظيفة ومجموع نقاطه في نادي الجولف ] هل يحتفظ بهذها الرقم في بيانات الموظفين في أمريكا ؟ اختيار عجيب من المؤلف , كان من الممكن التفكير في خصيصة أكثر واقعية [ وبالنسبة للباحثين يحتفظ بعدد الأبحاث التي نشرت لهم . وسوف ننشئ في برنامجا فئة عامة , تتضمن دوال للتعامل مع بيانات الاسم ورقم الموظف ثم نشتق منها ثلاث فئات مدير وباحث وعامل وتحتوي الفئتان الأوليتان البيانات الإضافية والدوال التي تتعامل معها أنظر الشكل . شكل تدرج التوارث employ.cpp   // employ.cpp // models employee database using inheritance // UCS Laboratories #include <iostream.h> #include <conio.h>   const int LEN = 80; // maximum length of names   ...

استخدام مؤثر النطاق في ++C

صورة
استخدام مؤثر النطاق كيف أمكن للدالتين pop(), push() في الفئة المشتقة أن تستدعي الدوال المقابلة لها في الفئة الأساسية ؟ لقد استخدم لذلك مؤثر النطاق scope resolution علي الصورة : Stack :: push(var); Return stack :: pop(); ولولا استخدام هذا المؤثر لظن المترجم أن كل دالة تستدعي نفسها , وهو بالطبع ما لا يقبله فهذا المؤثر يمكنك من أن تحدد أي فئة تنتمي إليها الدالة المطلوبة . تعديل برنامج الأبعاد الإنجليزية التطبيق التالي أكثر تطورا في استخدام التوارث , سوف نعدل البرنامج الخاص بالأبعاد الإنجليزية لكي يتضمن الأبعاد السالبة مع الموجبة . englen.cpp   // englen.cpp // inheritance using English Distances // UCS Laboratories #include <iostream.h> #include <conio.h>   class Distance // English Distance class { protected : // NOTE: can't be private int feet; float inches; public : Distance() // constructor (no args) { feet = 0; inches = 0.0...

الفئات الأصلية والمشتقة في ++C

صورة
التوارث يمكن أن نعتبر التوارث أقوي خصائص البرمجة الكائنية , فيه يمكن توليد فئات من فئات أخري تسمي "الفئات المشتقة derived classes , وتجوز الفئة المشتقة كافة خصائص الفئة الأصلية , مضافة إليها خصائص أخري (أنظر الشكل) شكل التوارث ومن أهم مزايا التوارث إمكانية إعادة الاستخدام بمعني أنه عندما تصاغ فئة معينة وتجتاز الاختبار , فإنه يعاد استخدام نفس الصياغة كما هي في مواقف جديدة مما يوفر من الذاكرة ومن عبء إعادة البرمجة علي حد سواء . ومن جهة , فإن إعادة الاستخدام تعني سهولة توزيع الفئات المكتبية , فالمبرمج بإمكانه استخدام فئة صاغها مبرمج أخر , ويشقق منها ما يشاء من فئات . وسوف نعرض لهذه الإمكانيات بالتفصيل بعد أن نعرض لخصائص معينة للتوارث في صورة عملية . الفئات الأصلية و المشتقة لنعد إلي الفصل التاسع وإلي البرنامج countpp3.cpp الذي استخدمنا فيه الفئة counter كمتغير عام الاستخدام كعداد , يستهل بالصفر أو بأية قيمة أخري , ويتزايد مع الحدث المراد تتبعه , وتقرأ قيمته بدالة المؤثر get_count() . لنفرض أننا نريد أن نضيف للعداد إمكانية التناقص أيضا . لو حاولنا العبث بصياغة البرنا...