JavaRush /בלוג Java /Random-HE /מדוע נחוצה תורשת ממשק?
Павел
רָמָה

מדוע נחוצה תורשת ממשק?

פורסם בקבוצה
למה צריך ממשקים? מדוע נחוצה תורשת ממשק? מדוע יש צורך בפולימורפיזם? למי שקרא והבין איך עושים ירושה ממשק, אבל לא הבין למה. בפעם הקודמת, בעזרת הדוגמה של משפחת איבנוב הרגילה, בדקנו מדוע יש צורך בממשקים. אנחנו ממשיכים לעשות דיגיטציה של המשפחה הבעייתית. לכל אדם יש כמה הרגלים שהוא לא ירש מאף אחד או לא העביר לאף אחד – ההרגלים האישיים שלו. המשימה שלנו היא לספק לכל אחד מבני המשפחה הרגלים ייחודיים. נעבור למישור ה-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בחייך, זה לא כל כך קשה, העיקר לחשוב בהיגיון. אחרי הכל, כולם יודעים למה צריך ממשקים. עכשיו בואו ניצור ממשק Masha's Habits , נתאר שם את שיטת clapElashes() ו- squish() , ליישם אותה ל- Masha וסיימנו. אז מה אם שיטות עם אותו שם כבר מיושמות בממשקים אחרים, אתה יכול לעשות זאת פעם אחת. מדוע נחוצה תורשת ממשק?  - 2ואכן, מי יודע אילו תוכניות יש למשפחת איבנוב, אם סריוז'ה תיוולד , מי יירש הרגלים מאבא, אמא, סבא רבא וממישהו אחר מהדור הרביעי, בכל פעם ליצור ממשק, כמו: ממשק להרגלים של Seryozha , ושם להכריז על שיטות שכבר ניתן להכריז עליהן מאות פעמים בממשקים אחרים? בעוד זוג או שלושה דורות אנחנו מסתכנים בקבלת ממשקים עם שלל שיטות זהות שמתוארות כבר בממשקים אחרים, ואם צריך לשנות שם של הרגל כלשהו (וזה בהחלט אפשרי - אחרי הכל, העולם משתנה) , אז איך להבין את הספגטי הזה, אני לא יכול לדמיין. כל מה שנותר הוא לשבת ולחלום על נס. מדוע נחוצה תורשת ממשק?  - 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האיש שצויר צודק, זה בעצם אפשרי - עכשיו הצילה של משפחת איבנוב! קורא קשוב עשוי לשאול את השאלה: "למה ליצור ממשקים עבור כל אחד מבני המשפחה? יש לנו סט של פעולות - מיישם אותן מיד עבור הכיתה הנדרשת." בואו נדמיין שבעולמות מקבילים רבים יש את הכפילים של פטיה , וכל הפטיה צריכים ליישם את הממשק Petya's Habits
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