Sunteți pe pagina 1din 10

Capitolul II.

Paradigma programării orientate pe obiecte

2.1. Drumul spre tehnologiile OO

Datorită dimensiunii tot mai mari a aplicaţiilor software, programele nu pot fi realizate
decît în echipă. Din acest motiv, proiectarea trebuie să urmeze strict nişte etape,
conform unei metodologii şi unui anumit model de abordare al acestui proces. Acest
model de abordare se numeşte paradigmă, iar diversele paradigme sînt descrise
sistematic de un domeniu ingineresc numit “Ingineria programării”. În cadrul acesteia
se propun diverse sistematizări ale analizei cerinţelor, proiectării, implementării,
testării şi întreţinerii programelor. Etapele acestea alcătuiesc ciclul de viaţă al
programelor.

Există deci diverse abordări ale proiectării. Una din aceste abordări este cunoscută de
programatorii în limbaje de nivel înalt uzuale (de ex. Pascal, C), ducînd la un stil de
proiectare oarecum natural, firesc: proiectarea structurată. Aceasta presupune
descompunerea unei probleme de sus în jos, prin înlocuirea fiecărei subprobleme cu
mai multe, mai simple, acestea la rîndul lor fiind descompuse mai departe, ş.a.m.d.,
pînă la nivelul instrucţiunilor. Aceasta se numeşte abordarea top-down. O altă
caracteristică esenţială este folosirea în program a structurilor de control fundamentale
(blocul de instrucţiuni, decizia, bucla) în exclusivitate. Limbajul PASCAL este ideal
pentru această structurare. Proiectarea structurată pune accent pe analiza funcţională,
adică pe stabilirea funcţiilor sistemului şi apoi descompunerea fiecăruia, prin abordare
top-down.

Dar cererea de software creşte exponenţial. La realizarea aplicaţiilor software, apar


probleme, spre exemplu :

 crearea unui program nou ia mult timp şi deci este costisitoare; prin schimbări
minore în cerinţele utilizatorului, fragmente mari de program trebuie rescrise;
 din pricina timpului îndelungat pentru dezvoltare, un program nou apare pe piaţă
poate prea tîrziu, după ce au apărut programe mai performante;
 programele noi conţin erori (bugs) care se manifestă în funcţionare;
 s-ar putea ca programul nou să nu corespundă cerinţelor utilizatorului întrucît
acesta şi proiectantul au avut puncte de vedere diferite şi nu au înţeles acelaşi
lucru prin specificaţiile stabilite de comun acord.

Rezultă că, cu cît creşte cererea de software, cu atît ar fi mai utilă :


2.1 - Drumul spre tehnologiile OO 29

 folosirea unor componente cît mai bine testate (astfel programele nu conţin
erori)
 alcătuirea rapidă a aplicaţiilor din componente existente (deci durata
dezvoltării se reduce)
 utilizarea unor componente cu o comportare cunoscută ajută la evitarea
neînţelegerilor la specificaţii.

Aceste observaţii stau la baza unei filosofii şi a unei reprezentări devenite clasice,
cunoscută sub numele de fîntîna software (Fig. 2.1) :

Fig. 2.1. Fîntîna software

Acest model sugerează tendinţa actuală, de diviziune a activităţilor specifice în


domeniu. Esenţa acestei reprezentări constă în aceea că există o tendinţă naturală de
împingere a efortului de proiectare super-calificată cît mai departe de utilizatori. O
elită de proiectanţi urmează să realizeze o mare varietate de componente şi
instrumentele asociate, pentru a le combina, realizînd astfel aplicaţii noi. De altfel, în
medie 80% dintr-o aplicaţie (chiar peste 90% cîteodată) constă din elemente de
interfaţă ale căror specificaţii sînt identice cu cele ale altor aplicaţii. De aceea, cu atît
mai mult se impune această abordare.

Plecînd de la considerentele de mai sus şi răspunzînd şi altor tendinţe de evoluţie


software, a apărut metodologia orientată spre obiecte (Object-Oriented - OO).
30 Paradigma programării orientate pe obiecte - 2

Aceasta “inversează” metodologiile funcţionale, fragile mai ales la reutilizare (la mici
schimbări ale cerinţelor trebuie restructurat masiv întreg sistemul). O abordare
orientată spre obiecte se focalizează pe obiectele din domeniul aplicaţiei, adică
entităţile independente care modelează realitatea. La aceste obiecte se stabilesc
ulterior proceduri de acces. Termenul “orientat spre obiecte” înseamnă organizarea
programului ca o colecţie de obiecte, fiecare înglobînd structuri de date şi avînd
asociat un anumit comportament. În programarea structurată, structurile de date şi
comportamentul entităţilor nu sînt conectate decît (relativ) slab.

