|
Programarea orientata obiect
Orientarea obiect si-a manifestat prezenta in cateva domenii ale tehnologiei informatiei, cum ar fi:
- limbajele de programare,
- analiza si proiectarea sistemelor informatice,
- constructia sistemelor expert si chiar
- proiectarea bazelor de date.
Ideile de baza folosite in limbajele de programare orientate obiect pot fi identificate in vechile limbaje ALGOL 60 si SIMULA 67, care au introdus conceptele de incapsulare si de obiect soft.
Limbajul Smaltalk, propus de firma Xerox in anii 70, este prototipul limbajelor de programare orietate obiect simbolice, care folosesc obiecte, clase si proprietatea de mostenire.
Limbajele C++ produs de Bell Laboratories si Objective C al firmei Productivity Tools reprezinta extensii ale unor limbaje de succes.
Modelarea datelor de tip "entitate-relatie" si de tip semantic au anticipat metodele larg acceptate astazi ale orientarii obiect.
In prezent, conceptele, notatia si principiile pe care se bazeaza orientarea obiect, cum sunt:
obiectele,
clasele,
abstractizarea procedurilor si a datelor,
incapsularea,
mostenirea,
asociatia,
comunicatia prin mesaje.
Metodele de organizare (generalizarea, apartenenta..), au capatat o utilizare care depaseste granitele diferitelor domenii in care orientarea obiect isi are originile.
Aparitia orientarii obiect se datoreaza mai multor nevoi de rezolvare a nemultumirilor create de modul in care se proceda la rezolvarea diferitelor probleme folosind computerul.
Astfel, exprimarea inadecvata problemei: descrierea datelor in limbajele mai vechi este nepotrivita pentru majoritatea problemelor, deoarece nu permite oglindirea fireasca, nealterata a obiectelor din lumea reala (asa a aparut expresia orientare obiect).
Notiunea de obiect trebuie extinsa pentru a acoperi atat functionarea (ce stie sa faca obiectul?) cat si dependentele (cui apartine?, cu cine seamana?); obiectul trebuie descris arhitectural, prin proprietati care le exprima comportarea, detaliile structurale sau anumite similitudini.
De asemenea, entitatile complexe trebuie sa-si afle corespondent in datele compuse.
In lipsa unor mecanisme de limbaj care sa admita o asemenea abordare, majoritatea datelor se exprima prin tipuri numerice, iar corespondenta cu obiectele reprezentate se afla numai in mintea programatorului
O alta nemultumire era legata de lipsa de robustete: diversitatea datelor de prelucrat, dar si secventele de instructiuni se reduc toate la siruri de biti, posibilitatea aparitiei unei erori fiind destul de mare.
In limbajele evoluate, datele isi conserva individualitatea, deoarece sunt referite prin nume si nu prin adresa, iar compilatorului i se pot comunica prin declaratii corespondentele existente intre nume si natura datelor, astfel compilatorul "stie" ca pentru orice data intalnita, ce fel de marime reprezinta si ce fel de prelucrari (operatii) i se pot aplica, adica ii cunoste tipul, caracterizat prin doua multimi: a valorilor pe care le pot lua entitatile sale si a operatiilor care le sunt aplicabile.
Se produce o separatie mai clara intre diversele tipuri de date, prin repartizarea lor unei entitati unice, care le va descrie corespunzator si care le va permite sa faca anumite operatii.
Este deja primul pas catre constituirea conceptului de obiect soft, urmand sa apara si mijloacele prin care acesta va participa sau nu la anumite "actiuni" pentru realizarea unor scopuri bine definite; putem numi aceste mijloace limbajele de programare orientate (pe) obiect.
Limbajul de programare ALGOL a introdus abstractizari pentru instructiuni, iar Pascal pentru date.
Abstractizarea presupune extragerea esentei si ignorarea detaliilor.
Programatorul opereaza cu date definite conform aplicatiei, fara a tine seama de amanuntele reprezentarilor interne.
Ideea ascunderii informatiei, lansata cu peste un sfert de veac in urma de David Parnas (1972), s-a putut pune in aplicare abia dupa introducerea modulelor, prin combinarea abstractizarii cu controlul vizibilitatii: informatiile din partea de implementare se ascund (devin invizibile in afara prin izolarea totala a acestei parti), lasand vizibila doar interfata.
Deoarece lumea inconjuratoare este plina de entitati - numite simplu obiecte - care au atat proprietati descrise prin date, cat si comportari descrise prin metode, este firesc ca acestea sa fie tratate unitar.
Conceptul care permite tratarea unitara a obiectelor este clasa, introdus de Dahl (1966) in limbajul de programare SIMULA.
Datele abstracte au inceput sub forma de clasa, a aparut apoi notiunea de modul si apoi totul s-a restrans la notiunea de obiect, programatorii orientandu-se catre acesta din urma: programarea orientata obiect.
Datele unui domeniu sunt discretizate in entitati distincte si identificabile numite obiecte.
Obiect poate fi orice are sens in contextul unei anumite aplicatii (un paragraf intr-un document, o fereastra pe ecran, o piesa de sah.).
Obiectele se disting prin insasi existenta lor, si nu prin descrierea proprietatilor lor, ele putand fi concrete sau conceptuale.
Clasa este o abstractie care descrie un grup de obiecte cu proprietati similare, sub aspect semanatic, al comportarii sau al relatiilor cu alte obiecte.
Grupand obiectele in clase, se retin proprietatile importante pentru aplicatie si se ignora restul.
O entitate singura reprezinta o instanta de obiect, iar mai multe entitati similare reprezinta o clasa de obiecte.
O clasa difera de un obiect obisnuit prin faptul ca are in datele sale de instanta o tabela (instance method table), care defineste metodele la care instantele (obiectele) clasei raspund (tabela este importanta deoarece un obiect reactioneaza numai la metodele care sunt prevazute de clasa sa, fie introduse, fie mostenite de aceasta).
O operatie este o actiune efectuata de un obiect sau o transformare la care este supus acesta.
Aceeasi operatie se poate comporta diferit in clase diferite; de exemplu, operatia de mutare a ferestrelor pe ecran difera de mutarea pieselor de sah.
Metoda este o implementare particulara a unei operatii catre o anumita clasa.
Un operator polimorf poate avea mai multe metode de implementare, polimorfismul fiind foarte important, deoarece genereaza flexibilitate.
Cand se apeleaza o metoda a unui obiect, se prefera criteriile polimorfice tocmai pentru aceasta flexibilitate.
Atributele si operatiile pot fi partajate intre clase pe baza unei relatii ierarhice.
Clasele pot fi definite in mod general si apoi rafinate in sbclase din ce in ce mai detaliate.
Orice subclasa mosteneste (incorporeaza) proprietatile supraclasei, la care se adauga propriile sale proprietati apecifice.
Posibilitatea de a grupa proprietatile comune mai multor clase intr-o supraclasa unica, mostenind proprietatile, este unul din avantajele majore al orientarii obiect, deoarece redice masiv repetitia in proiecte si programe.
Reutilizabilitatea nu mai este o simpla anexa a programarii, ci devine o atitudine sistematica, care asigura claritatea conceptuala: deoarece diferite operatii sunt in esenta acelasi lucru se poate introduce procedeul refolosirii, reducandu-se numarul cazurilor care trebuie analizate si intelese.
Privita prin prisma orientarii obiect, o aplicatie este un obiect alcatuit dintr-o multime de obiecte care coopereaza.
In ultimii ani, orintarea pe obiect a depasit clar hotarele programarii si a patruns in fazele de modelare conceptuala, analiza, proiectare verificare a calitatii, intretinere, validare pentru aproape orice produs program de mare anvergura.
Un model este abstractia unei entitati, pentru a o intelege inainte de a o construi, abstractia referindu-se la examinarea selectiva a anumitor aspecte ale problemei, in functie de scopul urmarit (numai scopul poate arata ce este important si ce nu).
Importanta modelarii consta in urmatoarele aspecte:
- testarea unei entitati fizice inainte de a o construi,
- usurarea comunicarii cu beneficiarii,
- vizualizarea, care poate duce la nasterea unor idei noi,
- reducerea complexitatii, acesta fiind si rostul principal, care le cuprinde si pe celelalte,
intrucat permite operarea cu sisteme prea complexe pentru a putea fi intelese direct.
Deci rolul modelului este de a ajuta sa intelegem, sa asimilam. complexitatea unuisistem in intregul sau
Descompunerea problemei in subprobleme amplifica eficienta intelectului uman.
Putem spune ca orientarea obiect nu mai este doar o dominanta a programarii, ci s-a faurit ca o paradigma , strategie si mentalitate.
Chestionar
1. Cum este abordata problema scrierii programelor?
2. Ce este mediul de programare integrat?
3. Cum se defineste programarea declarativa?
4. Dar programarea bazata pe fluxul de date?
5. Cum a fost fundamentata programarea structurata?
6. Cum se defineste produsul program?
7. Cum se clasifica produsele program?
8. Care sunt domeniile de manifestare ale orientarii obiect?