1 / 38

C++ Programming

C++ Programming. L12 . Inheritance. الصفوف Classes ـ review Composition :. يستخدم المصطلح Composition عندما يكون لدينا صف يحوي في الـ data member أغراض من صفوف أخرى . تدعى أيضاً بعلاقة has-a أي علاقة ملكية . أمثلة :

amal
Download Presentation

C++ Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Programming L12 . Inheritance

  2. الصفوف Classes ـ review Composition: • يستخدم المصطلح Composition عندما يكون لدينا صف يحوي في الـdata member أغراض من صفوف أخرى . • تدعى أيضاً بعلاقة has-a أي علاقة ملكية . • أمثلة : • Car has a wheel فيكون لدينا صف Car يحوي بداخله غرض من الصف Wheel . • Person has a birthday فيكون لدينا صف Person بداخله غرض من الصف Date . • Room has a Table فيكون لدينا صف Room بداخله غرض من الصفTable .

  3. الصفوف Classes ـ Inheritance الوراثة : • يستخدم المصطلح Inheritance عندما يكون لدينا صف يشترك مع صف آخر في العديد من الخصائص . • تدعى علاقة الوراثة بعلاقة is – a أي علاقة ماهية. • أمثلة : • Car is a Vehicle فيكون لدينا صف Car يرث بعض الخصائص من الصف Vehicle. • Student is a Personفيكون لدينا صف Student يرث بعض الخصائص من الصف Person . • Circle is a Shape فيكون لدينا صف Circle يرث بعض الخصائص من الصف Shape .

  4. الصفوف Classes ـ Inheritance الوراثة : Laptop is a computer Pc is a computer

  5. الصفوف Classes ـ Inheritance الوراثة : Student is a Human Employee is a Human

  6. الصفوف Classes ـ Inheritance الوراثة :

  7. الصفوف Classes ـ Inheritance الوراثة : • تعتبر الوراثة Inheritance مبدأ أساسي من مبادئ الـبرمجة غرضية التوجه OOP. • حيث يتم الاستفادة من صفوف مبنية مسبقاً . • يتم إضافة خصائص جديدة على صفوف مبنية مسبقاً .

  8. الصفوف Classes ـ Inheritance الوراثة : • نقوم بتسمية الصف ShapeبـBase class أو Parent class . • نقوم بتسمية الصف Circle بـDerived class أو Child class . • يكون الأب Base class حاوياً على الخصائص المشتركة بين الأبناء . • وبعدها يقوم كل ابن بإضافة خصائص جديدة له . • مثال آخر :Base Class Vehicle • Derived class Car , it’s small , have 4 wheels , …….. • Derived class Buss , it’s Big , have more than 4 wheels ,……

  9. الصفوف Classes ـ Inheritance الوراثة :

  10. الصفوف Classes ـ Inheritance الوراثة : Quad is a Shape Direct Inheritance Square is a Shape Indirect Inheritance

  11. الصفوف Classes ـ Inheritance الوراثة : Single Inheritance Multiple Inheritance

  12. الصفوف Classes ـ Inheritance الوراثة :

  13. الصفوف Classes ـ Inheritance الوراثة :

  14. الصفوف Classes ـ Inheritance الوراثة : إن الـChild_class يملك جميع الـmembers الموجودة في الـBase_class ولكنه لا يستطيع الوصول إلى بعضها وذلك وفقاً للـaccess mode كما سنرى بعد قليل . إن Inheritance_Type هي نمط الوراثة وهي public , private , protected . الوضع الافتراضي إن لم يتم التصريح عنها بشكل ظاهري هو private .

  15. الصفوف Classes ـ Inheritance الوراثة : في داخل الصف A يمكننا الوصول إلى الـmembers مهما كان access modifier لها public , private , protected . يمكن للتوابع الصديقة رؤيةالـmembers مهما كان access modifier لها public , private , protected . لا يمكننا رؤية الـprivate members أو protected members من خارج الصف .

  16. الصفوف Classes ـ Inheritance الوراثة : الصف B يرث من الصف Aالـpublic , protected members وكأنها معرفة لديه . الصف الابن B لا يمكنه الوصول إلى الـprivate members للصف الأب A . الصف الابن B يستطيع الوصول إلى الـprotected members للصف الأب A . من خارج الصف B لا يمكن رؤية سوى الـpublic members .

  17. الصفوف Classes ـ Inheritance الوراثة : من خارج الصف B لا يمكن رؤية سوى الـpublic members . نلاحظ أنه يمكننا الوصول إلى الـattribute x من خلال الغرض b . إذاً داخل الصف B يكون لدينا جميع الـpublic members , protected members للصف الأب . أما خارج الصف B عند إنشاء غرض من B فإنه لا يمكننا الوصول إلا إلى الـpublic members. التوابع الصديقة لا تتم وراثتها وإنما يتم وراثة data members والـ methods

  18. الصفوف Classes ـ Inheritance الوراثة : لا يتغير شي في الصف A . لا يتغير شي في الصف B . أي أنه نفس الرؤية تبقى سائدة . ماذا يحصل في حال كان الـInheritance Type هو protected ماذا يحصل في حال كان الـInheritance Type هو private .. اكتشف بنفسك والذي يتغير هو فقط خارج الصف B عند إنشاء غرض من الصف B فإن هذا الأخير لا يمكنه رؤية سوى الـpublic members التي يملكها دون أن يستطيع الوصول إلى public members الموجودة عند والده . إن protected Inheritance type نادر الاستخدام . سوف نستخدم في أمثلتنا Inheritance_typeالـpublic دوماً .

  19. الصفوف Classes ـ Inheritance الوراثة : • يتم رؤيتها من الصف الأب . • يتم رؤيته من الصف الابن . • يتم رؤيتها من الأصدقاء للصف الأب . • يتم رؤيتها من الأصدقاء للصف الابن . • يتم رؤيتها من خارج الصف الابن . • تمثل أعلى إمكانية للوصول . Public members In Base Class

  20. الصفوف Classes ـ Inheritance الوراثة : • يتم رؤيتها من الصف الأب . • لا يتم رؤيتها من الصف الابن . • يتم رؤيتها من الأصدقاء للصف الأب . • لا يتم رؤيتها من الأصدقاء للصف الابن . • لا يتم رؤيتها من خارج الصف الابن . • تمثل أدنى إمكانية للوصول . Private members In Base Class

  21. الصفوف Classes ـ Inheritance الوراثة : • يتم رؤيتها من الصف الأب . • يتم رؤيتها من الصف الابن . • يتم رؤيتها من الأصدقاء للصف الأب . • يتم رؤيتها من الأصدقاء للصف الابن . • لا يتم رؤيتها من خارج الصف الابن . • تمثل حل وسط بين الـpublic و private . Protected members In Base Class

  22. الصفوف Classes ـ Inheritance الوراثة : • Constructor . • Destructor . • الـfriends . • الـstatic data members . • الـstatic member function. ليس كل شي تتم وراثته !! وهذه بعض الأشياء التي لا تتم وراثتها !

  23. الصفوف Classes ـ Inheritance الوراثة : • نحن نعلم أنه عندما يرث الصف B من الصف A فإنه يرث الـmethod و الـdata members . Overloading & Overriding • لنفرض أننا قمنا بكتابة method جديد في الصف الابن وكان اسمه نفس اسم method في الصف الأب هنا نميز حالتين: • في حال تم تطابق الـArgument لهذا الـmethod مع الـmethod الموجود عند الأب فإن العملية تدعى عندها Overriding وهنا الـmethod الجديد يهيمن على method الأب . • أما في حال كان هناك اختلاف في الـArgument فإن العملية تدعى بـOverloading .

  24. الصفوف Classes ـ Inheritance الوراثة : OverridingExample

  25. الصفوف Classes ـ Inheritance الوراثة : Overriding • إذاً عندما نقوم بتعريف method في الابن مماثل لـ method عند الأب في الاسم والـ Argument فإن هذه العملية تدعى overriding وبالتالي فإن method الابن يهيمن على method الأب . • إذا اضطرينا للوصول إلى method الأب من الصف الابن فإنه يجب علينا استخدام :: • في خارج الصف الأب عند استدعاء هذا الـmethod من غرض من الصف الأب فإنه يستدعي method الأب بالطبع . • في خارج الصف الابن عند استدعاء هذا الـmethod من غرض من الصف الابن فإنه يستدعي method الابن لأن method الابن قام بالهيمنة على method الأب .

  26. الصفوف Classes ـ Inheritance الوراثة : Overloading Example

  27. الصفوف Classes ـ Inheritance الوراثة : Overloading • إذاً عندما نقوم بتعريف method في الابن مماثل لـ method عند الأب في الاسم مع الاختلاف في الـArgument فإن هذه العملية تدعى overloading . • إذا أردنا الوصول إلى method الأب من الصف الابن فإنه يجب علينا استخدام ::

  28. الصفوف Classes ـ Inheritance الوراثة : Constructor & Destructor • نحن نعلم أنه يتم استدعاء الباني تلقائياً من أجل تهيئة الـdata members . • عند إنشاء غرض من الصف الابن فإنه ينبغي علينا تهيئة القيم الموجودة في الصف الاب وبالتالي ينبغي علينا استدعاء باني الصف الأب في باني الصف الابن . • وفقاً لذلك فإن باني الأب ينفذ أولاً ثم يليه باني الابن . • يتم الهدم بترتيب معاكس لترتيب الإنشاء . • آخر غرض تم إنشاءه هو أول غرض يموت .

  29. الصفوف Classes ـ Inheritance الوراثة : Constructor قم بكتابة الـcode ثم أجري عملية Debug وشاهد كيف يقوم الـCompiler بتنفيذ التعليمات . • هنا قمنا باستدعاء باني الصف الأب في باني الصف الابن بشكل صريح وذلك باستخدام member initialization list. • إن لم نقم باستدعاء باني الأب في باني الابن في الـInitialization list فإن الـcompiler سوف يقوم باستدعاءه تلقائياً ولكن دون أن يقوم بتمرير القيم لباني الأب .

  30. الصفوف Classes ـ Inheritance الوراثة : Constructor& Destructorexample

  31. الصفوف Classes ـ Inheritance الوراثة : Constructor& Destructorexample الآن سنعيد نفس المثال ولكن دون استدعاء باني الأب في باني الابن ماذا سيتغير ؟

  32. الصفوف Classes ـ Inheritance الوراثة : Multiple Inheritance • ذكرنا سابقاً أنه يمكن أن يكون لدينا وراثة متعددة • أي يكون لدينا صف B يرث من الصف A1 والصف A2 . • جميع المفاهيم في الـSingle Inheritance تنطبق على الوراثة المتعددة Multiple Inheritance .

  33. الصفوف Classes ـ Inheritance الوراثة : Multiple Inheritance

  34. الصفوف Classes ـ Inheritance الوراثة : Multiple Inheritance • انتبه إلى الـSyntax في الوراثة المتعددة . • ترتيب استدعاء بواني الآباء يتم وفقاً لكيفية ورودها في باني الابن في الـInitialization list . • يمكن الوراثة من أكثر من صف . • دائماً باني الابن يستدعى باني الأب . • يتم هدم الأغراض بشكل معاكس لترتيب إنشاءها أي آخر غرض تم إنشاءه هو أول غرض سيموت .

  35. الصفوف Classes ـ Inheritance الوراثة : Multiple Inheritance • لنفترض أن الصف B يرث من الصف A1 و الصف A2 . • لنفترض أن الصف A1 يحوي data member اسمه x ومصرح عنه أنه public . • لنفترض أن الصف A2 يحوي data member اسمه x ومصرح عنه أنه public . • الآن الصف B يملك متحولين x إحداهما ورثه من A1 والآخر ورثه من A2 . • يجب التعامل مع هذه الحالة بحذر . لاحظ المثال التالي :

  36. الصفوف Classes ـ Inheritance الوراثة : Multiple Inheritance Example1 يتم حل التضارب من خلال scope resolution operator .

  37. الصفوف Classes ـ Inheritance الوراثة : Multiple Inheritance Example2 عندما يتم استدعاء member من غرض ابن فإنه يتم البحث عن هذا الـmember بدءاً من الصف الابن صعوداً للآباء .

  38. The End

More Related