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

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

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

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

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

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

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

instagram viewer

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

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

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

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

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

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

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


فواكه للطبقة العامة {
// إعلان متغير
بذور سلسلة محمية؛
سلسلة الجلد المحمية
طعم السلسلة المحمية ؛
// المُنشئ الافتراضي
الفاكهة العامة () {
البذور = "" ؛
skinColor = "" ؛
طعم = "" ؛
}
// المنشئ الأساسي
الفاكهة العامة (بذور الخيط ، لون الجلد الخيطي ، طعم الخيط) {
this.seed = بذرة ؛
this.skinColor = skinColor ؛
this.taste = الذوق ؛
}
// حاصل على وضعية
سلسلة getSeed العامة () {
عودة البذور
}
setSeed العامة الباطلة (سلسلة البذور) {
this.seed = بذرة ؛
}
سلسلة getSkinColor العامة () {
عودة الجلد
}
setSkinColor العامة باطلة (String skinColor) {
this.skinColor = skinColor ؛
}
getTaste سلسلة عامة () {
عودة الذوق
}
setTaste العامة باطلة (طعم سلسلة) {
this.taste = الذوق ؛
}
// طريقة الاكل
أكل الفراغ العام () {
// رمز عام حول كيفية تناول الفاكهة
}
// طريقة العصير
عصير الفراغ العام () {
// رمز عام حول كيفية عصير الفاكهة
}
}

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

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

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

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

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

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


فئة عامة البرتقال يوسع الفاكهة {
// إعلان متغير
السيادة الدولية الخاصة ؛
// المُنشئ الافتراضي
البرتقالي العام () {
المتفوقون = 0 ؛
}
// المنشئ الأساسي
البرتقال العام (بذور الخيط ، لون الجلد الخيطي ، طعم الخيط ، السوبريميس) {
سوبر (البذور ، لون البشرة ، الذوق) ؛
this.supremes = المتفوقون ؛
}
// حاصل على وضعية
public int getupremes () {
عودة السادة
}
مجموعات باطلة عامة (int supremes) {
this.supremes = المتفوقون ؛
}
// طريقة الاكل
أكل الفراغ العام () {
// كيف تأكل برتقالة
}
// طريقة العصير
عصير الفراغ العام () {
// كيف عصير والبرتقال
}
// طريقة التقشير
قشر الفراغ العام () {
// كيفية تقشير البرتقال
}
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

اقرأ التالي

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

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

المزيد من Kadeisha Kean

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

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

خطوة أخرى أيضا…!

يرجى تأكيد عنوان بريدك الإلكتروني في البريد الإلكتروني الذي أرسلناه لك للتو.

.