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