Sunteți pe pagina 1din 4

CAPITOLUL 9 obiect

Concepte de baz ale programrii orientate

CONCEPTE DE BAZ ALE PROGRAMRII ORIENTATE OBIECT


9.1. Introducere 9.2. Abstractizarea datelor 9.3. Motenirea 9.4. ncapsularea informaiei 9.5. Legarea dinamic (trzie) 9.6. Alte aspecte

9.1. INTRODUCERE
Termenul "OOP" ("Object Oriented Programming") desemneaz disciplina programrii obiectuale (orientate-obiect). Aceast disciplin care are la baz ideea unificrii datelor cu modalitile de prelucrare a acestora i manevreaz entiti reprezentate sub form de obiecte (obiect=date+cod de tratare a acestor date). Aa cum s-a subliniat n capitolul 1.3., rezolvarea unei probleme se poate face pe 3 direcii: Rezolvarea orientat pe algoritm (pe aciune), n care organizarea datelor este neesenial; Rezolvarea orientat pe date, aciunile fiind determinate doar de organizarea datelor; Rezolvarea orientat obiect, care combin tendinele primelor dou abordri. Programarea obiectual ofer posibiliti de modelare a obiectelor, a proprietilor i a relaiilor dintre ele, dar i posibilitatea de a descompune o problem n componentele sale (soft mai mentenabil, adaptabil, reciclabil). Cteva exemple de limbaje de programare orientat obiect: SIMULA(1965), SIMULA-2(1967), Smalltalk, C++, Java (n plus, Java poate fi considerat un limbaj de programare orientat eveniment). Facilitile oferite de programarea orientat obiect (conform lui Pascou) sunt: 1. abstractizarea datelor; 2. motenirea; 3. ncapsularea (ascunderea) informaiei; 4. legarea dinamic (trzie).

9.2. ABSTRACTIZAREA DATELOR


Obiectele sunt componente software care modeleaz fenomene din lumea real. n general, un fenomen implic tipuri diferite de obiecte. Obiectele care reprezint aceeai idee sau concept sunt de acelai tip i pot fi grupate n clase (concrete sau abstracte). Clasele implementeaz tipuri de date (aa cum s-a subliniat n capitolul 2, un tip de date nseamn o mulime de valori pentru care s-a adoptatat un anumit mod de reprezentare i o muime de operatori care pot fi aplicai acestor valori), deci i operatorii destinai manipulrii acestora: Clas = Date + Operaii. De exemplu, programatorul i poate defini tipul (clasa) matrice i operatorii care pot fi aplicai matricilor (* pentru nmulirea a dou matrici, + pentru adunarea a dou matrici, - pentru scderea a dou matrici, etc). Astfel, el poate folosi tipul matrice n mod similar unui tip predefinit:
matrice A, B; matrice C=A+B;

Tipul unui obiect (ablon al obiectului) este o clas. O clas se caracterizeaz prin: numele clasei, atribute, funcii i relaii cu alte clase. Instana este un obiect dintr-o clas ( A, B, C sunt obiecte, instane ale clasei matrice) i are proprietile definite de clas. Pentru o clas definit, se pot crea mai multe instane ale acesteia. Toate obiectele au o stare i un comportament. Starea unui obiect se refer la elementele de date coninute n obiect i la

129

CAPITOLUL 9 obiect

Concepte de baz ale programrii orientate

valorile asociate acestora (datele membre). Comportamentul unui obiect este determinat de care aciunile pe care obiectul poate s le execute (metodele). Atributele specificate n definiia unei clase descriu valoric proprietile obiectelor din clas, sub diferite aspecte. Cele mai multe limbaje orientate obiect fac urmtoarea distincie ntre atribute: atribute ale clasei (au aceeai valoare pentru toate instanele clasei); atribute ale instanei (variaz de la o instan la alta, fiecare instan avnd propria copie a atributului). n limbajul C++ atributele se numesc date membre. Toate datele membre sunt atribute instan. Atributele de clas se pot obine n cazul datelor membre statice (aceeai adres de memorare pentru orice instan a clasei). Metode (funcii membre). La definirea unei clase se definesc i metodele acesteia (numite i funcii membre). Fiecare obiect are acces la un set de funcii care descriu operaiile care pot fi executate asupra lui. Metodele pot fi folosite de instanele clasei respective, dar i de instanele altor clase (prin mecanismul motenirii). Clasa conine att structurile de date necesare descrierii unui obiect, ct i metodele care pot fi aplicate obiectului. Astfel, gradul de abstractizare este, mult mai ridicat, iar programele devin mult mai uor de neles, depanat sau ntreinut. La crearea unui obiect, alocarea memoriei se poate fi face static sau dinamic (cu ajutorul unor funcii membre speciale, numite constructori). Eliberarea memoriei se realizeaz cu ajutorul unor funcii membre speciale, numite destructori, n momentul ncheierii existenei obiectului respectiv.

