بسم الله الرحمان الرحيم:
السلام عليكم و رحمة الله و بركاته،كيف حالكم إخواني ؟ سننتقل اليوم الى مفهوم جديد و مهم جدا الا و هو الوراثة؟لذا ماهي الوراثة؟ و ماهو دورها ؟
ما هي الوراثة في البرمجة؟
دعونا الآن نبقى مع مثالنا السابق مع فئة السيارة Car,والآن نريد مثلا أن ننشئ فئة جديدة ليموزين Limousine التي ليست إلا سيارة Car لكن سنضيف لها خاصية جديدة و هي الطول width،وهنا نحن أمام خيارين،أحدهما أن نعيد كتابة الكود الخاص بهذه الفئة دون ان ننسى خاصيات و دوال الفئة Car لأن Limousine هي كذلك من فئة Car،وهذا سيكون صعبا جدا و متعبا كذلك...أو أن نتبنى مفهوم الوراثة و نستعمله.لكن كيف ذلك ؟
مبدأ الوراثة :
مفهوم الوراثة هو من أسس البرمجة الكائنية و أعمدتها،فهذا المفهوم يمككنا من إنشاء فئات Class ترث خاصيات و دوال فئات أخرى،ففي حالتنا نحن،لا نحتاج إلى إدراج كل خاصيات و دوال فئة Car في كود الفئة Limousine ، يكفي أن نُعلِم الفئة أنها ترث من الفئة Car لكي ترث كل خاصياتها.في هذه الحالة نسمي الفئة التي ترث الخاصيات و الدوال بالفئة البنت و نسمي الفئة التي ترث منها بالفئة الأم،
لكن كيف نفعل ذلك؟
حسننا
هذا هو كود الليموزين
أنشئوا كلاس جديدة في eclipse سنسميها Limousine وسيكون الكود كما يلي:
public class Limousine extends Car { }
هكذا إذن؟!!
نعم هكذا ترث فئة من أخرى،يكفي إضافة الكلمة extends ثم الفئة الأم .
الآن سأعطيكم كود كامل وسنشرحه بالكامل
public class Limousine extends Car {
private float width; public Limousine(){
super();
width = 3.5f;
}
public Limousine(String _brand,String _color,int _model,float _width){
super(_brand,_color,_model);
width = _width ;
}
public float getWidth()
{
return width;
}
public void setWidth(float width)
{
this.width = width;
}
}
كما فلنا سابقا،سنضيف خاصية أخرى لهذه الفئة و هي الطول width ، بنفس الطريقة يمكننا إنشاء مشيدات Constructors لهذه الفئة كيفما نشاء،لكن هناك كلمة غريبة في المشيدين اللذان أنشناهما وهي super.
super في المشيد الأول تعني أننا استدعينا مشيد الفئة الأم التالي:
public Car(){
System.out.println("Car created with default constructor");
this.brand = "";
this.color = "";
this.model = 2000;
number_cars++;
}
إذن هذه الكلمة المفتاحية تمكننا من استدعاء مشيد الفئة الام في مشيد الفئة البنت.
أما بالنسبة للكلمة المفتاحية super في المشيد الثاني فهي تلعب نفس الدور،لكن ما هو المشيد الذي استدعيناه ياترى؟
نعم نعم إنه هو ...
public Car(String _brand,String _color,int _model){
System.out.println("Car created with specific constructor");
this.brand = _brand;
this.color = _color;
this.model = _model;
number_cars++;
}
يمكننا بعد هذا أن نجرب الكود التالي في الكلاس الرئيسية:
public class MainClass {
public static void main(String args[]) {
Limousine lim1 = new Limousine();
Limousine lim2 = new Limousine("Mercedes","Black",2013,4);
System.out.println("the lim1 brand is " +lim1.getBrand());
System.out.println("the lim1 color is " +lim1.getColor());
System.out.println("the lim1 model is " +lim1.getModel());
System.out.println("the lim1 width is " +lim1.getWidth());
System.out.println("the lim2 brand is " +lim2.getBrand());
System.out.println("the lim2 color is " +lim2.getColor());
System.out.println("the lim2 model is " +lim2.getModel());
System.out.println("the lim2 width is " +lim2.getWidth());
}
>}
وهذه هي النتيجة :
Car created with default constructor created with specific constructor the lim1 brand is the lim1 color is the lim1 model is 2000 the lim1 width is 3.5 the lim2 brand is Mercedes the lim2 color is Black the lim2 model is 2013 the lim2 width is 4.0
تلاحظون أن الفئة Limousine تمتلك الخاصيات color ,brand ,model رغم أننا لم نعرفها في الفئة،بل ورثتها من الفئة Car.وهذه هي القيمة المضافة للوراثة،كما يمكن أن استدعاء الدوال الأخرى في الفئة Limousine.
هكذا نكون قد أنهينا هذا الجزء المهم و الذي لابد منه،إذ عند إنشاء برامج حقيقية لابد في الكثير من الأحيان من اللجوء إلى الوراثة لما في ذلك من تبسيط للأكواد و احترافية أكثر.
دمتم في رعاية الله.






0 commentaires:
Enregistrer un commentaire