"Helló, Amigo! Ma szeretném elmondani az interfészek létezésének okait. Gyakran hallani, hogy egy bizonyos osztály, objektum vagy entitás támogat egy adott interfészt. Mit jelent egy interfész támogatása ? "

Az interfészek adott viselkedés támogatására léteznek – 1

Tágabb értelemben minden interfész egy olyan mechanizmus, amellyel valami mással kölcsönhatásba léphet. Például a TV távirányítója egy távoli interfész. A kutya megérti és végrehajtja a parancsokat, ami azt jelenti, hogy a kutya támogatja a hangos (vezérlő) interfészt. Összefoglalva azt mondhatjuk, hogy az interfész két dolog interakciójának szabványos módja, ahol mindkét fél ismeri a szabványt. Amikor egy személy azt mondja a kutyának, hogy "üljön", az ő parancsa egy "kutya hangvezérlési felület" része, és ha a kutya engedelmeskedik a parancsnak, akkor azt mondjuk, hogy a kutya támogatja a felületet.

Így van ez a programozásban is. A metódusok egy objektumon, annak adatain végrehajtott műveletek. És ha egy osztály bizonyos módszereket valósít meg, akkor bizonyos parancsok "végrehajtását támogatja". Mit nyerünk a metódusok interfésszel való kombinálásával?

1) Minden interfésznek , akárcsak egy osztálynak , egyedi neve van. Mindkét fél 100%-ig biztos lehet benne, hogy a másik fél pontosan azt a felületet támogatja, amelyet ismer, és nem valami hasonló felületet.

2) Minden interfész bizonyos korlátozásokat támaszt egy osztályra, amely támogatni fogja. Az osztály (a fejlesztője) dönti el, hogy mit fog tenni az interfésztől örökölt metódusok meghívásakor, de az eredménynek az ésszerű elvárások határain belül kell lennie. Ha egy kutyát "ülni" rendelünk, majd 5 percig forog a helyén, majd leül, akkor támogatja a felületet. De ha ehelyett megragadja a lábát, akkor aligha mondhatjuk, hogy támogatja a felületet. A parancs végrehajtása nem hozta meg a várt eredményt.

Tegyük fel, hogy te és a barátaid egy számítógépes játékot írnak. És rád bízták, hogy programozza be egy karakter viselkedését. Egyik kollégája már írt egy kódot, amely az összes karaktert megjeleníti a képernyőn. Egy másik kolléga, aki a játék lemezre mentéséért felelős, kódot írt, hogy az összes játékobjektumot fájlba mentse. Mindegyikük sok kódot írt, és készített egy interfészt a kóddal való interakcióhoz. Például így nézhet ki:

Java kód Leírás
interface Saveable
{
 void saveToMap(Map<String, Object> map);
 void loadFromMap(Map<String, Object> map);
}
— Interfész egy objektum térképről történő tárolására/betöltésére.
interface Drawable
{
 void draw(Screen screen);
}
— Interfész objektum rajzolásához az átadott Képernyő objektumon belül.
class PacMan implements Saveable, Drawable
{
…
}
— Az osztályod, amely két interfészt támogat.

Más szavakkal, bármely interfész (interfészcsoport) támogatásához az osztálynak:

1) Örökölje őket

2) Valósítsa meg a bennük deklarált módszereket

3) A módszereknek azt kell tenniük, amire szánták őket.

Ezután a program többi kódja, amely semmit sem tud az osztályodról és annak objektumairól, működhet az osztályoddal.

– Miért nem tud semmit a kód az osztályomról?

"Tegyük fel, hogy egy programból vetted a kódot, amit valaki egy éve írt. Vagy tegyük fel, hogy a barátaid megvették/engedélyezték valaki mástól a játékmotort. Van működő kódod a játékhoz. Több ezer objektum, amelyek kölcsönhatásba lépnek egymással. És ők könnyen tud megfelelően kommunikálni az objektumokkal, ha ezt az interakciót olyan interfészeken keresztül valósítja meg, amelyeket az osztályai megfelelően implementáltak."

– Messze! Nem tudtam, hogy ez lehetséges.

"Minden nagy projekt így működik. Az emberek már régen abbahagyták az írást a semmiből."

Az emberek nem mindig találják fel újra a matematikát és az ábécét. Ehelyett mindent tanulmányoznak, amit előttük találtak ki.