Arv vs sammensetning
Arv og komposisjon er to viktige konsepter som finnes i OOP (Object Oriented Programming). Enkelt sagt handler både komposisjon og arv om å gi ekstra egenskaper eller oppførsel til en klasse. Arv er muligheten for en klasse til å arve egenskaper og atferd fra en overordnet klasse ved å utvide den. På den annen side er komposisjon evnen til en klasse til å inneholde objekter av forskjellige klasser som medlemsdata.
Hva er arv?
Som nevnt ovenfor, er arv muligheten for en klasse til å arve egenskaper og atferd fra en overordnet klasse ved å utvide den. Arv gir i hovedsak kodegjenbruk ved å tillate utvidelse av egenskaper og oppførsel til en eksisterende klasse med en nylig definert klasse. Hvis klasse A utvider B, kalles klasse B foreldreklassen (eller superklassen) og klasse A kalles barneklassen (eller avledet klasse/underklasse). I dette eksempelscenariet vil klasse A arve alle offentlige og beskyttede attributter og metoder for superklassen (B). Underklassen kan valgfritt overstyre (gi ny eller utvidet funksjonalitet til metoder) atferden som er arvet fra den overordnede klassen.
Arv representerer et "er-et"-forhold i OOP. Dette betyr i hovedsak at A også er en B. Med andre ord kan B være klassen med en generell beskrivelse av en viss virkelighetsenhet, men A spesifiserer en viss spesialisering. I et programmeringsproblem i den virkelige verden kan Person-klassen utvides til å opprette Employee-klassen. Dette kalles spesialisering. Men du kan også først opprette Employee-klassen og deretter generalisere den til en Person-klasse også (dvs.e. generalisering). I dette eksemplet vil den ansatte ha alle egenskapene og oppførselen til personen (dvs. at den ansatte også er en person) og kan også inneholde noen tilleggsfunksjoner (så personen er ikke en ansatt).
Hva er komposisjon?
Komposisjon er en klasses evne til å inneholde objekter av forskjellige klasser som medlemsdata. For eksempel kan klasse A inneholde et objekt av klasse B som et medlem. Her kan alle de offentlige metodene (eller funksjonene) definert i B utføres innenfor klassen A. Klasse A blir containeren, mens klasse B blir den inneholdte klassen. Sammensetning blir også referert til som Containership. I dette eksemplet kan det sies at klasse A er sammensatt av klasse B. I OOP representerer komposisjon en "har-en"-relasjon. Det er viktig å merke seg at selv om beholderen har tilgang til å kjøre alle de offentlige metodene til den inneholdte klassen, er den ikke i stand til å endre eller gi tilleggsfunksjonalitet. Når det kommer til et programmeringsproblem i den virkelige verden, kan et objekt av klassen TextBox være inneholdt i klassen Form, og dermed kan sies at et skjema inneholder en tekstboks (eller alternativt er et skjema sammensatt av en tekstboks).
Hva er forskjellen mellom arv og komposisjon?
Selv om arv og komposisjon er to OOP-konsepter, er de ganske forskjellige i hva de lar programmereren oppnå. Arv er muligheten for en klasse til å arve egenskaper og atferd fra en overordnet klasse ved å utvide den, mens sammensetning er evnen til en klasse til å inneholde objekter av forskjellige klasser som medlemsdata. Hvis en klasse utvides, arver den alle de offentlige og beskyttede egenskapene/atferden, og denne atferden kan bli overstyrt av underklassen. Men hvis en klasse er inneholdt i en annen, får ikke beholderen muligheten til å endre eller legge til atferd til den inneholdte. Arv representerer et "er-et"-forhold i OOP, mens komposisjon representerer et "har-et"-forhold.