Documente Academic
Documente Profesional
Documente Cultură
Moştenire
Unul dintre marile avantaje ale programării orientate obiect este posibilitatea de a reutiliza
codul existent. Posibilitatea proiectării de noi clase folosind clase deja construite se numeşte
moştenire. Dacă o clasă A moşteneşte o clasă B, atunci variabilele şi metodele clasei B vor fi
considerate ca aparţinând şi clasei A. Moştenirea permite crearea unor clase “de bază” cu rolul de
a stoca caracteristici comune unor clase diferite, astfel aceste proprietăţi nu vor trebui precizate în
fiecare clasă în parte.
Exemplu: Clasele “triunghi”, “patrulater” şi “cerc” au structuri diferite, dar toate au o arie,
un număr de laturi, perimetru, etc. Pentru ca în cele trei clase să nu se repete aceleaşi elemente,
variabile şi metode, soluţia optimă este proiectarea unei clase “figură geometrică”, în care să se
regăsească caracteristicile comune, şi aceasta să fie moştenită de toate cele trei clase în cauză.
Fig.2.14.
După cum se vede şi din imaginea de mai sus, moştenirea este posibilă şi pe mai multe
niveluri.
A nu se confunda moştenirea unei clase cu instanţierea ei. Numai o clasă poate moşteni
proprietăţile altei clase. În urma instanţierii unei clase rezultă un obiect.
În urma moştenirii unei clase, clasa derivată (care moşteneşte proprietăţile clasei de bază)
nu copie proprietăţile clasei de bază, ci acestea îi sunt direct accesibile.
Datorită proprietăţii de moştenire o clasă derivată nu numai că are acces la variabilele şi
metodele clasei moştenite, dar le şi poate redefini. Datorită acestui fapt o practică obişnuită în
proiectarea orientată pe obiecte este declararea de metode cu corpul vid în clasele de bază,
urmând ca acestor metode să li se ofere un corp în clasele derivate.
Moştenirea uşurează munca proiectanţilor de sisteme informatice prin modularitatea pe
care o promovează, astfel situaţii complexe din lumea reală putând fi mai uşor modelate.
Limbajele obiect permit organizarea claselor de obiecte în ierarhii specializate de la
general la particular, ceea ce permite o programare prin îmbogăţire progresivă. Conform
principiul substituirii toate operaţiile acceptă un parametru de un tip dat, sau acceptă un
parametru de toate subtipurile. În consecinţă o funcţie definită la nivelul unei clase este moştenită
de către toate subclasele, în afara cazului în care se redefineşte nivelul.
Moştenirea poate fi simplă (o clasă nu poate moşteni decât clasa imediat superioară) sau
multiplă (o clasă poate moşteni mai multe clase imediat superioare). În prezent, tot mai multe
limbaje utilizează moştenirea multiplă. Iniţial limbajele pe obiecte ca Smalltalk au cunoscut
moştenirea simplă, în care ierarhia claselor era compusă dintr-un singur arbore având o rădăcină
unică numită obiect.
Obiect
Cont Localitate
Angajaţi
Ingineri Cercetători
Proiecte Brevete
Fig.2.17. Moştenire şi atribute proprii
IngineriAngajaţiPersonal
AbsolvenţiStudenţiPersonal
PersonalPersonal
Clasa de apartenenţă a unui obiect este aceea care îi permite crearea. Această clasă poate
fi o subclasă caz în care obiectul moşteneşte proprietăţile superclasei. De exemplu, luând obiectul
Angajaţi repartizaţi pe locuri de muncă (pe localităţi) cu toate informaţiile lor moştenite şi proprii
observăm că 01 a fost creat ca aparţinând clasei Angajaţi, 02 clasei Ingineri şi 03 clasei
Cercetători.
<01, angajaţi, (Popescu,010)>
<02, ingineri, (Ionescu,010,proiectCAO)>
<03, cercetători, (Olaru, 010, (brevet1, brevet2))>
Moştenire multiplă
În cazul moştenirii multiple, o clasă poate avea două sau chiar mai multe clase de bază.
Când o clasă nu poate avea o superclasă directă, graful se reduce la un arbore şi
moştenirea este simplă. Când clase diferite au aceleaşi proprietăţi, acestea pot fi duplicate. De
exemplu, presupunând că un student poate fi angajat ca stagiar în acest caz este considerat ca un
angajat în clasa cercetători. Cu moştenirea simplă, pentru reprezentarea proprietăţii durata
stagiului, el va ajuta în primul rând clasa Cercetători şi Studenţi sau creează două subclase ale
aceleiaşi clase.
Moştenirea multiplă rezolvă această problemă permiţând unei clase să posede mai multe
superclase directe şi moştenind proprietăţile tuturor superclaselor.
Moştenirea multiplă poate fi definită ca mecanismul prin care o subclasă moşteneşte
proprietăţile mai multor superclase.
În figura 2.18. este ilustrată clasa Absolvenţi, care se distribuie în clasele Cercetători şi
Studenţi.
Poate apărea un conflict privind numele proprietăţilor moştenite. În calitate de angajaţi ei
vor fi repartizaţi la un grup de lucru. Vor fi posibile mai multe soluţii.
Cea mai simplă şi cea mai des întâlnită este interdicţia conflictului de nume care poate fi
detectată de către compilator, şi ea implică redenumirea proprietăţilor de către programator.
O altă soluţie este utilizarea de prefixe la numele proprietăţilor din numele superclaselor
de unde provin, de exemplu, Destinaţie studenţi. În fine, o soluţie mai elaborată constă în
stabilirea unei priorităţi între superclase putând reţine o singură proprietate.
Personal
Angajaţi Studenţi
Destinaţie Destinaţie
Cercetători
Absolvenţi
Moştenirea multiplă permite cea mai bună organizare a obiectelor evitând redundanţele definirii
atributelor şi metodelor.