Moștenire vs Containership
Moștenirea și Containership sunt două concepte importante găsite în OOP (Exemplu de programare orientată pe obiecte: C++). În termeni simpli, atât Containership, cât și Moștenire se ocupă de furnizarea de proprietăți sau comportament suplimentare unei clase. Moștenirea este capacitatea unei clase de a moșteni proprietăți și comportament de la o clasă părinte prin extinderea acesteia. Pe de altă parte, Containership este capacitatea unei clase de a conține obiecte din clase diferite ca date ale membrilor.
Ce este moștenirea?
După cum sa menționat mai sus, Moștenirea este capacitatea unei clase de a moșteni proprietăți și comportament de la o clasă părinte prin extinderea acesteia. Moștenirea oferă în esență reutilizarea codului, permițând extinderea proprietăților și comportamentului unei clase existente de către o clasă nou definită. Dacă clasa A se extinde pe B, atunci clasa B se numește clasa părinte (sau super-clasa) și clasa A se numește clasa copil (sau clasa/subclasa derivată). În acest exemplu de scenariu, clasa A va moșteni toate atributele și metodele publice și protejate ale superclasei (B). Subclasa poate suprascrie opțional (oferă funcționalitate nouă sau extinsă metodelor) comportamentul moștenit de la clasa părinte. Moștenirea reprezintă o relație „este-a” în POO. Acest lucru înseamnă în esență că A este și 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 din lumea reală, clasa Persoană ar putea fi extinsă pentru a crea clasa Angajat. Aceasta se numește specializare. Dar ați putea crea mai întâi clasa Angajat și apoi să o generalizați și la o clasă Persoană (de ex.e. generalizare). În acest exemplu, Angajatul va avea toate proprietățile și comportamentul Persoanei (adică, Angajatul este, de asemenea, o Persoană) și poate conține și unele funcționalități suplimentare (deci, Persoana nu este un Angajat).
Ce este containerul?
Containership este capacitatea unei clase de a conține obiecte din clase diferite ca date de membru. De exemplu, clasa A ar putea conține un obiect din clasa B ca membru. Aici, toate metodele (sau funcțiile) publice definite în B pot fi executate în cadrul clasei A. Clasa A devine container, în timp ce clasa B devine clasa conținută. Containership-ul este denumit și Compoziție. În acest exemplu, se poate spune că clasa A este compusă din clasa B. În POO, Containership reprezintă o relație „are-a”. Este important de menționat că, deși containerul are acces pentru a executa toate metodele publice ale clasei conținute, nu este capabil să modifice sau să ofere funcționalități suplimentare. Când vine vorba de o problemă de programare în lumea reală, un obiect din clasa TextBox poate fi conținut în clasa Form și astfel se poate spune că un Formular conține un TextBox (sau alternativ, un Form este compus dintr-un TextBox).
Diferența dintre moștenire și containere
Deși Moștenirea și Containership sunt două concepte POO, ele sunt destul de diferite în ceea ce permit programatorului să realizeze. Moștenirea este capacitatea unei clase de a moșteni proprietăți și comportament de la o clasă părinte prin extinderea acesteia, în timp ce Containership este capacitatea unei clase de a conține obiecte din clase diferite ca date membre. Dacă o clasă este extinsă, moștenește toate proprietățile/comportamentul public și protejat ș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 modifica sau de a adăuga comportament la conținut. Moștenirea reprezintă o relație „este-a” în POO, în timp ce Containership reprezintă o relație „are-a”.