Vad är sammansättning över arv?
Komposition över arv är en programmeringsmetodik som används i objektorienterade programmeringsspråk för att hjälpa till att skapa mer dynamiska och föränderliga förhållanden mellan objekt i en applikation. Det grundläggande formatet för komposition över arv är att inkludera en instans av ett objekt i ett annat objekt. Detta skiljer sig klart från den objektorienterade arvsmetoden men kan tjäna samma syfte i många modeller. Fördelarna med komposition över arv inkluderar väldefinierade gränser mellan de sammansatta objekten och omslagobjekten, förmågan att ändra implementeringen av ett objekt utan att påverka en hel arvhierarki och ett mindre restriktivt ramverk för inledande programdesign. Några av komplikationerna kan emellertid innehålla svårigheter i serialisering och alltför komplicerade strukturer i stora, etablerade program.
I objektorienterad programmering är ett av de egenskaper som är viktigt att fastställa under design hur de olika objekten relaterar till varandra. Arv är en central mekanism i objektorienterad programmering och tillåter ett objekt att ärva alla data och metoder för dess överordnade, som det sedan kan lägga till, ändra eller utöka med sin egen implementering. Ett exempel på design baserat på arv kan vara med ett program som har en huvudklass som definierar en bil och modellerar några generiska attribut för alla bilar. Klassen för varje enskilt bilmärke görs sedan som en ättling till huvudklass men definierar specifik information, till exempel motorstorlek, bränslekapacitet eller annan information som är specifik för det specifika bilmärket.
Sammansättningen uttrycks genom att inkludera objektfall i andra objekt. Om det finns en huvudklass som definierar en generisk bil, i stället för att skapa underklasser för specifika bilmärken, kan huvudklassen istället innehålla instanser av andra objekt som definierar bilen mer specifikt. Detta kan innebära att den huvudsakliga bilklassen kan innehålla ett objekt för motortypen och ett för bränslekapaciteten, som skulle ställas in när klassen används för att skapa ett exempel på ett specifikt bilmärke.
Med komposition över arv är objekten som finns i huvudklassen inte direkt relaterade till huvudklassen, vilket ger utvecklarna frihet att ändra hur enskilda objekt fungerar. En fråga som sammansättning över arv kan bidra till att förhindra är en situation där ett arvträd kan vara alltför djupt, vilket innebär att alla ändringar av en klass i trädet kan kräva ändringar längs trädets längd. Inte alla objektorienterade språk har stöd för flera arv, och sammansättning över arv är en metod som kan användas för att lösa denna begränsning.