Diferența dintre moștenire și compoziție

Moștenire vs. Compoziție

Moștenirea și compoziția sunt două concepte importante găsite în OOP (Object Oriented Programming). În termeni simpli, atât compoziția, cât și moștenirea se referă la furnizarea de proprietăți sau comportamente suplimentare unei clase. Moștenirea este capacitatea unei clase de a moșteni proprietățile și comportamentul de la o clasă părinte prin extinderea acesteia. Pe de altă parte, compoziția este capacitatea unei clase de a conține obiecte din diferite clase ca date membre.

Ce este moștenirea?

După cum am menționat mai sus, Inheritanța este capacitatea unei clase de a moșteni proprietățile și comportamentul de la o clasă părinte prin extinderea acesteia. Moștenirea oferă în mod esențial reutilizarea codului, permițând extinderea proprietăților și a comportamentului unei clase existente printr-o clasă nou definită. Dacă clasa A extinde B, atunci clasa B se numește clasa părinte (sau clasa super), iar clasa A se numește clasa copil (sau clasa / clasa derivată). În acest exemplu de scenariu, clasa A va moșteni toate atributele și metodele publice și protejate ale clasei superioare (B). Subclasa poate suprascrie opțional (oferă funcționalitate nouă sau extinsă la metode) comportamentul moștenit de la clasa parentală.

Moștenirea reprezintă o relație "este-a" în PLO. Acest lucru înseamnă, în esență, că A este de asemenea un B. Cu alte cuvinte, B poate fi clasa cu o descriere generală a unei anumite entități din lumea reală, dar A specifică o anumită specializare. Într-o problemă de programare a lumii reale, clasa Persoană ar putea fi extinsă pentru a crea clasa Angajat. Aceasta se numește specializare. Dar puteți crea mai întâi clasa angajaților și apoi generalizați-o și la o clasă Persoană (adică generalizare). În acest exemplu, Angajatul va avea toate proprietățile și comportamentul Persoanei (adică Angajatul este și o Persoană) și poate conține unele funcționalități suplimentare (deci, Persoana nu este un angajat), precum și.

Ce este compoziția?

Compoziția este capacitatea unei clase de a conține obiecte din diferite clase ca date membre. De exemplu, clasa A ar putea conține un obiect de clasă B ca membru. Aici, toate metodele publice (sau funcțiile) definite în B pot fi executate în clasa A. Clasa A devine container, în timp ce clasa B devine clasa limitată. Compoziția este denumită și Containership. În acest exemplu, se poate spune că clasa A este compusă din clasa B. În OOP, compoziția reprezintă o relație "has-a". Este important de menționat că, deși containerul are acces la executarea tuturor metodelor publice din clasa conținută, acesta nu poate să modifice sau să furnizeze funcționalități suplimentare. Când vine vorba de o problemă de programare a lumii reale, un obiect de clasă TextBox poate fi conținut în Forma de clasă, și astfel se poate spune că o Formă conține un TextBox (sau, alternativ, un Formular este compus dintr-un TextBox).

Care este diferența dintre moștenire și compoziție?

Deși moștenirea și compoziția sunt două concepte OOP, ele sunt destul de diferite în ceea ce permite programatorului să realizeze. Moștenirea este capacitatea unei clase de a moșteni proprietățile și comportamentul de la o clasă părinte prin extinderea acesteia, în timp ce Compoziția este capacitatea unei clase de a conține obiecte din diferite clase ca date membre. Dacă o clasă este extinsă, ea moștenește toate proprietățile și comportamentele publice și protejate și acele comportamente pot fi suprascrise de subclasă. Dar dacă o clasă este conținută într-o altă clasă, containerul nu are capacitatea de a schimba sau de a adăuga un comportament conținutului conținut. Moștenirea reprezintă o relație "este-a" în PLO, în timp ce Compoziția reprezintă o relație "a-a".