يستخدم املصطلح Composition عندما يكون لدينا صف يحوي في الـ data member أغراض من صفوف أخرى . تدعى أيضا بعالقة has-a أي.
Download ReportTranscript يستخدم املصطلح 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 بدءا من الصف االبن صعودا لآلباء .