Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Kjerneprinsipper for komposisjon | Komposisjon
Objektorientert Programmering i Python

bookKjerneprinsipper for komposisjon

Sveip for å vise menyen

Komposisjon fokuserer på å bygge komplekse objekter ved å kombinere enklere, uavhengige komponenter. I stedet for å basere seg på arv, som skaper rigide hierarkier, lar komposisjon klasser samarbeide gjennom inneholdte objekter. Denne tilnærmingen gjør systemer mer fleksible, modulære og enklere å vedlikeholde, siden komponenter kan byttes ut eller utvides uten å ødelegge hele strukturen.

123456789101112131415161718192021222324252627282930313233
class Payment: def pay(self, amount): return f"Paid {amount}" class Inventory: def reserve(self, item): return f"{item} reserved" class Shipping: def ship(self, item): return f"{item} shipped" class Order: def __init__(self, item, price, payment, inventory, shipping): self.item = item self.price = price self.payment = payment self.inventory = inventory self.shipping = shipping def process(self): return " | ".join([ self.inventory.reserve(self.item), self.payment.pay(self.price), self.shipping.ship(self.item) ]) order = Order("Laptop", 1200, Payment(), Inventory(), Shipping()) print(order.process())
copy

Order implementerer ikke selv logikken for betaling, lager eller frakt. I stedet har den separate objekter (Payment, Inventory, Shipping) og bruker dem for å utføre arbeidet sitt.

Hver komponent har ett ansvar, og Order koordinerer dem kun. Hvis du ønsker å endre hvordan betaling eller frakt fungerer, kan du bytte ut komponenten uten å endre Order-klassen.

Noen fallgruver å være oppmerksom på ved bruk av komposisjon er å lage gud-objekter som samler for mange komponenter og blir vanskelige å håndtere, lekke komponent-API-er gjennom den ytre klassen i stedet for å holde et rent grensesnitt, og å introdusere skjult kobling når komponenter blir for avhengige av hverandres interne detaljer.

God-objekter
expand arrow

Et god-objekt prøver å gjøre for mye. Det inneholder mange komponenter og håndterer mange ansvarsområder, noe som gjør klassen vanskelig å forstå, teste og vedlikeholde.

Lekkasjer i komponent-API-er
expand arrow

Dette skjer når den ytre klassen eksponerer de interne metodene eller attributtene til komponentene sine. I stedet for å tilby et eget ryddig grensesnitt, tvinger den brukerne til å samhandle direkte med interne objekter.

Skjult kobling
expand arrow

Komponenter blir tett koblet sammen gjennom interne detaljer. Endringer i én del fører uventet til feil i en annen fordi de er avhengige av hverandres interne struktur i stedet for tydelige kontrakter.

question mark

Hva er en vanlig risiko ved bruk av komposisjon som kan gjøre designet vanskeligere å vedlikeholde?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 3. Kapittel 2
some-alt