Sunteți pe pagina 1din 4

1.1.

Premisele apariţiei programării orientate obiect

Programarea orientata obiect este unul din cei mai importanţi paşi făcuţi in evoluţia
limbajelor de programare spre o mai puternica abstractizare in implementarea programelor.
Întrebarea este: la ce se refera aceasta abstractizare, când vine vorba de un limbaj de programare?
Ea a apărut din necesitatea exprimării problemei intr-un mod mai natural fiinţei umane. Astfel
unităţile care alcătuiesc un program se apropie mai mult de modul nostru de a gândi decât modul
de lucru al calculatorului.
Pana la apariţia programării orientate obiect programele erau implementate in limbaje de
programare procedurale( C, Pascal ) sau in limbaje care nici măcar nu ofereau o modalitate de
grupare a instrucţiunilor in unităţi logice (funcţii, proceduri) cum este cazul limbajului de
asamblare (assembler). Altfel spus o problema preluata din natura trebuia fragmentata in repetate
rânduri astfel încât sa se identifice elementele distincte, implementabile intr-un limbaj de
programare. O mare problema a programării procedurale era separarea datelor de unităţile care
prelucrau datele (subrutinele), ceea ce făcea foarte dificila extinderea si întreţinerea unui
program. Astfel s-a pus problema ca aceste doua entităţi (date si subrutine) sa fie grupate intr-un
anumit mod, astfel încât subrutinele sa "ştie" in permanenta ce date prelucrează si , mai mult
decât atât, ele sa formeze un modul, adică o unitate care separa implementarea de interfaţa, ceea
ce implica posibilitatea refolosirii codului.
În acest paragraf vom încerca să punem în evidenţă câteva caracteristici ale programării
obiect faţă de cea clasică.
Pentru utilizarea orientării spre obiecte, nu este necesar să se dispună de un limbaj de
programare obiect sau de un sistem de gestiune a bazelor de date obiect. O concepţie obiect este
posibilă având implementat un limbaj tradiţional.
Instrumentele din ce în ce mai numeroase de concepere a unui model obiect pot fi
generate de limbaje tradiţionale cum ar fi C cu baze de date relaţionale. Se pot utiliza cu succes
extensiile limbajelor din a treia generaţie cum ar fi C++ sau Pascal cu orientare spre obiecte, care
să fie un suport pentru obiecte cu un mare grad de compatibilitate cu limbajul tradiţional.
Graţie progreselor constante în materie de limbaje şi de logică, a devenit posibilă
dezvoltarea de sisteme informatice din ce în ce mai complexe.
Motivele care au dus la creşterea complexităţii sistemelor sunt numărul şi varietatea
elementelor sale, relaţiile şi interacţiunile complexe, diferitele baze, eventualele conflicte de la
parte la utilizatori.
Sistemele orientate obiect obţin o însumare a avantajelor sistemelor de gestiune a bazelor
de date, care interoghează eficient datele, şi a limbajelor procedurale, care permit calcule
complexe.
Orientarea spre obiecte apare ca o soluţie recentă la construirea de sisteme, sau aplicaţii
complexe, cu precădere a elementelor stabile ale sistemului pentru modelarea uniformă asupra
obiectelor. Ele subliniază bazele evoluţiei aplicaţiilor şi preconizează soluţii uşoare de reutilizare
în evoluţia logicii.
Valorificarea informaţiilor obţinute folosind aplicaţii orientate obiect conduce la
cunoaşterea situaţiei reale, la determinarea cauzelor acolo unde sunt deficienţe, la luarea unor
măsuri operative pentru îmbunătăţirea activităţii. Informaţia care circulă între compartimente, cea
care este agregată sau generalizată în vederea fundamentării deciziilor, necesită manipularea unor
date de tipuri diferite. Controlul desfăşurării proceselor aparţine utilizatorului, care răspunde
conversaţional unor necesităţi de informare imediată, sau fundamentează decizii pe termen lung,
corelând informaţii din diferite domenii.
Principiile programării orientate obiect îşi au originea în limitele celor două curente
existente în domeniul organizării şi exploatării datelor. Primul, pune accentul pe exploatarea
datelor prin programe.
Programele complexe şi voluminoase sunt structurate în subprograme independente, dând
naştere la programarea structurată. Al doilea, privilegiază datele, care prin complexitate şi volum
au impus regruparea lor în funcţie de caracteristici comune.
Primele limbaje care au definit noţiunea de clasă, care regrupează o structură de date şi
procedurile necesare pentru manipularea ei, au fost limbajele folosite pentru rezolvarea
problemelor de simulare. Rând pe rând au fost reluate şi amplificate tendinţele de uniformizare
ale mediului de programare, unde totul se reduce la obiect, au apărut limbaje care oferă
funcţionalităţi ale programării orientate obiect, conservând structurile de control clasice ale
limbajelor imperative.
Pentru limbajele procedurale, un program cuprindea o serie de proceduri care se apelau
reciproc. Procedura reprezenta unitatea de calcul, transmiţând valori pentru variabile, sau
actualizând parametrii de intrare. În orientarea spre obiecte există obiectele capabile să trimită
mesaje de la unul la celălalt, să proceseze cereri recunoscute ca mesaje, să răspundă unei colecţii
predefinite de mesaje care formează interfaţa obiectului.
Limbajele de programare orientate spre obiecte au cunoscut o evoluţie interesantă, astfel
se poate vorbi prima dată de noţiunea de obiect încă din anii ’60.(Simula). În viziunea lui Simula,
un obiect corespundea unui proces şi avea o existenţă proprie care facilita simularea activităţilor
paralele. Cu toate că a fost dezvoltat în cadrul Institutului Norwegian Computing Centre, nu a
devenit un limbaj comercial, popular, rămânând un instrument în stimularea cercetării şi a
dezvoltării de noi limbaje.
Către sfârşitul anilor ’60 au fost definite mai multe concepte ale programării pe obiecte.
Pasul decisiv în programarea pe obiecte, s-a produs însă la nivelul anilor ’70, şi a fost pentru
prima oară când au fost integrate tehnologii de interacţiune cu utilizatorii prin iconuri, ferestre şi
mouse.
Aceste tehnologii au stat la baza dezvoltării Macintosh, iar mai târziu la baza lui Windows
Microsoft. Ele au la bază aceiaşi sursă a limbajelor obiect: un obiect este reprezentat printr-un
icon care poate fi posibil de apelat printr-un clic, pentru a selecta operaţia respectivă.
Se realizează integrarea obiectelor la nivelul interfeţei om-maşină, aceasta fiind cheia
succesului orientării pe obiecte.
Limbaje existente azi ca C++, Jawa, furnizează un mediu deosebit de interesant de
dezvoltare a acestei interfeţe. De asemenea la dezvoltarea limbajelor obiect au contribuit şi
punerea accentului pe logică, programarea pe module, utilizarea tipurilor abstracte şi specializate.
Cel mai important limbaj al anilor 70-80 a fost Smalltalk, urmat de C++, acesta din urmă
câştigând tot mai mult teren.
Tehnicile orientate spre obiecte cuprind, în sens larg, sub numele de program, orice
procedură folosită pentru rezolvarea unor probleme sau preluarea rezultatelor dintr-un mediu de
calcul (interacţiunea cu un procesor de tabele, manipularea ferestrelor de calcul, programe scrise
în C++). Programarea pe obiecte se distinge de programarea clasică, prin viziunea asupra
obiectelor privite ca entităţi active, ca executanţi de comportamente la răspunsul diferitelor
mesaje.
Bazele de date orientate spre obiecte (sau mai simplu baze de date obiect) se disting de
bazele de date clasice prin faptul că obiectele de programare ale aplicaţiei sunt identice şi în
memorie şi pe disc. Bazele de date pe obiecte integrează în fapt două aspecte: structura
obiectelor, adesea complexe (de exemplu texte, grafice, imagini) şi comportamentul lor sub
formă de funcţii care pot fi stocate în bazele de date.
Sistemele de baze de date orientate spre obiecte permit programatorului să combine
tehnicile de programare C++ cu capacităţile bazelor de date astfel încât obiectele definite de
utilizator pot fi uşor stocate şi recuperate pentru procesare.
Programarea structurată, reprezentată prin limbaje ca Pascal, a fost concepută pentru
organizarea de programe complexe în asociere cu tratarea tuturor structurilor de date formale sau
reale care sunt manipulate.
Cu această orientare (vezi fig.1.1.), un program de aplicaţie are o parte structurată de date
(definită de tipuri şi variabile), o parte operaţională (definită prin proceduri) şi o parte de program
principal care apelează procedurile. În acelaşi timp o procedură poate fi un program cu tipuri şi
proceduri proprii.

