![]() |
|
الدرس الحادي والعشرون - الوراثة Inheritance - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90) +--- قسم : قسم دورات المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=113) +---- قسم : دورة .net 2008 . لنبدأ سوياً (http://vb4arb.com/vb/forumdisplay.php?fid=138) +---- الموضوع : الدرس الحادي والعشرون - الوراثة Inheritance (/showthread.php?tid=5614) |
الدرس الحادي والعشرون - الوراثة Inheritance - RaggiTech - 14-10-12 كاتب الموضوع : أحمد جمال بسم الله الرحمن الرحيم . السلام عليكم ورحمة الله وبركاته . ذكرنا في درس سابق ان OOP لها ثلاث عناصر اساسية ، قمنا بشرح المفهوم الأول Encapsulation في دروس سابقة ، درسنا اليوم مخصص لشرح الوراثة Inheritance فيما نؤجل شرح مفهوم ال Polymorphism إلى درس لاحق . والآن سنبدأ بعمل مثال نتابع معه العمل ، لنفترض المثال السابق الذي شرحناه الخاص بالعربة : C#: كود : class Carكود : Class Car الدرس الحادي والعشرون - الوراثة Inheritance - RaggiTech - 14-10-12 تعريف علاقة is-a : كما ذكرنا في الدرس السابع عشر ، فإن العلاقة قد تكون is-a وقد تكون has-a ، سنحاول الآن شرح النوع الأول من العلاقات والذي يعني ان الكلاس المشتق هو من نوع الكلاس الرئيسي ، سنفترض سيارة BMW : C#: كود : class BMW: Carكود : Class BMW C#: كود : BMW ahmedcar=new BMW();كود : Dim ahmedcar As New BMW() C#: كود : class BMW: Carكود : Class BMW C#: كود : class Carكود : Class Car C#: كود : class BMW: Carكود : Class BMW الدرس الحادي والعشرون - الوراثة Inheritance - RaggiTech - 14-10-12 الكلمة المحجوزة sealed : يعني استخدام هذه الكلمة ان هذا الكلاس لا يمكن الاشتقاق منه ، يتم ذلك بالشكل التالي : C#: كود : sealed class Carكود : NotInheritable Class Car الدرس الحادي والعشرون - الوراثة Inheritance - RaggiTech - 14-10-12 الوراثة المتعددة : لا توفر لغة السي شارب او ال VB.net مبدأ الوراثة المتعددة ، في حين تطبقه فقط manged c++ ، معنى كلمة الوراثة المتعددة ان بامكان كلاس ما ان يشتق من اكثر من كلاس ، لنفترض لدينا كلاس شاحنة وكلاس سيارة ، في حالة دعم لغة ما للوراثة المتعددة فإننا نستطيع عمل نوع جديد يحتوي على خصائص الشاحنة والسيارة العادية ، ولكن هذا ما لا توفره كل من السي شارب او ال VB.net . وكبديل لذلك ، تقدم اللغتان دعم لعمل Implementation لاكثر من interface ، وهو ما سنتعرف عليه حينما نصل إلى هذا الجزء . أما لماذا لم تقدم مايكروسوفت دعم الوراثة المتعددة في C# و VB.net ، إليك هذا الرابط : http://blogs.msdn.com/csharpfaq/archive/2004/03/07/85562.aspx الدرس الحادي والعشرون - الوراثة Inheritance - RaggiTech - 14-10-12 التعديل في الكلاس المشتق : كما رأينا في الدروس السابقة ، يمكننا التعديل مباشرة على خصائص وطرق وأحداث ودوال الكلاس الجديد ، في المثال السابق قمنا باضافة دالة تسمح لنا بتغيير الاسم ، يمكننا اضافة خاصية جديدة للكلاس BMW تحتوي على عدد أجهزة التلفزيون داخل السيارة كميزة اضافية في السيارات من نوع BMW ، وهكذا ... يمكننا عمل كلاس آخر لعربة فيراري ، في هذه الحالة يمكننا اضافة عدد الفتحات الجانبية للمحرك . لكن لو احتجنا في مرحلة الى تعريف خاصية maxSpeed لجميع السيارات فيكفي اضافتها في الكلاس الاساسي Car وستجدها موجودة تلقائياً في الكلاسات الأبناء جميعاً . من هنا نستطيع ان نلاحظ ان واحدة من الفوائد الرئيسية لعملية الوراثة هي وضع قاعدة عامة للعناصر المتشابهة ، وعمل نسخ لاضافة نقاط الاختلاف فقط بدلاً من اعادة تكرار كل منها عدة مرات ، ربما لن تجد الفرق كبيراً في المثال السابق حيث اننا نعمل مع 3 او 4 خصائص فقط ، ولكن في مثال حقيقي مع عدة اوامر للتعامل مع المستخدم وللحفظ في قاعدة البيانات والطباعة والعرض والعمليات الحسابية ستستطيع ان تدرك الفارق بين استخدام مفهوم الوراثة وعدمه . الدرس الحادي والعشرون - الوراثة Inheritance - RaggiTech - 14-10-12 العلاقة من نوع has-a : كما اوضحنا في اول درسنا فهذا هو النوع الثاني من العلاقات بين الفئات المختلفة ، هذا النوع يعني ان الكلاس يحتوي على كلاس آخر ، لو افترضنا مثال كلاس العجلات بالشكل التالي : C#: كود : class Tiresكود : Class Tires C#: كود : class Carكود : Class Car الدرس الحادي والعشرون - الوراثة Inheritance - RaggiTech - 14-10-12 ال Casting : يقصد بال Casting عموماً هو التحويل من نوع إلى آخر . والآن سنحاول تطبيق نفس المفاهيم على ال Classes ، الطريقة الأولى للتحويل هي استخدام (cast) العادية ، مثلاً لو قمنا بتعريف سيارة BMW : c#: كود : BMW ahmedCar=new BMW();كود : Dim ahmedCar As New BMW()النقطة الثانية لو قمنا بتعريف BMW بالصورة التالية : C#: كود : Car ahmedCar=new BMW();كود : Dim ahmedCar As Car = New BMW()لنفترض مثالاً آخر قمنا فيه بتعريف BMW بالشكل التالي : C#: كود : Object ahmedCar=new BMW();كود : Dim ahmedCar As Object = New BMW()c#: كود : functionname((Car)ahmedCar);كود : functionname(DirectCast(ahmedCar, Car)) الدرس الحادي والعشرون - الوراثة Inheritance - RaggiTech - 14-10-12 الكلمة المحجوزة is : تقوم هذه الكلمة باختبار فيما إذا كان الطرف الاول هو من الطرف الثاني ، مثال : c#: كود : if (ahmedCar is BMW)كود : If TypeOf ahmedCar Is BMW Thenالدرس الحادي والعشرون - الوراثة Inheritance - RaggiTech - 14-10-12 Visual Studio Class Diagram يوفر لك الفيجوال ستوديو ابتداء من الاصدار 2005 اداة لعمل ال Class Diagram ، هذا مثال عليها : يمكنك اضافتها من new - class diagram ، ومن ثم العمل عليها مباشرة ، او عرض الكلاسات التي لديك ، يمكنك انشاء العلاقات المختلفة في هذا ال mode . |