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