Date Date

Operaţii Import/export Operaţii

Programe Programe

Fig.1.1. Programarea structurată

Această programare a fost bine adaptată în dezvoltarea aplicaţiilor complexe şi mai


evoluate. Ea are însă anumite limite atunci când structurile de date sau procedurile pot fi partajate
de diferite programe având în vedere ordinea de import/export şi că sunt date evoluate. În acest
caz, o modificare într-o structură de date se va repercuta în toate programele care le manipulează.
Programarea obiect răspunde acestei probleme prin încapsularea datelor şi operaţiilor pe
care le manipulează într-un singur obiect.
Programarea modulară permite regruparea procedurilor legate semantic în module care
importă sau exportă proceduri de la/către alte module. Această încapsulare de proceduri în
module uşurează reprezentarea structurilor aplicaţiilor.
Programarea pe obiecte se desfăşoară ca programarea modulară cu tipuri abstracte de
date, în scopul creării posibilităţii de încapsulare a structurilor de date. Ea favorizează reutilizarea
şi extensibilitatea aplicaţiilor.
Odată cu creşterea dimensiunii proiectelor software a devenit tot mai clar ca pentru a
controla complexitatea un rol substanţial îl joaca abstractizarea datelor [Boo94] si ca in acest
scop programarea structurata este ineficienta. In 1984 Shankar afirma ca: "Natura abstractizărilor
ce pot fi obţinute prin utilizarea procedurilor este adecvata descrierii operaţiilor abstracte, dar nu
este adecvata descrierii obiectelor abstracte. Aceasta este o carenta majora de vreme ce in multe
aplicaţii complexitatea obiectelor de date care trebuiesc manipulate contribuie substanţial la
complexitatea globala a problemei." S-a impus deci găsirea unui nou model de programare
capabile sa depăşească limitările programării structurate si care sa fie capabila sa realizeze
abstractizarea adecvata a datelor. Aşa s-a născut
clasa limbajelor bazate pe obiecte si apoi a celor orientate pe obiecte. Dintre acestea cele mai
răspândite sunt Ada si CLOS (bazate pe obiecte), respectiv Smalltalk, C++, Eiffel si mai de
curând Java (orientate pe obiecte). Elementul fizic de construcţie in aceste limbaje este modulul
care conţine o colecţie de clase si obiecte. Diferenţa fundamentala intre programarea structurata
si cea bazata/orientata pe obiecte poate fi formulata plastic astfel: "Daca procedurile si funcţiile
sunt verbe, iar blocurile de date sunt substantive, un program procedural este organizat in jurul
verbelor, in timp ce un program orientat pe obiecte este organizat in jurul substantivelor"[Boo94].
Astfel, un program orientat pe obiecte are puţine date globale, întrucât datele si operaţiile sunt
unite intr-un mod nou care face ca blocurile logice fundamentale ale sistemului sa nu mai fie
algoritmii, ci clasele si obiectele.

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