"Hei, Amigo! Det er meg - igjen. Jeg vil gi deg et annet synspunkt på grensesnitt. Du skjønner, mesteparten av tiden er en klasse en modell av et bestemt objekt. Derimot er grensesnitt mer som et objekts evner eller roller, i stedet for selve objektet."
For eksempel er ting som biler, sykler, motorsykler og hjul best representert som klasser og objekter. Men deres evner, som «jeg kan bevege meg», «jeg kan bære folk» og «jeg kan parkere», er bedre representert som grensesnitt. Sjekk ut dette eksemplet:
Java-kode | Beskrivelse |
---|---|
|
Tilsvarer evnen til å bevege seg. |
|
Tilsvarer evnen til å bevege seg. |
|
Tilsvarer evnen til å frakte last. |
|
En «hjul»-klasse. Har evnen til å bevege seg. |
|
En «bil»-klasse. Har evnen til å bevege seg, bli kjørt av en person og frakte last. |
|
En «skateboard»-time. Har evnen til å bevege seg og bli kontrollert av en person. |
Grensesnitt forenkler livet til programmereren betydelig. Programmer har veldig ofte tusenvis av objekter, hundrevis av klasser og bare et par dusin grensesnitt (roller). Det er få roller, men de kan kombineres på mange måter (klasser).
Hele poenget er at du ikke trenger å skrive kode som definerer interaksjon med annenhver klasse. Alt du trenger å gjøre er å samhandle med roller (grensesnitt).
Tenk deg at du er en robotbygger. Du har dusinvis av underordnede roboter, og hver av dem kan ha flere ferdigheter. Anta at du snarest må fullføre å bygge en vegg. Du tar bare alle robotene som har evnen til å "bygge" og ber dem bygge muren. Du bryr deg egentlig ikke om hvilke roboter som gjør det. La det være en robot vannkanne. Hvis den vet hvordan den skal bygge, la den bygge.Slik vil det se ut i kode:
Java-kode | Beskrivelse |
---|---|
|
Evne til å «bygge en vegg». Forstår kommandoen «bygg en vegg» (har riktig metode). |
|
Roboter som har denne evnen/ferdigheten.
En vannkanne kan ikke bygge en vegg (den implementerer ikke WallBuilder-grensesnittet). |
|
Hvordan gir vi kommandoen om å bygge en mur? |
"Det er utrolig interessant. Jeg hadde aldri drømt om at grensesnitt kunne være et så interessant tema."
"Og litt til! Sammen med polymorfisme er det helt utrolig."
GO TO FULL VERSION