"Hej, Amigo! Vi er endelig kommet til noget virkelig interessant. I dag vil jeg fortælle dig om multipel arv . Multipel arv er virkelig et meget fascinerende og kraftfuldt værktøj. Og hvis det ikke var for flere problemer, så Java ville understøtte multipel nedarvning af klasser. Men det gør det ikke, så vi må nøjes med multipel nedarvning af grænseflader . Hvilket også er ret fantastisk."

Forestil dig, at du skriver et computerspil. Og dens karakterer (dine objekter) skal opføre sig på meget komplekse måder: gå rundt på et kort, saml genstande, udføre quests, kommunikere med andre karakterer, dræbe nogen, redde en anden. Lad os sige, at du har været i stand til at opdele alle objekterne i 20 kategorier. Det betyder, at hvis du er heldig, vil du kun kunne klare dig med 20 klasser til at definere dine objekter. Men her er fangsten: hvor mange unikke former for interaktion vil disse objekter have? Hver type objekt kan have unikke interaktioner med 20 andre typer objekter (vi tæller også interaktioner med objekter af samme type). Med andre ord skal du skrive kode for 20 x 20 = 400 interaktioner! Og hvis antallet af unikke objekttyper ikke er 20, men 100, så kan antallet af interaktioner være 10.000!
"Wow! Nu forstår jeg, hvorfor programmering er så vanskeligt arbejde."
"Det er enkelt. Takket være masser af abstraktioner. Og med en ikke ringe tak til flere grænseflader."
Vi kan ofte forenkle objektinteraktion, hvis roller og/eller evner interagerer frem for selve objekterne. Og som vi allerede ved, kan evner nemt tilføjes til en klasse, når den implementerer en eller anden grænseflade.
Når man skriver et stort program, gør udviklere normalt dette fra starten:
1) Identificer alle evner/roller.
2) Definer samspillet mellem disse roller.
3) Tildel derefter roller til alle klasserne.
"Måske et eksempel?"
"Selvfølgelig. Lad os se på roller i tegnefilmen "Tom og Jerry"."
Java kode | Beskrivelse |
---|---|
|
— Rolle/evne til at bevæge sig. |
|
— Rolle/evne til at blive spist. |
|
— Rolle/evne til at spise nogen. |
|
Tom er en kat, der har tre roller: 1) Han kan bevæge sig 2) Han kan spise nogen 3) Han kan blive spist af nogen (en hund) |
|
Jerry er en mus, der har to roller: 1) Han kan bevæge sig 2) Han kan blive spist af nogen |
|
Killer er en hund med to roller: 1) Han kan bevæge sig 2) Han kan spise nogen |
Når du kun kender disse tre roller (grænseflader), kan du skrive et program og beskrive den korrekte interaktion mellem disse roller. For eksempel vil en genstand jage (via Moveable-grænsefladen) efter «den du kan spise» og løbe væk fra «den, der kan spise dig». Og alt dette uden at vide om specifikke objekter. Hvis du tilføjer flere objekter (klasser) til programmet og beholder disse roller, vil det stadig fungere smukt og kontrollere dine objekters adfærd.
GO TO FULL VERSION