9.3. MOTENIREA
Motenirea este o caracteristic a limbajelor de programare orientate obiect, care permite refolosirea codului i extinderea funcionalitii claselor existente. ntre dou clase pot exista multe diferene, dar i multe asemnri. Este bine ca informaia comun unor clase s fie specificat o singur dat (conceptul de clas/subclas, superclas/clas n OOP). Mecanismul motenirii permite crearea unei ierarhii de clase i trecerea de la clasele generale la cele particulare. Procesul implic la nceput definirea clasei de baz care stabilete calitile comune ale tuturor obiectelor ce vor deriva din baz (ierarhic superioar)(figura 9.1.). Prin motenire, un obiect poate prelua proprietile obiectelor din clasa de baz. Clasa A reprezint clasa de baz (este o generalizare) i conine informaiile comune (disponibile prin motenire i subclaselor acesteia). Clasa B reprezint clasa derivat (este o particularizare, o specializare a clasei A) care extinde funcionalitatea clasei de baz i conine informaiile specifice. S presupunem c A reprezint clasa mamiferelor (cu proprietile caracteristice: nasc pui vii, au snge cald, i alpteaz puii, etc), iar B reprezint clasa animalelor domestice. n momentul definirii clasei derivate B, aceasta motenete toate caracteristicile clasei A, rmnnd de specificat doar trsturile distinctive. n acest caz, A este clas de baz, iar B clas derivat (subclas a clasei A). Sau: B este clas, iar A este o superclas a clasei B. Motenirea poate fi: unic sau multipl.
A

Figura 9.1. Relaia clas de baz-clas derivat

9.3.1. MOTENIREA UNIC


n cazul motenirii unice, fiecare clas are doar o superclas. Exist dou modaliti de specializare a unei clase de baz: introducerea de extra-atribute i extra-metode n clasa derivat (particulare doar clasei derivate); redefinirea membrilor n clase derivate (polimorfism).

9.3.2. MOTENIREA MULTIPL


130

CAPITOLUL 9 obiect

Concepte de baz ale programrii orientate

n situaia motenirii multiple, o clas are mai multe superclase. Astfel, motenirea clasei va fi multipl (rezultnd o structur de reea).
A A

Figura 9.2. Motenirea simpl (unic)

Figura 9.3. Motenirea multipl

Motenirea multipl este util, dar poate crea ambiguiti (cnd pentru acelai atribut se motenesc valori diferite). Exist mai multe strategii de rezolvare a conflictului (printele cel mai apropiat, cel mai deprtat, etc.). Deasemenea, este posibil o motenire repetat, n care o clas ajunge s moteneasc de la aceeai clas, pe drumuri diferite n reea (vezi figura 9.3., n care clasa E motenete de la aceeai clas A, pe drumurile A-B-E, A-C-E) . Aa cum vedea n capitolele urmtoare, n aceste situaii, limbajul C++ ofer programatorului dou strategii: 1) clasa E poate avea dou copii ale lui A, una pentru fiecare drum; 2) clasa E are o singur copie, iar A este clas virtual de baz i pentru C i pentru B. Ideea motenirii multiple poate duce la utilizarea unor clase pentru care nu exist instane , care s ajute doar la organizarea structurii (reelei) de motenire. n plus, limbajul C++ permite un control puternic asupra atributelor i metodelor care vor fi motenite.

9.4. NCAPSULAREA (ASCUNDEREA) INFORMAIEI


ncapsularea (ascunderea) informaiei reflect faptul c atributele instan i metodele unui obiect l definesc doar pe acesta. Vom spune c metodele i atributele unui obiect sunt private, ncapsulate n obiect. Interfaa cu obiectul relev foarte puin din ceea ce se petrece n interiorul lui. Obiectul deine controlul asupra atributelor instan, care nu pot fi alterate de ctre alte obiecte. Excepia de la aceast observaie o reprezint doar atributele de clas care nu sunt ncapsulate, fiind partajate ntre toate instanele clasei. Aceast tehnic de "plasare" a valorilor n datele membre private ale obiectului, reprezint un mecanism de ascundere a datelor. n limbajul C++ ncapsularea poate fi forat prin controlul accesului, deoarece toate datele i funciile membre sunt caracterizate printr-un nivel de acces (rezultnd astfel o mare flexibilitate). Nivelul de acces la membrii unei clase poate fi (figura 9.4.): public

