Rozdiel medzi zložením a dedičstvom

V programovaní je opakovane použiteľný kód použitie existujúceho softvéru na zostavenie nového softvéru pomocou zásad opakovaného použitia. Opätovné použitie kódu sa v podnikoch náročných na informačné technológie považuje za základnú výrobnú funkčnosť. Je podporovaný v objektovo orientovaných systémoch vytváraním vzťahov medzi triedami. Existujú dva základné spôsoby, ako nadviazať tieto vzťahy v objektovo orientovanom programovaní - Dedičstvo a Zloženie. Implementácia dedičstva je jedným zo spôsobov, ako prepojiť triedy, ale OOP poskytuje nový druh vzťahu medzi triedami nazývaný zloženie. Vytvorením vzťahu medzi novými a existujúcimi triedami môže nová trieda zdediť alebo vložiť kód z jednej alebo viacerých existujúcich tried.

V OOP je dedičnosť metodika, pomocou ktorej objekt získava charakteristiky jedného alebo viacerých ďalších objektov. Je to jeden z najúčinnejších nástrojov na implementáciu opakovane použiteľného kódu v OOP. Pri použití dedičstva je možné novú triedu vytvoriť nadviazaním vzťahov rodič-dieťa s existujúcimi triedami. Zloženie objektu je alternatívou k dedičstvu triedy. Použitie objektu v rámci iného objektu sa nazýva zloženie. Pri mnohých príležitostiach by ste chceli použiť objekt ako pole v rámci inej triedy, pretože je ľahké vytvárať zložité triedy s použitím predtým napísaných, dobre navrhnutých tried ako komponentov. Toto sa nazýva zloženie. Dedičnosť aj kompozícia poskytujú v mnohých prípadoch rovnocennú funkčnosť. Zloženie objektu je lepším modelom opätovného použitia ako dedičstvo triedy. Tento článok porovnáva dva prístupy.

Čo je dedičstvo?

Dedičnosť je jedným z najúčinnejších nástrojov pri implementácii opakovaného použitia kódu v objektovo orientovanom programovaní. Vzťahuje sa na funkčnosť, pomocou ktorej jeden objekt získa vlastnosti jedného alebo viacerých ďalších objektov. Dedičnosť v C ++ znamená, že môžete vytvárať triedy, ktoré odvodzujú ich atribúty z existujúcich tried. To znamená, že špecializujete triedu na vytvorenie vzťahu medzi triedami, čo vedie k silnému prepojeniu medzi základnými a odvodenými triedami. Implementácia dedičstva podporuje opätovné použitie kódu, pretože nové triedy sú vytvorené z existujúcich tried. Dedičstvo triedy tiež uľahčuje úpravu opakovaného použitia implementácie. Dedičstvo triedy má však aj niektoré nevýhody. Po prvé, pretože dedičstvo je definované v čase kompilácie, nemôžete zmeniť implementácie zdedené z nadradených tried v čase spustenia..

Čo je zloženie?

OOP poskytuje ešte ďalší vzťah medzi triedami, ktorý sa nazýva kompozícia, ktorá je známa aj ako vzťah typu has-a. Ak vlastnosti jedného objektu musia byť súčasťou iného objektu, vzťah vyžaduje zloženie. Na vytvorenie triedy z existujúcich tried by mal byť objekt každej triedy vyhlásený za člena novej triedy. Jednoducho povedané, použitie objektu v inom objekte je známe ako zloženie. Mnohokrát možno budete chcieť použiť objekt ako pole v rámci inej triedy. Môžete použiť objekt v rámci triedy v zložení. Na rozdiel od dedičstva triedy je zloženie objektov definované dynamicky v čase vykonávania pomocou objektov, ktoré získavajú odkazy na iné objekty. Okrem toho kompozícia poskytuje lepší spôsob použitia objektu bez toho, aby došlo k narušeniu vnútorných detailov objektu, to znamená, že kompozícia je užitočná.

Rozdiel medzi zložením a dedičstvom

Prístup

Aj keď dedičnosť aj zloženie podporujú opakované použitie kódu v objektovo orientovanom systéme vytváraním vzťahov medzi triedami a poskytujú ekvivalentnú funkčnosť mnohými spôsobmi, používajú rôzne prístupy. S dedičnosťou môžete vytvárať triedy, ktoré odvodzujú ich atribúty z existujúcich tried, takže zatiaľ čo pomocou dedenia na vytvorenie triedy môžete rozbaliť existujúcu triedu. Naopak, použitie objektu v inom objekte je známe ako zloženie. Zloženie objektu je alternatívou k dedičstvu triedy. Ak vlastnosti jedného objektu musia byť súčasťou iného objektu, vzťah vyžaduje zloženie.

súvislosť

V dedičstve špecializujete triedu na vytvorenie vzťahu „is-a“ medzi triedami, čo vedie k silnému prepojeniu medzi základnou a odvodenou triedou. Umožňuje navrhnúť hierarchiu tried a hierarchia začína naj všeobecnejšou triedou a presúva sa do konkrétnejších tried. Implementáciou dedičstva sa členské funkcie z jednej triedy stávajú vlastnosťami inej triedy bez toho, aby ich explicitne kódovali v rámci triedy. V zložení použijete objekt vo vnútri triedy a všetky požiadavky na objekt sa preposielajú do objektu. Vnútorné detaily nie sú navzájom vystavené v zložení, takže ide o vzťah „má a“.

uskutočnenie

Dedičnosť tried je definovaná v čase kompilácie, takže nemôžete zmeniť implementácie zdedené z nadradených tried v čase spustenia. Pretože dedičstvo vystavuje podtriedu podrobnostiam o implementácii rodičov, často narušuje zapuzdrenie. Akékoľvek zmeny v nadradenej triede sa prejavia v podtriede, čo môže spôsobiť problémy pri pokuse o opätovné použitie podtriedy. Zloženie objektov je naopak dynamicky definované v čase vykonávania pomocou objektov, ktoré získavajú odkazy na iné objekty. A pretože k objektom sa pristupuje iba cez ich rozhrania, nezruší to zapuzdrenie. Akýkoľvek objekt môže byť nahradený za behu iným objektom, pokiaľ má rovnaký typ.

Zloženie vs. dedičnosť: porovnávacia tabuľka

Zhrnutie zloženia verzus dedičstvo

Pri mnohých príležitostiach by ste chceli použiť objekt ako pole v rámci inej triedy, pretože zložité triedy sa dajú ľahšie vytvoriť pomocou predtým napísaných, dobre navrhnutých tried. To je miesto, kde používate zloženie. Dedičnosť poskytuje spôsob opätovného použitia kódu rozšírením triedy s minimálnym úsilím, preto je dedičstvo cenným nástrojom na vytváranie vzťahov medzi triedami. Všeobecne je výhodné použiť kompozíciu, pretože poskytuje spôsob použitia objektu bez toho, aby došlo k narušeniu vnútorných detailov objektu, v ktorom je kompozícia užitočná. Dedičnosť nie je bez problémov, ale ako dedičnosť, zloženie objektov vyvoláva podobné obavy týkajúce sa výkonu, pokiaľ ide o vytváranie a ničenie objektov..