Cap. 2. Notiunile de baza ale programarii orientate obiect

Motto: "Procesul programarii are mai multe faze: se incepe cu definirea CONCEPTELOR, dupa care se trece la stabilirea RELATIILOR dintre ele. Abia dupa aceea se poate trece la scrierea codului" (Bjarne Stroustrup)


2.1. Premisele limbajelor orientate obiect

In ultimii ani, programarea orientata pe obiecte a devenit foarte populara, mai ales datorita avantajelor sale care ajuta dezvoltarii proiectelor actuale, ce devin din ce in ce mai complexe. Acest stil de programare duce la impartirea aplicatiilor in mai multe module, astfel incat cel ce dezvolta un modul nu trebuie sa cunoasca detaliile de implementare a altor module.
Nu in ultimul rand, trebuie sa amintim ca programarea orientata pe obiecte este un concept foarte natural. In lumea inconjuratoare, zi de zi, in orice moment, avem de-a face cu Obiecte. Imprejurul nostru sunt o multitudine de obiecte, interconectate intre ele, comunicand unele cu altele intr-un fel sau altul.
Domeniul in care acest stil de programare s-a dovedit cel mai util este dezvoltarea interfetelor utilizator si a aplicatiilor bazate pe acestea.

Programarea structurata este bazata pe ecuatia enuntata de Niklaus Wirth:

Structuri de date + Algoritmi = Program

Programarea structurata a fost o etapa ce a trebuit sa fie depasita, deoarece este deficitara in ceea ce priveste posibilitatea reutilizarii programelor, scalabilitatii si extinderii unor module de program, atribute de neinlocuit in realizarea aplicatiilor complexe. Principala deficienta a programarii structurate consta in tratarea separata a algoritmilor si a structurilor de date ce se prelucreaza. De obicei, in natura, o entitate este caracterizata atat printr-o structura, cat si printr-un anume comportament. In mod normal, obiectele evolueaza in timp, adeseori modificandu-si structura si functionalitatea.

2.2. Concepte fundamentale

Ideea de baza de la care pleaca programarea orientata obiect este de a grupa structurile de date cu operatiile care prelucreaza respectivele date. Un asemenea ansamblu poarta denumirea de obiect sau clasa. Proiectarea de programe utilizand clase se numeste programare orientata pe obiecte (OOP).
In mod frecvent, pentru structurile de date se utilizeaza denumirea de date membre sau campuri, iar pentru procedurile ce prelucreaza aceste date, termenul de functii membre sau metode.
In analogie cu ecuatia programarii structurate, se poate considera ca valabila urmatoarea relatie:

Date + Metode = Obiect

Acest ansamblu este bazat pe principiul fundamental al incapsularii datelor, conform caruia accesul la datele membre se poate face numai prin intermediul setului de metode asociat. Acest principiu determina o abstractizare a datelor in sensul ca un obiect este caracterizat complet de specificatiile metodelor sale, detaliile de implementare fiind transparente pentru utilizator. Acest aspect este hotarator in cazul proiectelor complexe, de dimensiuni mari, care nu pot fi realizate decat cu ajutorul unor echipe de programatori. Aplicatiile pot fi impartite cu usurinta in module, astfel ca cel ce dezvolta un modul nu trebuie sa cunoasca detaliile de implementare a celorlalte module. Consecintele imediate sunt scaderea timpului de dezvoltare a aplicatiilor, simplificarea activitatii de intretinere a modulelor, si cresterea calitatii programelor.
Privind limbajele orientate obiect ca o evolutie a limbajelor structurate, constatam ca notiunea de clasa este o generalizare a notiunii de structura de date. O clasa descrie un ansamblu de obiecte similare. Un obiect este asadar o variabila de un anumit tip clasa. In mod uzual, se foloseste exprimarea ca un obiect este instantierea unei clase.
Un alt concept important in cadrul programarii orientate obiect este cel de polimorfism, care se refera la posibilitatea de a opera cu mai multe variante ale unei functii, care efectueaza o anumita operatie in mod specific pentru anume obiecte.
Evolutia si ierarhizarea claselor de obiecte se bazeaza pe conceptul de mostenire. Astfel, procedeul numit derivare permite definirea unei noi clase (clasa derivata) pornind de la o clasa existenta (clasa de baza), prin adaugarea de noi date si metode, eventual redefinirea unor metode. Clasa derivata mosteneste de la clasa de baza structura de date si metodele aferente. Este posibila totodata si derivarea unei clase din mai multe clase de baza, aceasta operatie fiind denumita mostenire multipla.
Asadar, dintr-o clasa de baza pot fi derivate mai multe clase si fiecare clasa derivata poate deveni la randul ei o clasa de baza pentru alte clase derivate. Se poate astfel realiza o ierarhie de clase, care sa modeleze sisteme complexe. Construirea ierarhiei de clase constituie activitatea fundamentala de realizare a unei aplicatii orientate obiect, reprezentand in fapt faza de proiectare a respectivului sistem.

In capitolele urmatoare veti afla implementarea acestor concepte in limbajul C++.


Realizat de Dragos Acostachioaie, ©1997
http://www.biosfarm.ro/~dragos