استكشاف الوراثة في لغة برمجة جافا

استكشاف الوراثة في لغة برمجة جافا

الوراثة هي أحد المفاهيم الأساسية للبرمجة الشيئية. في البرمجة ، تمثل كلمة الميراث علاقة يفترض فيها الفصل الفرعي حالة وسلوك فئة الأصل.





الغرض من الوراثة في تطوير البرمجيات هو تسهيل إعادة استخدام البرامج الآمنة والموثوقة. تتمثل إحدى الفوائد الرئيسية لاستخدام التوريث في أنه يزيل التعليمات البرمجية الزائدة عن الحاجة في برامجك.





موقع pc gamer لا يتم تحميله بشكل صحيح

كيف يعمل الميراث

الفكرة وراء الوراثة هي أن العديد من الفئات أو الكائنات لديها بعض من نفس مجموعة السمات والطرق. لذلك ، بروح إنتاج برامج موثوقة ، يمكن للفصول الجديدة الآن الاستفادة من الفئات ذات الصلة الموجودة مسبقًا ، وإذا لزم الأمر التوسع في الحالات والسلوكيات الحالية.





من الأمثلة الواقعية على كيفية عمل الميراث النظر في الفاكهة. هذه تسمية عامة تعمل على تغليف مجموعة من العناصر المختلفة.

التفاحة هي فاكهة وكذلك البرتقال. ومع ذلك ، فإن البرتقال ليس تفاحة ، لذلك لن يكون لديك فواكه كأحد عناصر مخزونك إذا كنت تمتلك متجرًا. ربما يمكن أن يكون لديك قسم فواكه في مخزونك ، وتحت هذا القسم ، سيكون لديك عناصر أكثر تحديدًا مثل التفاح والبرتقال.



هذه هي الطريقة التي تعمل بها الميراث.

استخدام الوراثة في جافا

يمكن استخدام الوراثة في أي لغة برمجة تستخدم نموذج البرمجة الشيئية. ومع ذلك ، فإن الطريقة الدقيقة التي يتم بها استخدام الوراثة تعتمد على لغة البرمجة المحددة.





على سبيل المثال، C ++ هي أيضًا لغة برمجة موجهة للكائنات . يدعم C ++ ما يُعرف بالوراثة المتعددة ، بينما يدعم Java الوراثة الفردية فقط.

ما يعنيه هذا هو أنه في Java يمكن أن يحتوي الفصل الرئيسي على العديد من الفئات الفرعية ، ولكن كل فئة فرعية يمكن أن تحتوي فقط على فئة أصل واحد (وراثة فردية). ومع ذلك ، هناك طريقة لتحقيق الميراث المتعدد غير المباشر في Java ، من خلال إنشاء علاقة الجد والوالد والطفل.





إنشاء فئة الوالدين في جافا

تُعرف عملية اختيار فئة أصل من مستند متطلبات البرامج باسم التحليل الموجه للكائنات. أثناء هذه العملية ، غالبًا ما تُستخدم العبارة a لتحديد علاقات الوراثة المحتملة. بالاعتماد على مثالنا أعلاه ، يجب أن تكون قادرًا على رؤية أن الفاكهة ستكون فئة الوالدين.

مثال على فئة الآباء للفاكهة


public class Fruit {
//Variable Declaration
protected String seed;
protected String skinColor;
protected String taste;
//Default Constructor
public Fruit(){
seed = '';
skinColor ='';
taste ='';
}
//Primary Constructor
public Fruit(String seed, String skinColor, String taste){
this.seed = seed;
this.skinColor = skinColor;
this.taste = taste;
}
//getters and setters
public String getSeed() {
return seed;
}
public void setSeed(String seed) {
this.seed = seed;
}
public String getSkinColor() {
return skinColor;
}
public void setSkinColor(String skinColor) {
this.skinColor = skinColor;
}
public String getTaste() {
return taste;
}
public void setTaste(String taste) {
this.taste = taste;
}
//eat method
public void eat(){
//general code on how to eat a fruit
}
//juice method
public void juice() {
//general code on how to juice a fruit
}
}

يعد مُعدِّل الوصول المستخدم مع كل إعلان متغير من أبرز جوانب الفئة الرئيسية أعلاه. يعد معدّل الوصول المحمي مثاليًا للاستخدام في الفئات الرئيسية لأنه يمنع الفئات غير التابعة من الوصول إلى سمات البيانات الخاصة بالفئة الأصلية.

علاوة على ذلك ، يتم تقديمك في الكود إلى المُنشئين والمكتسبين والمُحدِدين الذين يمثلون وحدات بناء عامة لأي فئة Java. أخيرًا ، يتم تقديمك إلى طريقتين (العصير والأكل) تم إنشاؤهما في فئة الآباء في برنامجنا لأنهما شاملان لجميع الفواكه - يمكن تناول جميع الفواكه وعصرها.

إنشاء فصول فرعية في جافا

عادةً ما تسمى الفئات الفرعية بالفئات المتخصصة أو المشتقة لأنها ترث الحالة والسلوك من أحد الوالدين ، وغالبًا ما تخصص هذه السمات لتكون أكثر تحديدًا.

متابعة مع مثالنا ، يجب أن تكون قادرًا على معرفة سبب اعتبار اللون البرتقالي فئة أطفال مناسبة لفئة الفاكهة أعلاه.

