JavaRush /בלוג Java /Random-HE /למה צריך ממשקים?
Павел
רָמָה

למה צריך ממשקים?

פורסם בקבוצה
למה צריך ממשקים? מדוע נחוצה תורשת ממשק? מדוע יש צורך בפולימורפיזם? למי שקרא והבין איך עושים ממשקים, אבל לא הבין למה.

כתב ויתור: במאמר זה ובמאמרים הבאים, שמות המחלקות והשיטות יינתן ברוסית.

כשמדובר בעקרונות של תכנות מונחה עצמים (OOP): פולימורפיזם, ירושה ואנקפסולציה, כדאי להשתמש באנלוגיות בעולם האמיתי. היתרון הגדול של OOP הוא שאנחנו יכולים לדמות חלק מהיקום האמיתי בתוכנית. בואו נדגמן את משפחת איבנוב: אבא , אמא והילד פטיה . מאבא ירש פטיה את ההרגל ללגום בעת שתיית תה, ומאמא הוא ירש את ההרגל לעקוץ שפתיים בזמן הקריאה. אם ננסה ליישם את המצב הזה בתוכנית, בסופו של דבר נקבל שלושה מחלקות:
class Папа
class Мама
class Петя
לאבא ולאמא יש הרגלים שצריך להעביר לפיט . הרגלים הם פעולות מסוג כלשהו - אז עדיף ליישם אותם בעולם התוכנה כשיטות: אבא ראשון :
class Папа {
public void прихлюпывать() {
System.out.println("Хлюп");
    }
}
עכשיו אמא :
class Мама {
public void поджимать() {
System.out.println("Поджать губки");
   }
}
אם אנחנו מדברים על ירושה, אז זה הגיוני לכתוב את הקוד כך:
class Петя extends Папа, Мама {
@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
כלומר, לרשת את פטיה מאבא ואמא בו זמנית . אם תכתוב את זה ככה, המהדר יתלונן מכיוון ש-Java לא יכול ליישם ירושה של מחלקות מרובות. אגב, זה אפשרי ב-C++, אבל לא ב-Java, כי בעיות גדולות יכולות להתעורר עם ירושה מרובה: הם כותבים בפירוט באינטרנט . כדי לעקוף את ה"בלתי אפשרי" הזה, לג'אווה יש ממשקים. ולגבי הרגלים נמציא ממשק משלנו. אפילו שניים: הם ייראו כך: למה צריך ממשקים?  - 1
public interface ПривычкиПапы {
    public void прихлюпывать();
}
public interface ПривычкиМамы {
    public void поджимать();
}
בממשק תיארנו רק את ההרגלים, אבל לא תיארנו מה הם עושים ספציפית, כי נכתוב את היישום הספציפי בשיעורים. ראשית, בואו נעניק לאבא ואמא את ההרגלים המשפטיים שלהם.
class Папа implements ПривычкиПапы {

   @Override
    public void прихлюпывать() {
     System.out.println("Хлюп");
   }
}

class Мама implements ПривычкиМамы{

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
ועכשיו , זה חוקי לחלוטין להעביר הרגלים מאבא ואמא לפיט בו זמנית
class Петя implements ПривычкиПапы, ПривычкиМамы {

@Override
public void прихлюпывать() {
     System.out.println("Хлюп");
   }

@Override
public void поджимать() {
System.out.println("Поджать губки");
    }
}
כלומר, יישום מרובה (נקרא לעתים קרובות יותר יישום) ב-Java הוא בהחלט אפשרי. למה צריך ממשקים?  - 2המשמעות של ממשקים אמורה להיות ברורה כעת - ב-Java, אתה יכול ליישם ירושה מרובה באמצעות ממשקים. אם נפתח את הסיטואציה הלאה , למשל: הרי לאבא ואמא כנראה יש הרגלים שהם לא העבירו לפטיה , ולפטיה יש אולי גם הרגלים אישיים משלו. תלמד כיצד להעביר את סנטה ברברה החיוני הזה למטוס ג'אווה בפרקים הבאים. זו לא הדוגמה היחידה להבנת ממשקים. אם לא קראת את המאמרים הבאים, הקפד לקרוא: ממשקים ב-Java (אם לא פתוח, אתה יכול לצאת מהפרופיל שלך או לקרוא במצב גלישה בסתר) מדוע יש צורך בממשקים ב-Java Java - הטמיעו את כל הדוגמאות מהמאמר כאן ושנו את השיטות הן בממשקים והן במחלקות: שמות שיטות, חתימות (מה השיטה לוקחת כקלט), סוגי פלט של שיטות. הבן לבד: - ההבדל בעת יישום ממשק עם מחלקה ומחלקה מופשטת; - שיטות ברירת מחדל.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION