"Hallo, Amigo! Ik ben het - alweer. Ik wil je een andere kijk op interfaces geven. Zie je, meestal is een klasse een model van een bepaald object. Interfaces lijken daarentegen meer op de mogelijkheden van een object of rollen, in plaats van het object zelf."
Dingen zoals auto's, fietsen, motorfietsen en wielen kunnen bijvoorbeeld het beste worden weergegeven als klassen en objecten. Maar hun capaciteiten, zoals "Ik kan bewegen", "Ik kan mensen dragen", en "Ik kan parkeren", worden beter weergegeven als interfaces. Bekijk dit voorbeeld:
Java-code | Beschrijving |
---|---|
|
Komt overeen met het vermogen om te bewegen. |
|
Komt overeen met het vermogen om te bewegen. |
|
Komt overeen met het vermogen om vracht te vervoeren. |
|
Een «wiel» klasse. Heeft het vermogen om te bewegen. |
|
Een «auto» klasse. Heeft het vermogen om te bewegen, te worden bestuurd door een persoon en vracht te vervoeren. |
|
Een «skateboard» klasse. Heeft het vermogen om te bewegen en bestuurd te worden door een persoon. |
Interfaces vereenvoudigen het leven van de programmeur aanzienlijk. Programma's hebben vaak duizenden objecten, honderden klassen en slechts een paar dozijn interfaces (rollen). Er zijn weinig rollen, maar ze kunnen op veel manieren gecombineerd worden (klassen).
Het hele punt is dat je geen code hoeft te schrijven die de interactie met elke andere klasse definieert. Het enige wat u hoeft te doen is interactie met rollen (interfaces).
Stel je voor dat je een robotbouwer bent. Je hebt tientallen ondergeschikte robots en elk van hen kan meerdere vaardigheden hebben. Stel dat u dringend een muur moet bouwen. Je neemt gewoon alle robots die kunnen "bouwen" en vertelt ze dat ze de muur moeten bouwen. Het maakt je niet zoveel uit welke robots het doen. Laat het een robotgieter zijn. Als het weet hoe het moet bouwen, laat het dan bouwen.Hier is hoe het eruit zou zien in code:
Java-code | Beschrijving |
---|---|
|
Mogelijkheid om «een muur te bouwen». Begrijpt het commando «bouw een muur» (heeft de juiste methode). |
|
Robots die deze vaardigheid/vaardigheid hebben.
Een gieter kan geen muur bouwen (hij implementeert de WallBuilder-interface niet). |
|
Hoe geven we het bevel om een muur te bouwen? |
"Dat is ongelooflijk interessant. Ik had nooit gedacht dat interfaces zo'n interessant onderwerp zouden kunnen zijn."
"En nog wat! Samen met polymorfisme is het helemaal verbluffend."
GO TO FULL VERSION