9.1. INTRODUCERE
Termenul “OOP” (“Object Oriented Programming”) desemnează disciplina programării obiectuale (orientate-obiect). Această disciplină care are la bază ideea unificării datelor cu modalităţile de prelucrare a acestora şi manevrează entităţi reprezentate sub formă de obiecte (obiect=date+cod de tratare a acestor date).
Aşa cum s-a subliniat în capitolul 1.3., rezolvarea unei probleme se poate face pe 3 direcţii:
q Rezolvarea orientată pe algoritm (pe acţiune), în care organizarea datelor este neesenţială;
q Rezolvarea orientată pe date, acţiunile fiind determinate doar de organizarea datelor;
q Rezolvarea orientată obiect, care combină tendinţele primelor două abordări.
Programarea obiectuală oferă posibilităţi de modelare a obiectelor, a proprietăţilor şi a relaţiilor dintre ele, dar şi posibilitatea de a descompune o problemă în componentele sale (soft mai mentenabil, adaptabil, reciclabil). Câteva 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).
Facilităţile oferite de programarea orientată obiect (conform lui Pascou) sunt:
- abstractizarea datelor;
- moştenirea;
- încapsularea (ascunderea) informaţiei;
- legarea dinamică (“târzie”).
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ă aceeaşi idee sau concept sunt de acelaşi tip şi pot fi grupate în clase (concrete sau abstracte). Clasele implementează tipuri de date (aşa cum s-a subliniat în capitolul 2, un tip de date înseamnă o mulţime de valori pentru care s-a adoptatat un anumit mod de reprezentare şi o muţime de operatori care pot fi aplicaţi acestor valori), deci şi operatorii destinaţi manipulării acestora: Clasă = Date + Operaţii.
De exemplu, programatorul îşi poate defini tipul (clasa) matrice şi operatorii care pot fi aplicaţi matricilor (* pentru înmulţirea a două matrici, + pentru adunarea a două matrici, – pentru scăderea 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, funcţii şi relaţii cu alte clase.
Instanţa este un obiect dintr-o clasă (A, B, C sunt obiecte, instanţe ale clasei matrice) şi are proprietăţile definite de clasă. Pentru o clasă definită, se pot crea mai multe instanţe ale acesteia. Toate obiectele au o stare şi un comportament. Starea unui obiect se referă la elementele de date conţinute în obiect şi la valorile asociate acestora (datele membre). Comportamentul unui obiect este determinat de care acţiunile pe care obiectul poate să le execute (metodele).
Atributele specificate în definiţia unei clase descriu valoric proprietăţile obiectelor din clasă, sub diferite aspecte. Cele mai multe limbaje orientate obiect fac următoarea distincţie între atribute:
q atribute ale clasei (au aceeaşi valoare pentru toate instanţele clasei);
q atribute ale instanţei (variază de la o instanţă la alta, fiecare instanţă având propria copie a atributului).
În limbajul C++ atributele se numesc date membre. Toate datele membre sunt atribute instanţă. Atributele de clasă se pot obţine în cazul datelor membre statice (aceeaşi adresă de memorare pentru orice instanţă a clasei).