Sunteți pe pagina 1din 5

2.2.

Conceptul de obiect

        Obiectele sunt elemente cheie ale programării orientate-obiect şi ele reprezintă entităţi
individuale reale sau abstracte cu un rol bine definit în contextul unui sistem.
Conceptul de obiect este cheia de boltă în programarea orientată obiect (POO). În mare,
obiectele soft în POO descriu obiecte din lumea reală, cum ar fi de exemplu case, animale,
clădiri; entităţi cu un caracter abstract, de genul formulelor matematice sau chiar evenimente ce
pot avea loc (apăsarea unei taste, producerea unei explozii sau soldarea unui cont). Obiectele din
lumea reală sunt caracterizate de o mulţime de atribute. De exemplu, atributele unei cărţi pot fi
titlul, autorul, formatul, editura, culoarea coperţii şi anul de apariţie. Când obiecte din lumea
reală, abstracţiuni sau evenimente (acţiuni) sunt modelate cu ajutorul obiectelor soft, atributele
acestor entităţi modelate sunt descrise cu ajutorul variabilelor din obiectul soft respectiv.
Programarea structurată clasică (neorientată obiect) se bazează pe un model de programare care
separă operaţiile (funcţii, proceduri, etc.) de datele asupra cărora operaţiile acţionează. Rigiditatea
acestui tip de programare reiese din controlul dificil al schimbărilor ce pot avea loc atât în
structura datelor, cât şi în cea a operaţiilor.

Fig.2.1.

Problema se complică şi mai mult dacă se ia în calcul funcţionarea programelor într-un


mediu distribuit, în care arhitecturile hard şi soft sunt foarte diverse. De cele mai multe ori
expeditorul unei informaţii (într-un mediu distribuit, cum ar fi Internet-ul) nu ştie aproape nimic
despre arhitectura maşinii destinatar, excluzându-se astfel posibilitatea existenţei unui
“translator”, care să traducă datele destinatarului, aşa încât acesta să poată să le “înţeleagă” (vezi
fig. de mai sus). Soluţia la această problemă o oferă modelul de programare orientat obiect, în
care datele şi operaţiile care le prelucrează sunt grupate în obiecte.
Un obiect are o identitate, o stare şi un comportament. Tot ceea ce obiectele cunosc
(starea) şi pot efectua (comportamentul) este exprimat prin intermediul unor mulţimi de
proprietăţi (sau atribute) şi operaţii (sau metode). Astfel, starea unui obiect este dată de valorile
proprietăţilor acestuia la un moment dat. Operaţiile sunt proceduri sau funcţii care permit
modificarea acestor valori şi implementează comportamentul obiectelor.
Identitatea unui obiect este acea proprietate a obiectului care îl distinge de alte obiecte. Ea
organizează obiectele într-un spaţiu manipulat de limbajele orientate obiect. Obiectul este definit
de un identificator intern unic, independent de valoarea sau de adresa de memorie a obiectului.
Identificatorul este o proprietate a obiectului care-i permite distingerea de celelalte.
Identificarea entităţilor printr-un identificator unic este caracteristica mediului obiect: tipurile
sunt implementate sub formă de clase de elemente ale obiectelor cu identificatori.
Identificatorii stau la baza realizării referenţierii între obiecte. În cazul în care două
obiecte pot fi referenţiate de un acelaşi obiect, se va face partajarea referenţială. Identificatorii
permit organizarea obiectelor unei aplicaţii în grafuri.
În toate limbajele, identificatorul unui obiect la nivel intern este un pointer în memorie,
care poate fi în mod direct manipulat de utilizator (C++) sau automat generat pentru
implementarea tuturor variabilelor atribuite unui obiect (Smalltalk, Obiect Pascal). O astfel de
variabilă conţine identificatorul obiectului referenţiat.
Limbajele obiect pure nu administrează obiecte şi sunt denumite total obiect. Smalltalk
este un exemplu de limbaj total obiect. Toate datele au conform teoriei, un identificator
implementat ca un pointer către conţinutul obiectului. În cazul valorii simple (de exemplu un
întreg), introducerea sistematică a identificatorului către valoare va conduce într-o direcţie
inacceptabilă. Pentru rezolvarea acestei probleme, un obiect elementar (întregul) este în general
auto identificat: identificatorul său este valoarea sa. Altminteri spus, obiectul este suportat prin
cuvântul-maşină ce conţine un semn distinctiv prin care se arată că identificatorul este absent şi
este înlocuit de valoarea sa, aceasta uşurând implementarea tuturor obiectelor. Sintetizând, se
ajunge astfel la identificarea structurii ca în următoarea reprezentare:

Valoare sau pointer


Numărul clasei
Obiect simplu sau complex
Fig.2.2. Structura tipică a unui identificator de obiect

     Deoarece datele şi operaţiile sunt plasate într-o singură entitate, numită obiect,
comunicarea într-un mediu distribuit are loc mult mai uşor, practic ea rezumându-se la
transportul dintr-un loc în altul al obiectelor. Accesul destinatarului la date se va face prin
operaţiile furnizate de obiect. Uşurinţa acestui tip de comunicare la distanţă este datorată
existenţei multor tehnologii sau standarde industriale care permit comunicarea între obiecte aflate
pe platforme diferite (exemplu: IIOP definit de Object Management Group).

