Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Grundprinciper för komposition | Komposition
Objektorienterad Programmering i Python

bookGrundprinciper för komposition

Svep för att visa menyn

Komposition fokuserar på att bygga komplexa objekt genom att kombinera enklare, oberoende komponenter. Istället för att förlita sig på arv, vilket skapar stela hierarkier, möjliggör komposition att klasser samarbetar genom inneslutna objekt. Detta tillvägagångssätt gör systemen mer flexibla, modulära och lättare att underhålla, eftersom komponenter kan bytas ut eller utökas utan att hela strukturen bryts.

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 implementerar inte själv logiken för betalning, lager eller leverans. Istället har den separata objekt (Payment, Inventory, Shipping) och använder dem för att utföra sitt arbete.

Varje komponent har ett ansvar, och Order koordinerar endast dessa. Om du vill ändra hur betalning eller leverans fungerar kan du byta ut komponenten utan att ändra klassen Order.

Några fallgropar att se upp för vid användning av komposition är att skapa gudobjekt som samlar för många komponenter och blir svåra att hantera, läckande komponent-API:er genom den yttre klassen istället för att behålla ett rent gränssnitt, samt att introducera dold koppling när komponenter är för beroende av varandras interna detaljer.

God-objekt
expand arrow

Ett god-objekt försöker göra för mycket. Det innehåller många komponenter och hanterar många ansvarsområden, vilket gör klassen svår att förstå, testa och underhålla.

Läckande komponent-API:er
expand arrow

Detta inträffar när den yttre klassen exponerar de interna metoderna eller attributen hos sina komponenter. Istället för att erbjuda ett eget tydligt gränssnitt tvingar den användare att interagera direkt med interna objekt.

Dold koppling
expand arrow

Komponenter blir tätt sammankopplade genom interna detaljer. Att ändra en del kan oväntat förstöra en annan eftersom de är beroende av varandras interna struktur istället för tydliga kontrakt.

question mark

Vilken vanlig risk finns vid användning av komposition som kan göra designen svårare att underhålla?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 3. Kapitel 2
some-alt