Documente Academic
Documente Profesional
Documente Cultură
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.
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ă.