Fig.2.3.
După cum am precizat şi mai înainte, datele sunt stocate în obiecte cu ajutorul
variabilelor. Operaţiile ce lucrează cu aceste date (funcţii, proceduri, etc.) poartă numele de
metode. Un obiect poate fi văzut ca o mulţime de variabile şi metode. În general este recomandat
ca accesul la datele (variabilele) unui obiect să nu fie permis decât metodelor obiectului respectiv,
realizându-se astfel o protecţie sporită a datelor interne. Această proprietate a programării
orientate obiect se numeşte încapsulare. Exemplu: La datele obiectului “carte” nu se poate ajunge
decât prin intermediul metodelor dedicate. (conţinutul variabilei “pagini” nu se poate determina
decât cu ajutorul metodei “nr_pagini()")

 
Fig.2.4.

(În C++ şi Java ascunderea datelor se face cu modificatorii de acces "private" sau
"protected".)
Un obiect este de obicei o componentă dintr-un program sau o aplicaţie, alături de alte
obiecte, existenţa singulară a unui obiect nefiind prea folositoare. Tot secretul metodei orientate
pe obiecte constă în abilitatea de a face diferite obiecte, fiecare descriind o anumită entitate, să
interacţioneze între ele şi în urma producerii acestora să se obţină rezultatele scontate. (exemplu:
existenţa unui obiect “carte” nu are sens decât dacă există un alt obiect care să extragă informaţii
din “carte”, apelând o metodă de genul “citeşte()")
Aplicaţiile orientate-obiect sunt compuse dintr-o mulţime de obiecte care interacţionează
şi comunică între ele prin intermediul mesajelor. Un mesaj reprezintă o cerere adresată unui
obiect de a executa o anumită operaţie. Mesajul este compus din trei elemente distincte:
identitatea obiectului căruia îi este adresat mesajul, numele operaţiei care se doreşte a fi
executată şi o listă de parametri necesari executării operaţiei. Aceste trei informaţii sunt
suficiente pentru ca un obiect care recepţionează un mesaj să poată executa operaţia dorită.
Mecanismul transmisiei de mesaje permite prin urmare comunicarea între obiecte aflate în
contexte (sau procese) diferite sau pe diferite sisteme de calcul. Dacă un obiect A doreşte să
execute o metodă a unui obiect B, atunci A îi trimite obiectului B un mesaj.
Uneori obiectul destinatar (primitorul mesajului) are nevoie de mai multe informaţii
pentru a executa metoda cerută de expeditorul mesajului (solicitantul). Exemplu: Obiectul
“student” trimite un mesaj obiectului “carte” prin care îi cere acestuia să apeleze metoda
“deschide_carte()”. Această metodă a obiectului “carte” nu se poate executa deoarece “student”-
ul nu a precizat “cărţii” pagina la care trebuie să se deschidă.
Aceste informaţii suplimentare, de care este nevoie pentru execuţia unor metode, se
numesc parametri de intrare. Pentru ca metoda "deschide_carte()” din obiectul “carte” să fie
executată trebuie ca expeditorul (în cazul nostru “student”-ul) să trimită în mesaj şi valori pentru
toţi parametrii de intrare ai metodei ce se doreşte să fie apelată(“studentul” trebuie să trimită în
mesaj şi valorile parametrului de intrare “pagina”, pentru a nu exista ambiguităţi vis-a-vis de
pagina la care va fi deschisă cartea).
O metodă poate avea zero, unul sau mai mulţi parametri de intrare.
Unele metode, în urma execuţiei lor pot furniza date, numite parametrii de ieşire. O
metodă poate avea sau nu parametrii de ieşire
Exemple:
Metoda “editura()” din obiectul “carte” nu are parametrii de intrare şi ca parametru de
ieşire întoarce valoarea variabilei "editura".
Metoda “citeşte_pagina()” primeşte ca parametru de intrare numărul paginii şi ca
parametru de ieşire întoarce conţinutul paginii al cărui număr a fost primit ca parametru de
intrare.
Metoda "deschide_carte” primeşte ca parametru de intrare numărul paginii şi nu are
parametrii de ieşire, deoarece în urma execuţiei metodei nu este întoarsă nici o valoare (are loc
doar operaţiunea de închidere a cărţii) .
Metoda “închide_carte” nu are nevoie nici de parametrii de intrare, nici de ieşire.
Un mesaj trimis unui obiect este compus din trei elemente:
 numele obiectului care conţine metoda,
 numele metodei,
 valori pentru toţi parametrii de intrare ai metodei ( dacă metoda are parametri de
intrare ).
Deoarece tot ce poate să facă un obiect este realizat prin apelarea metodelor sale,
interacţiunea dintre obiecte are loc prin schimburi de mesaje. Obiectele nu trebuie să aparţină
neapărat aceluiaşi proces şi nici măcar nu este necesar să existe pe aceeaşi maşină pentru a putea
trimite şi primi mesaje.

Fig.2.5.
Elemente statice ale obiectelor
Pe lângă variabilele şi metodele declarate în mod “normal”, există posibilitatea declarării
lor statice. Dacă o variabilă este declarată ca fiind statică în definiţia unei clase, atunci
compilatorul va crea doar o singură copie a ei, indiferent de numărul obiectelor instanţiate din
clasa respectivă. Toate aceste obiecte vor face referire practic la o singură variabilă, deci valoarea
stocată de ea va fi aceeaşi pentru toate obiectele, spre deosebire de “elementele normale”, pentru
care există câte o copie pentru fiecare obiect.
Restricţii:
 metodă statică poate folosi doar elemente statice din clasa în cauză,
 nu se pot supraîncărca metode statice cu metode non-statice şi nici invers.
Elementele statice sunt folosite mai ales pentru controlul la nivel de clasă al programelor. Cu
ajutorul lor se poate controla comportamentul tuturor obiectelor instanţiate dintr-o anumită clasă.

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