JavaRush /مدونة جافا /Random-AR /لماذا يعد وراثة الواجهة ضروريًا؟
Павел
مستوى

لماذا يعد وراثة الواجهة ضروريًا؟

نشرت في المجموعة
لماذا هناك حاجة للواجهات؟ لماذا يعد وراثة الواجهة ضروريًا؟ لماذا هناك حاجة إلى تعدد الأشكال؟ لأولئك الذين قرأوا وفهموا كيفية عمل وراثة الواجهة ولكن لم يفهموا السبب. في المرة الأخيرة، باستخدام مثال عائلة إيفانوف العادية، نظرنا في سبب الحاجة إلى الواجهات. نواصل رقمنة الأسرة المضطربة. لكل إنسان بعض العادات التي لم يرثها من أحد أو لم ينقلها إلى أحد وهي عاداته الشخصية. مهمتنا هي تزويد كل فرد من أفراد الأسرة بعادات فريدة. دعنا ننتقل إلى مستوى Java: نحتاج إلى تنفيذ أساليب فريدة في الفئات التي ستنتمي إلى هذه الفئات فقط. حسنا تفضل! هذه بيتيا:
class Петя implements ПривычкиПапы, ПривычкиМамы {

//это личные Петины привычки
public void ковырятьВНосу () {
System.out.println("Ковырь-ковырь");
    }

//это унаследованные привычки
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать () {
System.out.println("Поджать губки");
    }
}
هذا هو أبي:
class Папа implements ПривычкиПапы {

//это личные Папины привычки
public void чесатьБороду () {
System.out.println("Чешу бороду");
    }

//это переданные привычки
   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}
هذه أمي:
class Мама implements ПривычкиМамы{

//это личные Мамины привычки
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

//это переданные привычки
@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
ممتاز! كل شيء يعمل على مايرام! قيل في المقال الأول أن البرنامج هو انعكاس للعالم الحقيقي. الخاصية الأكثر إثارة للاهتمام للواقع هي أنه يتغير طوال الوقت. ولم تكن عائلة إيفانوف استثناءً، فقد كان لديهم ابنة جميلة اسمها ماشا. وقد ورثت عادة ضرب رموشها من أمي والاستنشاق من أبي. نحن بحاجة إلى إجراء تغييرات على برنامجنا. لماذا يعد وراثة الواجهة ضروريًا؟  - 1هيا، الأمر ليس بهذه الصعوبة، الشيء الرئيسي هو التفكير المنطقي. بعد كل شيء، يعلم الجميع سبب الحاجة إلى الواجهات. لنقم الآن بإنشاء واجهة عادات ماشا ، ووصف طريقة clapElashes() و squish() هناك ، وتنفيذها على Masha ، وقد انتهينا من ذلك. فماذا لو تم بالفعل تنفيذ الأساليب التي تحمل الاسم نفسه في واجهات أخرى، فيمكنك القيام بذلك مرة واحدة. لماذا يعد وراثة الواجهة ضروريًا؟  - 2في الواقع، من يعرف ما هي خطط عائلة إيفانوف، إذا ولد سريوزا ، فمن سيرث العادات من أبي وأمي وجده الأكبر وشخص آخر من الجيل الرابع، في كل مرة ينشئ واجهة، مثل: واجهة عادات سيريوزها ، وهناك هل تعلن عن الأساليب التي يمكن الإعلان عنها بالفعل مئات المرات في واجهات أخرى؟ في غضون بضعة أو ثلاثة أجيال، نجازف بالحصول على واجهات مع مجموعة من الأساليب المتطابقة الموصوفة بالفعل في واجهات أخرى، وإذا كنا بحاجة إلى تغيير اسم بعض العادة (وهذا ممكن تمامًا - بعد كل شيء، العالم يتغير) ، إذن كيف أعرف هذه السباغيتي، لا أستطيع أن أتخيلها. كل ما تبقى هو الجلوس والحلم بمعجزة. لماذا يعد وراثة الواجهة ضروريًا؟  - 3الآن، إذا كان لكل عادة واجهة خاصة بها. دعنا نتخيل:
public interface ПривычкаПрихлюпывать {
    public void прихлюпывать();
}
public interface ПривычкаПоджимать {
    public void поджимать();
}
public interface ПривычкаКовырятьВНосу {
    public void ковырятьВНосу();
}
public interface ПривычкаХлопатьРесницами {
    public void хлопатьРесницами();
}
public interface ПривычкаЧесатьБороду {
    public void чесатьБороду();
}
وبعد ذلك، كما هو الحال في لعبة الليغو، يمكننا، باستخدام الوراثة المتعددة من العادات الفردية، كتابة الواجهة التي نحتاجها لعادات فرد من أفراد الأسرة. شيء من هذا القبيل:
public interface ПривычкиМамы extends ПривычкаПоджимать, ПривычкаХлопатьРесницами {
    }
public interface ПривычкиПапы extends ПривычкаЧесатьБороду, ПривычкаХлюпать {
    }
public interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу {
    }
public interface ПривычкиМаши extends ПривычкаХлюпать, ПривычкаХлопатьРесницами {
    }
ثم قم ببساطة بتنفيذ الواجهة المطلوبة للفئة المطلوبة، على سبيل المثال، أمي:
class Мама implements ПривычкиМамы{
@Override
public void хлопатьРесницами () {
System.out.println("Хлоп-хлоп");
    }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
ويمكن فعل الشيء نفسه مع بابا وبيتيا وماشا . وبعد ذلك، مع توسع عائلة إيفانوف، لن تكون هناك مشاكل مع العادات، وسنقوم ببساطة بخلطها من خلال الميراث على مستوى الواجهة، مثل المكونات في السلطة، ولن ننتج مجموعة من الأساليب بنفس الاسم. إيه، أحلام، أحلام... لماذا يعد وراثة الواجهة ضروريًا؟  - 4الرجل المرسوم على حق، هذا ممكن بالفعل - الآن تم حفظ محاكاة عائلة إيفانوف! قد يطرح القارئ اليقظ السؤال التالي: "لماذا ننشئ واجهات لكل فرد من أفراد الأسرة؟ لدينا مجموعة من الإجراءات - قم بتنفيذها على الفور للفئة المطلوبة." لنتخيل أنه في العديد من العوالم المتوازية يوجد أشباه بيتيا ، وكل ما يحتاجه بيتيا هو تنفيذ واجهة عادات بيتيا
interface ПривычкиПети extends ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу

class ПетяВселеннаяХ implements ПривычкиПети
class ПетяВселеннаяY implements ПривычкиПети
// и т.д.
ماذا لو لم تكن هناك واجهة مشتركة؟
class ПетяВселеннаяХ implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
class ПетяВселеннаяY implements ПривычкаПоджимать, ПривычкаХлюпать,ПривычкаКовырятьВНосу
// и т.д.
وينتج عن هذا تعليمات برمجية أكثر تكرارًا. تجعل وراثة الواجهة التطبيق أكثر مرونة للتغيير، وعلى وجه الخصوص، يمكن حل المشكلات المتعلقة بطرق التكرار. يرجى ملاحظة مرة أخرى أنه يُسمح بالوراثة المتعددة للواجهات.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION