Hva er sammensetning over arv?
Sammensetning over arv er en programmeringsmetodikk som brukes i objektorienterte programmeringsspråk for å bidra til å etablere mer dynamiske og foranderlige forhold mellom objekter i en applikasjon. Det grunnleggende formatet for komposisjon over arv er inkludering av en forekomst av et objekt i et annet objekt. Dette er tydelig forskjellig fra den objektorienterte arvemetoden, men kan tjene samme formål i mange modeller. Fordelene med sammensetning i forhold til arv inkluderer vel definerte grenser mellom de sammensatte objektene og innpakningsobjektene, muligheten til å endre implementeringen av et objekt uten å påvirke et helt arvelighetshierarki, og et mindre begrensende rammeverk for den første programdesignen. Noen av komplikasjonene kan imidlertid inkludere vanskeligheter med serialisering og altfor komplekse strukturer i store, etablerte programmer.
I objektorientert programmering er et av trekkene som er viktige å etablere under design hvordan de forskjellige objektene forholder seg til hverandre. Arv er en sentral mekanisme i objektorientert programmering og lar ett objekt arve alle dataene og metodene til det overordnede, som det deretter kan legge til, endre eller utvide med sin egen implementering. Et eksempel på design basert på arv kan være med et program som har en hovedklasse som definerer en bil og modellerer noen generiske attributter for alle biler. Klassen for hvert enkelt bilmerke blir deretter laget som en etterkommer av hovedklassen, men definerer spesifikk informasjon, for eksempel motorstørrelse, drivstoffkapasitet eller annen informasjon spesifikk for det aktuelle bilmerket.
Sammensetning uttrykkes ved å inkludere objektforekomster i andre objekter. Hvis det er en hovedklasse som definerer en generisk bil, i stedet for å lage underklasser for spesifikke bilmerker, kan hovedklassen i stedet inneholde forekomster av andre objekter som definerer bilen mer spesifikt. Dette kan bety at den viktigste bilklassen kan inneholde et objekt for motortypen og en for drivstoffkapasiteten, som vil bli satt når klassen brukes til å lage et eksempel på et bestemt bilmerke.
Med sammensetning over arv, er objektene som er inneholdt i hovedklassen ikke direkte relatert til hovedklassen, noe som gir utviklere frihet til å endre hvordan enkeltobjekter fungerer. Et spørsmål som sammensetning over arv kan bidra til å forhindre, er en situasjon der et arvetrær kan være for dyp, noe som betyr at eventuelle modifikasjoner av en klasse i treet kan kreve endringer nedover på treet. Ikke alle objektorienterte språk har støtte for flere arv, og sammensetning over arv er en metode som kan brukes til å løse denne begrensningen.