Informatica
Programarea pe obiecteProgramarea pe obiecte Scurt istoric In anul 1970, doi programatori, Brian Kerninghan si Dennis Ritchie, au creat limbajul C. Principalul scop pentru care a fost realizat acest limbaj este rescrierea sistemului de operare UNIX, pentru a-l face portabil pe toate platformele existente. Marele avantaj al limbajului C este acela de a fi extrem de flexibil si de a permite atat programarea la nivel inalt cat si la nivel scazut. C-ul este un limbaj procedural, asadar un program scris in C incepe de obicei cu definirea structurilor de date, apoi definirea functiilor pentru lucrul cu aceste structuri. Cresterea complexitatii programelor a dus la necesitatea elaborarii unor alte tipuri de limbaje. Astfel, destinate inteligentei artificiale, au aparut limbajele care au la baza notiunea de 'cadru' si cele care pleaca de la ideea de 'actor'. Primele implementeaza operatii asupra unor modele de entitati; celelalte presupun faptul ca obiectele nu sunt simple elemente pasive asupra carora se fac anumite prelucrari, ci, dimpotriva, ca menirea acestor obiecte consta in a realiza prelucrarile asupra lor insile. De aici a pornit ideea de a grupa structurile de date cu operatiile care prelucreaza respectivele date. Astfel s-a nascut notiunea de obiect sau clasa. Proiectarea de programe utilizand clase se numeste programare orientata pe obiecte (OOP). Primele limbaje orientate pe obiecte au fost SIMULA (1965) si SIMULA-2 (1967). In anii '70 a aparut si celebrul limbaj SMALLTALK. Cel mai mare dezavantaj al lor a fost faptul ca au aparut ca limbaje de sine statatoare, avand o raspandire relativ redusa. Din acest motiv, putin programatori erau dispusi in acea vreme sa renunte la limbajele consacrate doar pentru a lucra obiectual. In anul 1980, Bjarne Stroustrup a conceput limbajul 'C with Classes'. Acest limbaj a dus la imbunatatirea C-ului prin adaugarea unor noi facilitati, printre care si lucrul cu clase. In vara 1983, C-with-classes a patruns si in lumea academica si a institutiilor de cercetare. Astfel, acest limbaj a putut sa evolueze datorita experientei acumulate de catre utilizatorii sai. Denumirea finala a acestui limbaj a fost C++. Succesul extraordinar pe care il are limbajul C++ a fost asigurat de faptul ca a extins cel mai popular limbaj al momentului, C. Programele scrise in C functioneaza si in C++, si ele pot fi transformate in C++ cu eforturi minime. Cea mai recenta etapa in evolutia acestui limbaj o reprezinta limbajul JAVA, realizat de firma SUN, care nu este altceva decat un limbaj C++ putin modificat si extins. Interesanta este urmatoare afirmatie a lui Stroupstrup: 'utilizatorii au inceput sa foloseasca C++ inainte ca specialistii sa aiba timpul necesar sa-i instruiasca pentru a-l folosi cu randament maxim'. Intr-adevar, s-a constatat ca mare parte dintre compilatoarele de C++ existente nu sunt folosite decat pentru dezvoltarea de software structurat, si nu orientat pe obiecte (altfel spus, se lucreaza in C pe un compilator de C++). Programatorii au descoperit ulterior ca aplicatiile orientate pe obiecte sunt mai usor si mai rapid de scris, si nu in ultimul rand mai usor de inteles. De ce este asa, veti afla in capitolul urmator. Notiunile de baza ale programarii orientate obiect 1) Notiunile de obiect si metoda Ideea de obiect are la baza o notiune mai simpla, deja cunoscuta,si anume aceea de inregistrare(record).Asa cum stim, o inregistrare este o colectie de date, de tipuri diverse, pe care programatorul le reuneste sub un singur nume conform unor anumite scopuri.Spre deosebire de inregistrari, obiectele pot contine, pe langa date, functii si proceduri.
Una dintre cele mai simple definitii de obiect este urmatoarea: type complex=object re,im:real; function modul:real; end; function complex.modul:real; begin modul:=sqrt(sqr(re)+sqr(im)); end; Notiunea de obiect reprezinta un concept superior celui de inregistrare prin faptul ca poate contine atat date(variabile)cat si metode. Metodele sunt functii sau proceduri care fac parte din definitia obiectului si care sunt concepute de programator in asa fel incat sa reprezinte cat mai bine o anumita notiune. Metodele au acces la membrii obiectului in mod implicit. Parametrii formali ai metodelor nu pot coincide cu variabilele cuprinse in definitia obiectului. Functiile membre ale unui obiect prelucreaza datele membre ale obiectului care apeleaza metoda. 2) Metoda constructor Aceasta metoda este o metoda in sens obisnuit, care pote fi inclusa in definitia obiectului. La fel ca si alte metode, ea poate avea sau nu parametrii. Definitia unui obiect in Pascal reprezinta un tip de date creat de utilizator(programator) conform propriului scop. Definitia unui obiect este cuprinsa intre cuvintele rezervate ale limbajului object si end. Un obiect poate contine date (variabile) si metode (functii sau proceduri). Metodele sunt "anuntate" in definitia tipului de obiect si sunt descrise explicit in exteriorul acesteia. Metodele au acces implicit la restul membrilor obiectului. Metodele (functii sau proceduri) pot avea parametrii formali dar acestia trebuie sa difere de datele membre ale obiectului. 3) Incapsulare Proprietatea obiectelor, prin care intr-o singura definitie sunt incluse date si metode, poarta numele de incapsulare. Un unit este descris printr-un text sursa obisnuit in limbajul Pasca, intr-un fisier cu extensia pas si avand numele ales exact la fel cu cel al unit-ului pe care vrem sa il cream. Iata care sunt regulile care trebuiesc respectate: 1) Prima linie contine numele pe care vrem sa-l dam unit-ul . 2) Inainte de prima definitie trebuie plasat cuvantul interface. 3) Dupa interface pot fi plasate directive uses cu sensul cunoscut, de utilizare a unor anumite functii, definitii sau proceduri. 4) Urmeaza definitiile tipurilor de obiecte. 5) Sectiunea care continedefinitia sau definitiile de obiecte, se incheie prin cuvantul implementation. 6) Urmeaza descrierea proriu-zisa a metodelor. 7) In final, intre begin si end pot fi plasate instructiuni prin care, de exemplu, pot fi atribuite valori unor variabile anterior definite in unit-ul respectiv. 8) Intr-un unit pot fi incluse si alte definitii de functii sau proceduri, fara legatura cu tipul object, respectand conditia de anuntare a antentului in sectiunea interface si descrierea completa in sectiunea implementation. 4) Mostenire Procesul de mostenire isi justifica denumirea chiar prin sensul originar al cuvantului. Vom vorbi despre stramos si urmasi.Urmasii preiau caracteristici ale stramosilor dar le pot modifica sau pot adauga achizitii noi. Mostenirea reflecta preluarea tuturor datelor si metodelor unui stramos la care se pot aduga alte date si metode noi, rezultand un urmas. Metodele mostenite pot fi modificate de urmas. 5) Polimorfism 5.1 Rescrierea metodelor Urmasii pot modifica metodele mostenite.Simpla reanuntare a metodei in definitia urmasului conduce la inlocuirea metodei mostenite cu una noua. Obiectul de tip punct va contine pe langa cele doua date ,urmatoarele metode : constructor,distanta pana la origine si afisare. Metoda constructor init are doi parametrii ale caror valori se transfera coordonatelor, cu alte cuvinte, prin initializare, specificam coordonatele punctului. Metoda ro furnizeaza distanta pana la origine cu formula deja cunoscuta iar metoda de afisare afiseaza punctul in forma (x,y).
Numim poliformism , acea prorpietate prin care o functie apelanta prin acelasi nume, poate avea actiuni diferite de la stramos la urmas. 5.2 Concepte rafinate:inherited,virtual si self Poliformismul prezentat in sectiunea anterioara are in limbajul Pascal doua rafinari extrem de interesante, pe care le vom prezenta separat. In cele ce urmeaza vom ilustra o caracteristica a programarii pe obiecte in acest limbaj, si anume posibilitatea ca o functie mostenita dar modificata de catre urmas sa fie totusi accesibila. Metodele virtuale sunt acele metode care se asociaza obiectului la momentul executiei.
|