يستخدم املصطلح Composition عندما يكون لدينا صف يحوي في الـ data member أغراض من صفوف أخرى . تدعى أيضا بعالقة has-a أي.
Download
Report
Transcript يستخدم املصطلح Composition عندما يكون لدينا صف يحوي في الـ data member أغراض من صفوف أخرى . تدعى أيضا بعالقة has-a أي.
يستخدم املصطلح Compositionعندما يكون لدينا صف يحوي في الـ data member
أغراض من صفوف أخرى .
تدعى أيضا بعالقة has-aأي عالقة ملكية .
أمثلة :
Car has a wheelفيكون لدينا صف Carيحوي بداخله غرض من الصف .Wheel
Person has a birthdayفيكون لدينا صف Personبداخله غرض من الصف . Date
Room has a Tableفيكون لدينا صف Roomبداخله غرض من الصف . Table
يستخدم املصطلح Inheritanceعندما يكون لدينا صف يشترك مع صف آخر في العديد
من الخصائص .
تدعى عالقة الوراثة بعالقة is – aأي عالقة ماهية.
أمثلة :
Car is a Vehicleفيكون لدينا صف Carيرث بعض الخصائص من الصف .Vehicle
Student is a Personفيكون لدينا صف Studentيرث بعض الخصائص من الصف
.Person
Laptop is a computer
Pc is a computer
Computer
Laptop
PC
Human
Student
………
Student is a Human
Employee is a Human
Employee
تعتبر الوراثة Inheritanceمبدأ أساس ي من مبادئ الـبرمجة غرضية التوجه .OOP
حيث يتم االستفادة من صفوف مبنية مسبقا .
يتم إضافة خصائص جديدة على صفوف مبنية مسبقا .
. Parent class أوBase class بـShape نقوم بتسمية الصف
Shape
. Child class أوDerived class بـCircle نقوم بتسمية الصف
. حاويا على الخصائص املشتركة بين األبناءBase class يكون األب
Circle
Quad
. وبعدها يقوم كل ابن بإضافة خصائص جديدة له
Base Class Vehicle
: مثال آخر
Derived class Car , it’s small , have 4 wheels , ……..
Derived class Buss , it’s Big , have more than 4 wheels ,……
Shape
Shape
Quad
Quad
Quad is a Shape
Direct Inheritance
Rectangle
Square
Square is a Shape
Indirect Inheritance
Base class
Child Class
Single Inheritance
Base class 1
Base class 2
Child Class
Multiple Inheritance
إن الـ Child_classيملك جميع الـ membersاملوجودة
في الـ Base_classولكنه ال يستطيع الوصول إلى بعضها وذلك
وفقا للـ access modeكما سنرى بعد قليل .
إن Inheritance_Typeهي نمط الوراثة وهي
. public , private , protected
الوضع االفتراض ي إن لم يتم التصريح عنها بشكل
ظاهري هو . private
يمكننا الوصول إلى الـA في داخل الصف
لهاaccess modifier مهما كانmembers
. public , private , protected
مهماmembers يمكن للتوابع الصديقة رؤية الـ
public , private , لهاaccess modifier كان
. protected
أوprivate members
ال يمكننا رؤية الـ
. من خارج الصفprotected members
الصف Bيرث من الصف Aالـ public ,
protected membersوكأنها معرفة لديه .
الصف االبن Bال يمكنه الوصول إلى الـ private
membersللصف األب . A
الصف االبن Bيستطيع الوصول إلى الـ protected
membersللصف األب . A
من خارج الصف Bال يمكن رؤية سوى الـ public
. members
من خارج الصف Bال يمكن رؤية سوى الـ public
. members
نالحظ أنه يمكننا الوصول إلى الـ attribute xمن
خالل الغرض . b
إذا داخل الصف Bيكون لدينا جميع الـ public
members , protected membersللصف األب
.
أما خارج الصف Bعند إنشاء غرض من Bفإنه ال
التوابع الصديقة ال تتم وراثتها وإنما يتم وراثة
data membersوالـ methods
ال يتغير ش ي في الصف . A
ال يتغير ش ي في الصف . B
أي أنه نفس الرؤية تبقى سائدة .
ماذا يحصل في حال كان الـ Inheritance Type
هو protected
ماذا يحصل في حال كان الـ Inheritance Type
هو .. privateاكتشف بنفسك
والذي يتغير هو فقط خارج الصف Bعند إنشاء غرض من الصف Bفإن هذا األخير ال
يمكنه رؤية سوى الـ public membersالتي يملكها دون أن يستطيع الوصول إلى public
membersاملوجودة عند والده .
إن protected Inheritance typeنادر االستخدام .
سوف نستخدم في أمثلتنا Inheritance_type
الـ publicدوما .
يتم رؤيتها من الصف األب .
يتم رؤيته من الصف االبن .
يتم رؤيتها من األصدقاء للصف األب .
يتم رؤيتها من األصدقاء للصف االبن .
يتم رؤيتها من خارج الصف االبن .
تمثل أعلى إمكانية للوصول .
Public members In Base Class
يتم رؤيتها من الصف األب .
ال يتم رؤيتها من الصف االبن .
يتم رؤيتها من األصدقاء للصف األب .
ال يتم رؤيتها من األصدقاء للصف االبن .
ال يتم رؤيتها من خارج الصف االبن .
تمثل أدنى إمكانية للوصول .
Private members In Base Class
يتم رؤيتها من الصف األب .
يتم رؤيتها من الصف االبن .
يتم رؤيتها من األصدقاء للصف األب .
يتم رؤيتها من األصدقاء للصف االبن .
ال يتم رؤيتها من خارج الصف االبن .
تمثل حل وسط بين الـ publicو . private
Protected members In Base Class
. Constructor
!! ليس كل شي تتم وراثته
! وهذه بعض األشياء التي ال تتم وراثتها
. Destructor
. friends الـ
. static data members الـ
.static member function الـ
نحن نعلم أنه عندما يرث الصف Bمن الصف Aفإنه
يرث الـ methodو الـ . data members
Overloading & Overriding
لنفرض أننا قمنا بكتابة methodجديد في الصف االبن وكان اسمه نفس اسم methodفي الصف
األب هنا نميز حالتين:
في حال تم تطابق الـ Argumentلهذا الـ methodمع الـ methodاملوجود عند األب فإن
العملية تدعى عندها Overridingوهنا الـ methodالجديد يهيمن على methodاألب .
أما في حال كان هناك اختالف في الـ Argumentفإن العملية تدعى بـ . Overloading
Overriding Example
Overriding
إذا عندما نقوم بتعريف methodفي االبن مماثل لـ methodعند األب في االسم والـ Argument
فإن هذه العملية تدعى overridingوبالتالي فإن methodاالبن يهيمن على methodاألب .
إذا اضطرينا للوصول إلى methodاألب من الصف االبن فإنه يجب علينا استخدام ::
في خارج الصف األب عند استدعاء هذا الـ methodمن غرض من الصف األب فإنه يستدعي
methodاألب بالطبع .
في خارج الصف االبن عند استدعاء هذا الـ methodمن غرض من الصف االبن فإنه يستدعي
methodاالبن ألن methodاالبن قام بالهيمنة على methodاألب .
Overloading Example
Overloading
إذا عندما نقوم بتعريف methodفي االبن مماثل لـ methodعند األب في االسم مع االختالف في
الـ Argumentفإن هذه العملية تدعى . overloading
إذا أردنا الوصول إلى methodاألب من الصف االبن فإنه يجب علينا استخدام ::
Constructor & Destructor
نحن نعلم أنه يتم استدعاء الباني تلقائيا من أجل تهيئة الـ . data members
عند إنشاء غرض من الصف االبن فإنه ينبغي علينا تهيئة القيم املوجودة في الصف االب وبالتالي ينبغي
علينا استدعاء باني الصف األب في باني الصف االبن .
وفقا لذلك فإن باني األب ينفذ أوال ثم يليه باني االبن .
يتم الهدم بترتيب معاكس لترتيب اإلنشاء .
آخر غرض تم إنشاءه هو أول غرض يموت .
قم بكتابة الـ codeثم أجري عملية Debugوشاهد كيف
يقوم الـ Compilerبتنفيذ التعليمات .
هنا قمنا باستدعاء باني الصف األب في باني
الصف االبن بشكل صريح وذلك باستخدام
.member initialization list
إن لم نقم باستدعاء باني األب في باني االبن في
الـ Initialization listفإن الـ compiler
سوف يقوم باستدعاءه تلقائيا ولكن دون أن
يقوم بتمرير القيم لباني األب .
Constructor
Constructor & Destructor example
Constructor & Destructor example
اآلن سنعيد نفس المثال ولكن دون استدعاء باني األب في
باني االبن ماذا سيتغير ؟
ذكرنا سابقا أنه يمكن أن يكون لدينا وراثة متعددة
Multiple Inheritance
أي يكون لدينا صف Bيرث من الصف A1والصف
. A2
A1
A2
جميع املفاهيم في الـ Single Inheritanceتنطبق
على الوراثة املتعددة .Multiple Inheritance
B
Multiple Inheritance
Multiple Inheritance
انتبه إلى الـ Syntaxفي الوراثة املتعددة .
ترتيب استدعاء بواني اآلباء يتم وفقا لكيفية ورودها في باني االبن في الـ . Initialization list
يمكن الوراثة من أكثر من صف .
دائما باني االبن يستدعى باني األب .
يتم هدم األغراض بشكل معاكس لترتيب إنشاءها أي آخر غرض تم إنشاءه هو أول غرض سيموت .
Multiple Inheritance
لنفترض أن الصف Bيرث من الصف A1و الصف . A2
لنفترض أن الصف A1يحوي data memberاسمه xومصرح عنه أنه .public
لنفترض أن الصف A2يحوي data memberاسمه xومصرح عنه أنه .public
اآلن الصف Bيملك متحولين xإحداهما ورثه من A1واآلخر ورثه من . A2
يجب التعامل مع هذه الحالة بحذر .الحظ املثال التالي :
Multiple Inheritance Example1
. scope resolution operator يتم حل التضارب من خالل
Multiple Inheritance Example2
عندما يتم استدعاء
memberمن غرض
ابن فإنه يتم البحث
عن هذا الـ member
بدءا من الصف االبن
صعودا لآلباء .