2.2. Abordarea orientată pe obiecte (AOO)

A. Un obiect poate fi considerat o entitate care încorporează atît structuri de date


(denumite atribute) cît şi comportament (operaţii). Un obiect trebuie să aibă precizate
mai multe caracteristici :

 identitate : obiectul are o identitate discretă, care se distinge dintre alte


entităţi.

Exemple de obiecte particulare :

 căciula studentului
 o fereastră deschisă pe un calculator
 un triunghi desenat pe hîrtie

Se observă că obiectele la care ne referim se referă la modelarea


realităţii imediate (de ex. fereastra)

 clasificare: obiectele cu aceleaşi atribute şi operaţii se grupează în clase.


Fiecare obiect poate fi considerat ca o instanţă a unei clase.

Exemple de clase :

 căciulă
 fereastră
 triunghi

 polimorfism: aceeaşi operaţie (cu acelaşi nume) poate să aibă


comportament diferit în clase diferite, dar înrudite.
Exemple: a muta
 o căciulă
 o fereastră
 un triunghi
2.1 - Drumul spre tehnologiile OO 31

Implementarea concretă a unei operaţii într-o anumită clasă se numeşte


metodă (method)

 moştenire: atributele şi operaţiile se transmit de-a lungul claselor bazate pe


o relaţie ierarhică

Exemple: se pot defini clasele Triunghi_Isoscel şi Triunghi_Echilateral ca şi clase


derivate din clasa Triunghi şi care moştenesc din această clasă poziţia pe hîrtie,
respectiv operaţia a muta.

În realitatea imediată să ne imaginăm că un fiu moşteneşte de la părinte o casă, avînd


aceasta anumite caracteristici. Fiul mai adaugă încăperi noi casei. Ca urmare, casa
dobîndeşte, pe lîngă caracteristicile existente, altele noi. Aşa şi în ierarhia de clase:
există, dependent de direcţia de parcurgere a ierarhiei, clase-părinte şi clase-fiu.
Clasele-fiu moştenesc trăsăturile
claselor-părinte (deci toate structurile şi comportamentele) la care pot fi adăugate
altele noi.

B. Abordarea orientată spre obiecte foloseşte nişte concepte de bază:

 abstractizarea constă în focalizarea pe aspectele esenţiale ale unei entităţi.


Accentul, pentru un obiect, se pune pe ce este acesta şi pe ce trebuie să facă,
înainte de a stabili concret detaliile de implementare. De aceea, etapa esenţială
în crearea unei aplicaţii orientate spre obiecte este analiza şi nu
implementarea, care trebuie să devină aproape mecanică.

 încapsularea (ascunderea) informaţiei - constă în separarea aspectelor externe


ale unui obiect, care sînt accesibile altor obiecte, de aspectele de implementare
internă, care sînt ascunse celorlalte obiecte. Utilizatorul poate accesa doar
anumite atribute şi operaţii ale obiectului, numite publice, în timp ce alte
operaţii îi rămîn inaccesibile (numite private). Încapsularea este foarte
importantă atunci cînd se doreşte schimbarea implementării pentru anumite
operaţii, în scopul perfecţionării unui algoritm sau eliminării unor erori.
Încapsularea ne va împiedica să modificăm toate caracteristicile obiectului, iar
aplicaţiile nu vor avea de suferit

 “împachetarea” datelor şi a comportamentului în acelaşi obiect se referă


la faptul că un obiect conţine atît structuri de date cît şi operaţii şi este utilă
întrucît vom şti totdeauna cărei clase aparţine o metodă, chiar dacă există mai
multe operaţii cu aceeaşi denumire, în clase diferite.
Existenţa unor operaţii (metode) diferite, cu acelaşi nume, dar cu
comportament diferit, se numeşte polimorfism. Utilizatorul nu trebuie să se
32 Paradigma programării orientate pe obiecte - 2

preocupe care anume operaţie este apelată, întrucît compilatorul va face


această identificare, în funcţie de argumentele metodei apelate. Astfel, a muta
o Căciulă este diferit de a muta o Fereastră pe ecran, sau de a muta un
Triunghi pe hîrtie, de aceea nu poate exista confuzie: în funcţie de ce anume
trebuie mutat, operaţia îşi va cunoaşte clasa, deci şi implementarea.

 partajarea (sharing): aici înseamnă transmiterea aceloraşi structuri de date şi


respectiv operaţii, de-a lungul unor clase dintr-o ierarhie de clase, şi aceasta
are un efect benefic asupra economisirii de spaţiu (dacă o clasă moşteneşte o
altă clasă, atunci ea moşteneşte toate atributele şi operaţiile clasei de bază, iar
din punctul de vedere al codului, acestea sînt aceleaşi cu cele ale clasei de
bază şi nu copii ale lor).