private: membrii (date i metode) la care accesul este private pot fi accesai doar prin metodele clasei (nivel acces implicit); protected: aceti membri pot fi accesai prin funciile membre ale clasei i funciile membre ale clasei derivate; public: membrii la care accesul este public pot fi accesai din orice punct al domeniului de existen a clasei respective; friend: aceti membri pot fi accesai prin funciile membre ale funciei prietene specificate.
131

protected private

Clasa A

clas derivat

Clasa B

Figura 9.4. Accesul la membrii unei clase

CAPITOLUL 9 obiect

Concepte de baz ale programrii orientate

n limbajul C++, nivelul de acces poate preciza i tipul de motenire (capitolul 12). Public, unde n clasa derivat nivelul de acces al membrilor este acelai ca n clasa de baz; Privat, unde membrii protected i public din clasa baz devin private n clasa derivat.

9.5. LEGAREA DINAMIC (TRZIE)


Obiectele unei clase printe trebuie cunoscute n momentul compilrii. Efectul combinat al motenirii poate determina ca o anumit metod s fie specializat diferit (prin redefinire), pentru subclase diferite. Polimorfismul reprezint comportamente diferite ale unei metode n raport cu tipul unui obiect. Selectarea unei metode redefinite poate fi realizat n faza de compilare (legarea iniial), sau n momentul execuiei (legare trzie). n limbajul C++, legarea dinamic se poate realiza prin implementarea de: funcii virtuale (pot fi redefinite polimorfic); funcii virtuale pure (doar declarate, nu definite).

9.6. ALTE ASPECTE


Comunicarea ntre obiecte n limbajele de programare orientate obiect, obiectele comunic ntre ele prin mesaje, ceea ce conduce la accentuarea conceptului de ncapsulare. Un obiect poate stimula un altul s activeze (declaneze) o metod, trimindu-i un mesaj. Dup primirea mesajului, metoda respectiv este apelat cu parametrii furnizai, asigurnd comportarea corespunztoare a obiectelor. Metodele sunt invocate prin trimiterea de mesaje. n limbajul C++ funciile membre (metodele) sunt accesate n mod similar oricarei funcii, cu deosebirea c este necesar specificarea obiectului cruia i corespunde metoda.

Pseudovariabile Limbajele de programare orientate obiect posed dou variabile (numite pseudo-variabile) care difer de variabilele normale prin faptul c nu li se pot atribui valori n mod direct, de ctre programator. n general, pseudovariabilele sunt o form scurt pentru obiectul curent i pentru clasa printe a obiectului curent. n limbajul C++ exist doar una din aceste pseudovariabile, numit this (pointer ctre obiectul curent).

Metaclasele Metaclasele reprezint clase de clase. O clas este, de fapt, o instan a unei metaclase. Diferenele dintre clase i metaclase sunt: Clasa definete caracteristici (atribute i metode) ale instanelor de acel tip. Metodele pot fi folosite doar de obiectele clasei, nu i de nsi clasa (restricie). Metaclasele furnizeaz un mijloc prin care variabilele clas pot fi implementate: n unele limbaje OOP, variabilele clas sunt instanieri ale unei metaclase.

Limbajul C++ nu include explicit metaclasele, dar suport variabilele clas sub forma datelor statice. Aa cum funciile membre obinuite sunt ncapsulate nuntrul fiecarei instane, pentru o funcie membru static a unei clase, se folosete o singur copie, partajat de ctre toate instanele clasei. O asemenea funcie nu este asociat unei anumite instane. Persistena Persistena reprezint timpul de via al unui obiect (ntre crearea obiectului i tergerea sa). Instanele unei clase au un timp de via dat de execuia unei metode sau a unui bloc, de crearea sau tergerea specificat explicit n program sau de durata ntregului program. Persistena obiectelor este important n special n aplicaiile de baze de date.

Suprancarcarea operatorilor. Limbajul C++ furnizeaz modaliti de suprancarcare a operatorilor (overloading): acelai operator are semnificaii diferite, care depind de numrul i tipul argumentelor.

132

S-ar putea să vă placă și