"Hej, Amigo! Det er mig - igen. Jeg vil gerne give dig et andet synspunkt på grænseflader. Du ser, det meste af tiden er en klasse en model af et bestemt objekt. Derimod ligner grænseflader mere et objekts evner eller roller snarere end selve objektet."
For eksempel er ting som biler, cykler, motorcykler og hjul bedst repræsenteret som klasser og objekter. Men deres evner, som "Jeg kan bevæge mig", "Jeg kan bære folk" og "Jeg kan parkere", er bedre repræsenteret som grænseflader. Tjek dette eksempel:
Java kode | Beskrivelse |
---|---|
|
Svarer til evnen til at bevæge sig. |
|
Svarer til evnen til at bevæge sig. |
|
Svarer til evnen til at transportere last. |
|
En "hjul" klasse. Har evnen til at bevæge sig. |
|
En "bil" klasse. Har evnen til at bevæge sig, blive ført af en person og transportere last. |
|
En "skateboard" klasse. Har evnen til at bevæge sig og blive kontrolleret af en person. |
Grænseflader forenkler i høj grad programmørens levetid. Programmer har meget ofte tusindvis af objekter, hundredvis af klasser og kun et par dusin grænseflader (roller). Der er få roller, men de kan kombineres på mange måder (klasser).
Hele pointen er, at du ikke behøver at skrive kode, der definerer interaktion med hver anden klasse. Alt du skal gøre er at interagere med roller (grænseflader).
Forestil dig, at du er en robotbygger. Du har snesevis af underordnede robotter, og hver af dem kan have flere færdigheder. Antag, at du omgående skal færdiggøre bygningen af en væg. Du tager bare alle de robotter, der har evnen til at "bygge" og fortæller dem, at de skal bygge muren. Du er ligeglad med, hvilke robotter der gør det. Lad det være en robotvandkande. Hvis den ved, hvordan man bygger, så lad den bygge.Sådan ville det se ud i kode:
Java kode | Beskrivelse |
---|---|
|
Evne til at «bygge en mur». Forstår kommandoen «byg en mur» (har den passende metode). |
|
Robotter, der har denne evne/færdighed.
En vandkande kan ikke bygge en væg (den implementerer ikke WallBuilder-grænsefladen). |
|
Hvordan giver vi kommandoen til at bygge en mur? |
"Det er utroligt interessant. Jeg havde aldrig drømt om, at grænseflader kunne være så interessant et emne."
"Og lidt til! Sammen med polymorfi er det fuldstændig åndssvagt."
GO TO FULL VERSION