Partajarea oferă posibilitatea reutilizării proiectării, în proiecte ulterioare.


Reutilizarea însă trebuie avută în vedere de la începutul proiectării, chiar dacă
implică un efort ceva mai mare. Beneficiile însă se recuperează din plin, în
timp.

 accentul pe structura de obiect, nu pe cea de procedură: în tehnicile


orientate spre obiecte, accentul cade pe înţelegerea sistemului din punctul de
vedere al descompunerii acestuia în entităţi (obiecte) şi al stabilirii relaţiilor
dintre acestea, deci pe ce este un obiect (spre deosebire de analiza funcţională
- sau procedurală - care pune accentul pe ce trebuie să facă). Mai important
decît a stabili ce face sistemul, în acest caz trebuie precizat cine face şi care
sînt relaţiile între cei care fac.

Folosirea concretă a unui obiect depinde în mare parte de implementarea concretă a


acestuia. În etapa de analiză, proiectantul caută să găsească diverse caracteristici
generale ale acelui obiect, fără a ţine seama de detaliile de implementare. Această
abordare este utilă în reutilizarea obiectelor în aplicaţii ulterioare, dar îngreunează şi
lungeşte analiza. Problema trebuie gîndită mai profund de la început cînd se
analizează toate cazurile şi astfel implementarea devine o muncă de rutină.

Exemplu: dacă avem clasa Triunghi, atunci este recomandabil să-i stabilim de la
început toate caracteristicile: coordonatele vîrfurilor, operaţii de desenare, translatare,
rotire, scalare, etc. chiar dacă nu toate acestea sînt necesare imediat, în aplicaţia
curentă. În acest mod este stimulată crearea bibliotecilor de clase.

2.3. Metoda OO versus metode clasice

După unii autori, o teorie ştiinţifică (Thomas Kuhn-“Structura revoluţiilor ştiinţifice”)


poate fi privită ca o paradigmă despre modul nostru de a privi lumea. O teorie
2.1 - Drumul spre tehnologiile OO 33

evoluează pentru a explica aparentele excepţii de la faptele explicate satisfăcător de


respectiva teorie, pînă se ajunge la un moment de criză, cînd excepţiile nu mai ajung
să fie explicate. În această situaţie, adepţii teoriei vechi adaugă noi caracteristici
eteroclite pentru a explica excepţiile, iar “reformatorii”, adepţii unor teorii noi,
construiesc un nou model. Pînă cînd noua teorie se maturizează şi ajunge să domine,
între cele două tabere nu există un dialog coerent. În această perspectivă adepţii
tehnicilor OO (TOO) îi privesc pe ceilalţi ca producînd sisteme greu de modificat sau
reparat, concentrîndu-se prea insistent pe eficienţa programelor, în timp ce tabăra
cealaltă consideră că TOO conduc spre programe mari şi lente.

În prezent, TOO s-au maturizat şi nu se mai pune problema unui conflict între adepţii
diverselor paradigme. Fiecare abordare are domeniul său predilect. Astfel, pentru
aplicaţii care trebuie să fie foarte rapide se mai scriu programe prin metode altele decît
OO. Pe de altă parte, performanţele aplicaţiilor nu mai depind semnificativ, relativ la
cerinţe, de aspectele structurale ale programelor, datorită creşterii performanţelor
sistemelor de calcul. De aceea, dezavantajul codului lent nu mai este important.

Într-o perspectivă simplificatoare, un program este considerat un sistem alcătuit dintr-


o “cutie neagră” avînd intrări, care suferă transformări, şi diverse ieşiri. În aceasta
abordare, două programe care traduc identic intrările în ieşiri, pot fi comparate doar
prin alte criterii referitoare la comportamentul programelor, spre exemplu după
dimensiuni tradiţionale ale programelor: corectitudine, tratarea erorilor şi excepţiilor,
eficienţa, portabilitatea şi independenţa de periferice. Există însă două dimensiuni de
apreciere care nu se referă la comportare: mentenabilitatea (proprietatea unui program
de a fi uşor de schimbat pentru a fi eliminate defecte) şi extensibilitatea (proprietatea
ca un program să poată fi modificat pentru a trata noi clase de intrări). Paradigma OO
este potrivită pentru a ajuta la îmbunătăţirea celor două calităţi non-comportamentale.
AOO nu refuză modelul cutiei negre dar reduce granularitatea (fineţea împărţirii în
“cutii negre”) de la program la obiect. Obiectele dintr-un program devin ele însele
cutii negre ce conţin informaţii şi prezintă o anumită comportare. Reprezentarea
datelor sau comportamentul unui obiect dat pot fi modificate independent.

În AOO criteriile de comportare a programului sînt doar o parte a criteriilor folosite.


