Vis med kode forskjellen på at en klasse HAR-EN (komposisjon) versus ER-EN (arv), og forklar når komposisjon foretrekkes.
Klikk for å snu kortet
Komposisjon (HAR-EN): en klasse holder et annet objekt som attributt og delegerer til det. Arv (ER-EN): en subklasse utvider en superklasse.
```python
class Motor:
def start(self):
return "brrr"
# Komposisjon: Bil HAR-EN motor
class Bil:
def __init__(self):
self.motor = Motor() # holder et objekt
def kjor(self):
return self.motor.start()
# Arv: Sportsbil ER-EN bil
class Sportsbil(Bil):
pass
```
Komposisjon foretrekkes når relasjonen er HAR-EN snarere enn ER-EN (en bil ER ikke en motor, den HAR en). Den gir løsere kobling og mer fleksibilitet: man kan bytte ut motoren (f.eks. injisere en Elmotor) uten å endre klassehierarkiet, og man unngår skjøre, dype arvetrær. Tommelregel: «foretrekk komposisjon framfor arv» når du bare vil gjenbruke funksjonalitet, ikke uttrykke et ekte er-en-forhold.
Space / Enter for å snu