Arv vs sammensætning
Arv og komposition er to vigtige koncepter, der findes i OOP (Object Oriented Programming). Enkelt set handler både sammensætning og arv om at give en klasse yderligere egenskaber eller opførsel. Arv er en klasses evne til at arve egenskaber og adfærd fra en overordnet klasse ved at udvide den. På den anden side er sammensætning en klasses evne til at indeholde objekter fra forskellige klasser som medlemsdata.
Hvad er arv?
Som nævnt ovenfor er arv evnen for en klasse til at arve egenskaber og adfærd fra en overordnet klasse ved at udvide den. Arv giver i det væsentlige kodegenbrug ved at tillade at udvide egenskaber og opførsel af en eksisterende klasse med en nyligt defineret klasse. Hvis klasse A udvider B, kaldes klasse B forældreklassen (eller superklassen), og klasse A kaldes barneklassen (eller afledt klasse / underklasse). I dette eksempel-scenarie vil klasse A arve alle offentlige og beskyttede attributter og metoder i superklassen (B). Underklassen kan eventuelt tilsidesætte (give nye eller udvidede funktionaliteter til metoder) den opførsel, der er arvet fra overordnet klasse.
Arv repræsenterer et "is-a" forhold i OOP. Dette betyder i det væsentlige, at A også er en B. Med andre ord kan B være klassen med en generel beskrivelse af en bestemt virkelighedens enhed, men A specificerer en bestemt specialisering. I et reelt verdensprogrammeringsproblem kan Personklassen udvides til at oprette medarbejderklassen. Dette kaldes specialisering. Men du kan også først oprette medarbejderklassen og derefter generalisere den også til en personklasse (dvs. generalisering). I dette eksempel vil medarbejderen have personens egenskaber og opførsel (dvs. medarbejder er også en person) og kan indeholde en vis yderligere funktionalitet (så person er ikke en medarbejder).
Hvad er sammensætning?
Komposition er en klasses evne til at indeholde objekter fra forskellige klasser som medlemsdata. For eksempel kunne klasse A indeholde et objekt af klasse B som medlem. Her kan alle de offentlige metoder (eller funktioner) defineret i B udføres i klasse A. Klasse A bliver beholderen, mens klasse B bliver den indeholdte klasse. Komposition kaldes også Containership. I dette eksempel kan det siges, at klasse A er sammensat af klasse B. I OOP repræsenterer sammensætning et ”have-a” -forhold. Det er vigtigt at bemærke, at selvom containeren har adgang til at udføre alle de offentlige metoder i den indeholdte klasse, er den ikke i stand til at ændre eller give yderligere funktionalitet. Når det drejer sig om et ægte programmeringsproblem, kan et objekt af klasse TextBox være indeholdt i klasseformen, og det kan således siges, at en formular indeholder en TextBox (alternativt er en formular sammensat af en TextBox).
Hvad er forskellen mellem arv og sammensætning?
Selvom arv og komposition er to OOP-koncepter, er de ganske forskellige, hvad de tillader programmøren at opnå. Arv er en klasses evne til at arve egenskaber og adfærd fra en overordnet klasse ved at udvide den, mens Komposition er en klasses evne til at indeholde objekter fra forskellige klasser som medlemsdata. Hvis en klasse udvides, arver den alle de offentlige og beskyttede egenskaber / adfærd, og denne adfærd kan blive tilsidesat af underklassen. Men hvis en klasse er indeholdt i en anden, får beholderen ikke evnen til at ændre eller tilføje adfærd til den indeholdte. Arv repræsenterer et "er-et" forhold i OOP, mens komposition repræsenterer et "har-et" forhold.