Forskel mellem sammensætning og arv

Ved programmering er genanvendelig kode brugen af ​​eksisterende software til at opbygge ny software ved hjælp af principperne om genanvendelighed. Genanvendelse af kode betragtes som en grundlæggende produktiv funktionalitet i informationsteknologiske intensive virksomheder. Det fremmes i objektorienterede systemer ved at etablere forhold mellem klasser. Der er to grundlæggende måder at etablere disse relationer i objektorienteret programmering - Arv og komposition. Implementering af arv er en måde at relatere klasser på, men OOP giver en ny type forhold mellem klasser kaldet sammensætning. Ved at etablere et forhold mellem nye og eksisterende klasser, kan en ny klasse arve eller indlejre koden fra en eller flere eksisterende klasser.

I OOP er arv den metode, hvormed et objekt tilegner sig egenskaberne ved et eller flere andre objekter. Det er et af de mest kraftfulde værktøjer til implementering af kodegenanvendelighed i OOP. Når du bruger arv, kan en ny klasse oprettes ved at etablere forhold mellem forældre og børn med eksisterende klasser. Objektsammensætning er et alternativ til klassearv. Brug af et objekt i et andet objekt kaldes sammensætning. Ved mange lejligheder ønsker du at bruge et objekt som et felt i en anden klasse, fordi det er let at oprette komplekse klasser ved hjælp af tidligere skrevne, veldesignede klasser som komponenter. Dette kaldes sammensætning. Nå, både arv og sammensætning giver tilsvarende funktionalitet i mange tilfælde, objektsammensætning er en bedre genbrugsmodel end klassearv. Denne artikel sammenligner de to tilgange.

Hvad er arv?

Arv er et af de mest kraftfulde værktøjer til implementering af kodegenanvendelighed i objektorienteret programmering. Det henviser til den funktionalitet, hvormed et objekt får egenskaberne ved et eller flere andre objekter. Arv i C ++ betyder, at du kan oprette klasser, der henter deres attributter fra eksisterende klasser. Dette betyder, at du specialiserer en klasse for at skabe et forhold mellem klasserne, hvilket resulterer i en stærk kobling mellem basen og afledte klasser. Implementering af arv fremmer genanvendelighed af kode, fordi der oprettes nye klasser fra eksisterende klasser. Klassearv gør det også lettere at ændre implementeringen, der genbruges. Men klassearv har også nogle ulemper med det. For det første, fordi arv er defineret på kompileringstidspunktet, kan du ikke ændre implementeringerne, der er arvet fra overordnede klasser på kørselstidspunktet.

Hvad er sammensætning?

OOP giver endnu et forhold mellem klasser, der kaldes sammensætning, som også er kendt som et forhold. Hvis funktionerne i et objekt skal være en del af et andet objekt, kræver forholdet sammensætning. For at komponere en klasse fra eksisterende klasser skal et objekt for hver klasse erklæres som medlem af den nye klasse. I enkle ord kaldes det at bruge et objekt i et andet objekt som sammensætning. Mange gange vil du måske bruge et objekt som et felt i en anden klasse. Du bruger et objekt i en klasse i komposition. I modsætning til klassearv, er objektsammensætning defineret dynamisk ved kørsel gennem objekter, der får referencer til andre objekter. Derudover giver sammensætning en bedre måde at bruge et objekt på uden at gå på kompromis med de interne detaljer i objektet, det er her, sammensætning er nyttig.

Forskel mellem sammensætning og arv

Nærme sig

Mens både arv og sammensætning fremmer kodegenanvendelighed i objektorienteret system ved at etablere relationer mellem klasser, og de giver tilsvarende funktionalitet på mange måder, bruger de forskellige tilgange. Med arv kan du oprette klasser, der henter deres attributter fra eksisterende klasser, så mens du bruger arv til at oprette en klasse, kan du udvide til en eksisterende klasse. Tværtimod, at bruge et objekt inden for et andet objekt er kendt som sammensætning. Objektsammensætning er et alternativ til klassearv. Hvis funktionerne i et objekt skal være en del af et andet objekt, kræver forholdet sammensætning.

forholdet

I arv specialiserer du en klasse for at skabe et "is-a" forhold mellem klasserne, hvilket resulterer i en stærk kobling mellem basen og afledte klasser. Det gør det muligt at designe et hierarki af klasser, og hierarkiet begynder med den mest generelle klasse og flytter til mere specifikke klasser. Ved at implementere arv bliver medlemsfunktioner fra en klasse egenskaber for en anden klasse uden at kode dem eksplicit i klassen. I sammensætning bruger du et objekt i en klasse, og eventuelle anmodninger til objektet videresendes til objektet. De interne detaljer udsættes ikke for hinanden i sammensætning, så det er et “have-a” -forhold.

Implementering

Klassearv er defineret på kompileringstidspunktet, så du kan ikke ændre implementeringerne, der er arvet fra forældreklasser på kørselstidspunktet. Fordi arv udsætter en underklasse for detaljer om dets forældres implementering, bryder det ofte indkapsling. Eventuelle ændringer i forældreklassen afspejles i underklassen, som kan skabe problemer, når du prøver at genbruge en underklasse. Tværtimod er objektsammensætning defineret dynamisk ved kørsel gennem objekter, der får referencer til andre objekter. Og fordi der kun er adgang til objekter via deres grænseflader, bryder det ikke indkapsling. Ethvert objekt kan erstattes ved kørsel af et andet objekt, så længe det har den samme type.

Sammensætning vs. arv: Sammenligningstabel

Sammendrag af sammensætning vs. arv

Ved mange lejligheder ønsker du at bruge et objekt som et felt i en anden klasse, fordi komplekse klasser er lettere at oprette ved hjælp af tidligere skrevne, veldesignede klasser. Det er her du bruger sammensætning. Arv giver en måde at genbruge kode ved at udvide en klasse med minimal indsats, dette er grunden til arv er et værdifuldt værktøj til at etablere forhold mellem klasser. Generelt foretrækkes det at bruge sammensætning, da det tilvejebringer en måde at bruge et objekt på uden at gå på kompromis med de interne detaljer i objektet, der er, hvor sammensætning er nyttig. Arv er ikke uden problemer, men ligesom arv rejser objektsammensætning lignende ydelsesmæssige bekymringer med hensyn til objektskabelse og ødelæggelse.