Accentul este pus pe identificarea obiectelor şi pe modelarea acestor obiecte cu
comportarea lor şi cu relaţiile între ele. O abordare de felul acesta deplasează
modelarea comportării lumii la modelarea obiectelor existente în această lume şi a
comportării lor individuale, în sens “metafizic” clasic (Aristotel). Un programator care
implementează un program OO poate determina cît de uşor de întreţinut şi extins este
un program, prin aprecierea izolării obiectelor unele de altele şi prin aflarea a ce este
cerut pentru a adăuga un obiect nou.
34 Paradigma programării orientate pe obiecte - 2

REZUMAT

Modul de abordare al procesului de proiectare trebuie


să urmeze strict nişte etape, conform unei metodologii
şi unui anumit model de abordare. Aceasta este
paradigma.

Proiectarea structurată presupune descompunerea


unei probleme de sus în jos, prin înlocuirea fiecărei
subprobleme cu mai multe, mai simple, acestea la
rîndul lor fiind descompuse mai departe, ş.a.m.d., pînă
la nivelul instrucţiunilor. Aceasta se numeşte
abordarea top-down. O altă caracteristică esenţială
este folosirea în program a structurilor de control
fundamentale.

O abordare orientată spre obiecte se focalizează pe


obiectele din domeniul aplicaţiei, adică entităţile
independente care modelează realitatea. La aceste
obiecte se stabilesc ulterior proceduri de acces.
Termenul “orientat spre obiecte” înseamnă
organizarea programului ca o colecţie de obiecte,
fiecare înglobînd structuri de date şi avînd asociat un
anumit comportament. În programarea structurată,
structurile de date şi comportamentul entităţilor nu sînt
conectate decît (relativ) slab.

Un obiect poate fi considerat o entitate care


încorporează atît structuri de date (denumite atribute)
cît şi comportament (operaţii).
2.1 - Drumul spre tehnologiile OO 35

Un obiect trebuie să aibă precizate mai multe


caracteristici: identitate (obiectul are o identitate
discretă, care se distinge dintre alte entităţi),
clasificare (obiectele cu aceleaşi atribute şi operaţii se
grupează în clase; fiecare obiect poate fi considerat ca
o instanţă a unei clase), polimorfism(aceeaşi operaţie
poate să aibă comportament diferit în clase diferite),
moştenire (atributele şi operaţiile se transmit de-a
lungul claselor bazate pe o relaţie ierarhică).

Abordarea orientată spre obiecte foloseşte nişte


concepte de bază:
 abstractizarea constă în focalizarea pe aspectele
esenţiale ale unei entităţi;

 încapsularea informaţiei - constă în separarea


aspectelor externe ale unui obiect, care sînt
accesibile altor obiecte, de aspectele de
implementare internă, care sînt ascunse
celorlalte obiecte;

 “împachetarea” datelor şi a comportamentului


în acelaşi obiect se referă la faptul că un obiect
conţine atît structuri de date cît şi operaţii.
Existenţa unor operaţii (metode) diferite, cu
acelaşi nume, dar cu comportament diferit, se
numeşte polimorfism
36 Paradigma programării orientate pe obiecte - 2

 partajarea (sharing) înseamnă transmiterea


aceloraşi structuri de date şi respectiv
operaţii, de-a lungul unor clase dintr-o
ierarhie de clase;

 accentul pe structura de obiect, nu pe cea de


procedură.

Abordarea OO deplasează modelarea comportării


lumii la modelarea obiectelor existente în această
lume şi a comportării lor individuale.

Un programator care implementează un program


OO poate determina cît de uşor de întreţinut şi extins
este un program, prin aprecierea izolării obiectelor
unele de altele şi prin aflarea a ce este cerut pentru a
adăuga un obiect nou.
2.1 - Drumul spre tehnologiile OO 37

Întrebări pentru Capitolul II

Ce se înţelege prin paradigmă?

Care sînt caracteristicile principale ale programării


structurate?

Ce probleme apar atunci cînd se scriu programe de


dimensiuni mari?

Care este specificul programării orientate pe obiecte?

Ce este un obiect şi ce elemente are asociate?

Precizaţi care este relaţia între clase şi obiecte.

Ce se înţelege prin metodă?

Alegeţi trei obiecte şi asociaţi-le o metodă comună.

Consideraţi clasa Tren. Precizaţi pentru această clasă


cîteva clase care moştenesc de la clasa Tren o acţiune
(de exemplu mişcarea).

Definiţi încapsularea şi indicaţi care sînt avantajele


utilizării ei.

Care este avantajul partajării?

Analizaţi diferenţele care există între programarea


structurată şi cea orientată pe obiecte.

S-ar putea să vă placă și