مثال على فئة الطفل البرتقالي


public class Orange extends Fruit{
//variable declaration
private int supremes;
//default constructor
public Orange() {
supremes = 0;
}
//primary constructor
public Orange(String seed, String skinColor, String taste, int supremes){
super(seed, skinColor, taste);
this.supremes = supremes;
}
//getters and setters
public int getsupremes() {
return supremes;
}
public void setsupremes(int supremes) {
this.supremes = supremes;
}
//eat method
public void eat(){
//how to eat an orange
}
//juice method
public void juice() {
//how to juice and orange
}
//peel method
public void peel(){
//how to peel an orange
}
}

هناك فرق بين ما يبدو عليه إعلان فئة Java العادي وما لدينا في الكود أعلاه. الكلمة الأساسية الموسعة هي ما يتم استخدامه في Java لجعل الميراث ممكنًا.

في مثالنا أعلاه ، يمتد الفصل الفرعي (البرتقالي) إلى فئة الأصل (الفاكهة). لذلك ، يمكن الآن الوصول إلى حالة وسلوك فئة الفاكهة وتعديلها بواسطة فئة البرتقال.

السمة الفريدة التي تم تحديدها لفصلنا البرتقالي تم تحديدها مع اسم المتغير supremes (وهو الاسم الرسمي للقطاعات الصغيرة الموجودة في البرتقال). هذا هو المكان الذي يلعب فيه التخصص ؛ لا تحتوي كل الفاكهة على سوبريمات ولكن كل البرتقال لها عناصر عليا ، لذا فإن الاحتفاظ بمتغير سوبريميس لفئة البرتقال أمر منطقي.

تعد إضافة طريقة التقشير إلى طرق الأكل والعصير الموجودة مسبقًا أمرًا منطقيًا أيضًا لأنه على الرغم من عدم إمكانية تقشير جميع الفاكهة ، إلا أنه غالبًا ما يتم تقشير البرتقال.

يجب أن تضع في اعتبارك أنه إذا لم نكن ننوي تغيير طرق تناول الطعام والعصير الحالية ، فلن نحتاج إلى تضمينها في فصل البرتقال لدينا. تتجاوز الطرق في فئة البرتقال أي طريقة مماثلة في فئة الفاكهة. لذلك إذا تم تناول جميع الفواكه وعصرها بنفس الطريقة ، فلن نحتاج إلى إنشاء هذه الطرق في فصل البرتقال.

الدور الذي يلعبه المنشئون في الميراث

بشكل افتراضي ، يتم توارث مُنشئي الفئة الأصل بواسطة الفئات الفرعية. لذلك ، إذا تم إنشاء كائن فئة فرعية ، فهذا يعني أنه يتم أيضًا إنشاء كائن فئة أصلي تلقائيًا.

بالعودة إلى مثالنا ، في كل مرة يتم فيها إنشاء كائن برتقالي جديد ، يتم أيضًا إنشاء كائن فاكهة لأن البرتقال هو فاكهة.

خلف الكواليس ، عندما يتم إنشاء كائن فئة فرعية ، يتم استدعاء مُنشئ الفئة الأصلية أولاً متبوعًا بمنشئ الفئة الفرعية. في فئة الأطفال البرتقالية أعلاه ، إذا تم إنشاء كائن برتقالي بدون أي معلمات ، فسيتم استدعاء مُنشئ فئة الفاكهة الافتراضي الخاص بنا ، متبوعًا بمقاول فئة البرتقال الافتراضي الخاص بنا.

الطريقة الفائقة في المُنشئ الأساسي أعلاه ضرورية لأنها تحدد أنه يجب استدعاء المُنشئ الأساسي - وليس المُنشئ الافتراضي - لفئة الفاكهة الأصلية كلما تم إنشاء كائن برتقالي به معلمات.

الآن يمكنك استخدام الوراثة في جافا

من خلال هذه المقالة ، كنت قادرًا على معرفة ماهية الوراثة ، وكيف تعمل ، ولماذا تعتبر مفهومًا مهمًا في البرمجة. يمكنك الآن إنشاء علاقات الوراثة الخاصة بك باستخدام لغة برمجة Java. علاوة على ذلك ، أنت تعرف الآن كيفية الالتفاف على قاعدة الوراثة الفردية لجافا من خلال إنشاء علاقة الجد.

حقوق الصورة: Andreas Wohlfahrt / بيكسلز

يشارك يشارك سقسقة بريد الالكتروني كيف تنظم كودك الكينوني بالوراثة

إن الحصول على البرمجة الكائنية بشكل صحيح يعني أنك بحاجة إلى معرفة المزيد عن الوراثة وكيف يمكن تبسيط الترميز وتقليل الأخطاء.

اقرأ التالي
مواضيع ذات صلة
  • برمجة
  • جافا
  • البرمجة الشيئية
نبذة عن الكاتب قاديشا كين(21 مقالة منشورة)

قاديشا كين مطور برامج متكامل وكاتب تقني / تقني. لديها قدرة مميزة على تبسيط بعض المفاهيم التكنولوجية الأكثر تعقيدًا ؛ إنتاج مواد يمكن لأي مبتدئ في مجال التكنولوجيا فهمها بسهولة. إنها شغوفة بالكتابة وتطوير البرامج الشيقة والسفر حول العالم (من خلال الأفلام الوثائقية).

المزيد من Kadeisha Kean

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك