Documente Academic
Documente Profesional
Documente Cultură
Curs03 - Introducere in POO
Curs03 - Introducere in POO
Fig.1
2) Codul scris n C este extrem de portabil. C-ul a fost iniial destinat pentru a scrie sisteme de
operare. De exemplu sistemul de operare Unix a fost scris n C i el funcioneaz pe foarte
multe procesoare diferite i configuraii hardware diverse. Practic acest sistem de operare se
compileaz i se execut pe o mare diversitate de maini de calcul, arhitecturi i procesoare,
fr nicio modificare sau, pe alocuri, cu foarte puine modificri ale codului-surs. Acest
lucru este valabil i pentru aplicaiile scrise n C.
3) Limbajul n sine este relativ mic i simplu, dar foarte puternic. Simplitatea lui ns e
amgitoare. El i ofer un acces att de mare la maina de calcul nct se poate spune c e
foarte flxibil, bogat i puternic.
C-ul este un limbaj de nivel sczut. Acest lucru nseamn c el se apropie foarte mult de
maina de calcul. Nu are foarte multe funcionaliti dar se compileaz ntr-un cod rapid i
eficient. De aceea i acum, dup mai bine de 40 de ani, oamenii continua s foloseasc C.
C-ul este un limbaj imperativ. Acest lucru nseamn c pentru a scrie codul se utilizeaz
instruciuni. Subrutinele se numesc funcii i argumentele acestora se transmit totdeauna prin
valoare.
C-ul este un limbaj procedural structurat orientat pe blocuri. Acest lucru nseamn c tot
codul este scris n blocuri i blocurile sunt structurate pentru a mri claritatea programelor.
C-ul este un limbaj puternic tipizat. Acest lucru nseamn c fiecare variabil trebuie s aib
un anumit tip declarat. Declaraiile de tip sunt analizate n timpul compilrii i nu se pot
modifica pe parcursul duratei de via a variabilelor respective. Avantajul unui limbaj puternic
tipizat este faptul c performana este mult mbuntit n comparaie cu limbaje similare de
programare tipizate dinamic. ntr-un sistem tipizat dinamic puterea de procesare n timpul
execuiei este utilizat pentru a determina tipul unei variabile i pentru a creea copii de lucru
cu structurile de date adecvate pentru fiecare variabil i apoi se repet aceste aciuni cnd
variabila se modific. Prin determinarea tipului variabilei la compilare toate aceste aciuni
enunate mai sus sunt eliminate.
Succesul extraordinar pe care l are limbajul C++ a fost asigurat de faptul c s-a folosit de cel mai
popular limbaj al momentului, C.
C++ este un limbaj de uz general foarte puternic i flexibil, care permite programarea n mai
multe paradigme, cum ar fi paradigma orientat-obiect, cea procedural, funcional i programare
generic. Aa cum s-a mai spus, C++ extinde limbajul C, adugnd multe facilitate puternice, dar
meninnd n acelai timp eficiena i utilitatea C-ului. Aceasta l face s fie i astzi, dup mai bine
de 30 de ani, unul din cele mai rspndite limbaje de programare din lume.
Dac privim la nivelurile de tehnologie ale unui computer ca la o stiv, C++ este folosit
pentru a scrie cod la toate nivelurile cu excepia firmware-ului, avnd cea mai larg utilizare la
nivelul aplicaiilor (Fig.2).
Fig. 2
Astzi un numr mare de aplicaii pe scar medie i larg sunt scrise n C++. Lista unor astfel
de aplicaii este foarte vast, i include Microsoft Office, Adobe Photoshop, Illustrater, FireFox,
Google Chrome, sisteme de aprovizionare, service i eviden a plilor pentru telefonie i internet,
chiar i site-uri web renumite, ca Amazon, Facebook i Google sunt scrise integral n C++ sau au
resurse back-end semnificative scrise n C++. Sisteme de operare cum ar fi toate versiunile de
Windows ncepnd cu 1.0, pri din Unix care nu sunt scrise n C, pri mari din OS10 (alte pri
fiind n Objective C, care e la rndul su bazat pe C). De fapt majoritatea celorlalte limbaje de
programare, cum ar fi Java, PHP, Python i Pearl sunt scrise n C sau C++.
Un program conceput conform unei metode procedurale pune accentul pe algoritmii care
transform datele iniiale ale unei probleme n rezultate.
Algoritmii sunt structurai n subprograme crora li se furnizeaz date sub form de
parametri sau care acceseaz datele respective prin intermediul unui fond global comun
(fig.3).
Fig. 3
prelucreaz. De obicei, n natur, o entitate este caracterizata att printr-o structur, ct i printr-un
anume comportament. n mod normal, obiectele evolueaz n timp, adeseori modificndu-i structura
i funcionalitatea.
Fig. 4.
5
n ultimii ani, POO a devenit foarte rspndit, mai ales datorit avantajelor sale, care ajut
dezvoltrii proiectelor actuale, ce devin din ce n ce mai complexe. Acest stil de programare duce la
mprirea aplicaiilor n mai multe module, astfel nct cel ce dezvolt un modul nu trebuie s
cunoasc detaliile de implementare a altor module. Domeniul n care acest stil de programare s-a
dovedit cel mai util este dezvoltarea interfeelor utilizator i a aplicaiilor bazate pe acestea.
Limbaje OO utilizate astzi pe scar larg sunt foarte multe la numr, ncepnd cu C++,
Objective-C, C#, Visual Basic.NET, VBScript, F#, Visual FoxPro, Visual Prolog, Java, Perl ncepnd
cu versiunea 5, PHP5, Python, ABAP .a.
clasa Stiva{
*fie tab un tablou cu elemente de tip
int
*fie dimTab o variabila de tip int
*fie indTab o variabila de tip int
operatia initStiva(nrElem){
*aloca spatiu in tab pentru nrElem
elemente
dimTab = nrElem;
indTab = -1;
-- se considera ca indicele
primului element din tablou este 0
unTab[indTab] = elem;
--
}
else
}
*semnaleaza eroare - depasire
capacitate stiva
operatia push(elem){
if (indTab < dimTab-1){
indTab = indTab + 1;
tab[indTab] = elem;
}
else
*semnaleaza eroare depasire capacitate stiva
}
}
subprogram int pop(unTab, dimTab, indTab){
if (indTab >= 0){
indTab = indTab - 1;
return unTab[indTab+1];
}
else
*semnaleaza eroare - stiva
vida
}
...
e1 = call s1.pop( );
e2 = call s2.pop( );
}
} -- end clasa Client --
Comparnd cele dou secvene de mai sus, un prim aspect care trebuie remarcat este faptul c
n varianta procedural am definit un set de operaii reprezentate ca subprograme, care primesc ca
parametri stivele asupra crora lucreaz, n timp ce n varianta obiectual, operaiile sunt nglobate n
interiorul unui obiect reprezentnd stiva. Pot s am oricte obiecte de acest fel, fiecare din ele va avea
setul su propriu de operaii care vor lucra asupra datelor interne ale obiectului. Din acest motiv
operaiile nu necesit atia parametri, ca n varianta procedural. Cu alte cuvinte: n varianta
procedural operaiile (subprogramele) sunt deintoarele datelor asupra crora lucreaz, n timp
ce n varianta obiectual datele (obiectele) sunt cele care posed operaiile.
O alta observaie important este faptul c simbolul Stiva definit ca o clas este de fapt un tip
definit de utilizator. Ca orice tip, el poate fi folosit pentru a declara variabile asupra crora se vor
aplica operaii recunoscute de tipul respectiv.
Pentru a nelege mai bine, s ne gndim ce este un tip dintr-un limbaj de programare:
Un tip este o mulime de valori dotat cu un anumit set de operaii.
n majoritatea limbajelor procedurale suntem obinuii s lucrm cu aa-numitele
tipuri predefinite sau primitive. Spre exemplu, tipul int din limbajul C desemneaz mulimea
numerelor ntregi reprezentabile pe 2 octei. Setul de operaii cu care este dotat acest tip cuprinde,
printre altele, cele patru operaii aritmetice.
De multe ori tipurile predefinite sunt prea srace pentru a permite modelarea unor entiti
complexe din lumea real. De aceea, este necesar ca programatorul s aib libertatea de a-i crea
propriile tipuri (mpreuna cu operaiile aferente) pe care apoi s le foloseasca la fel cum folosete
tipurile predefinite. Limbajele de programare obiectuale au fost concepute tocmai n acest sens.
Tot pe marginea celor dou exemple prezentate, ar trebui spus c n varianta obiectual
programatorul este ajutat s evite o serie ntreag de erori, datorit ncapsulrii datelor i operaiilor
caracteristice unei abstraciuni (n cazul nostru stiva) n interiorul unui obiect. Spre exemplu, n
varianta procedural, programatorul poate la un moment dat s modifice accidental, printr-o atribuire
simpl, valoarea lui ind1, dnd astfel peste cap stiva respectiv. n cealalt variant, aa cum vom
vedea pe parcurs, datele din interiorul unui obiect pot fi declarate ca ascunse fa de exteriorul
obiectului, astfel nct modificarea indicatorului de stiv s nu se poat face dect via
operaiile push i pop, adic ntr-un mod controlat.
fiecare obiect este o instan a unei clase. Clasa este o descriere a unei mulimi de obiecte
caracterizate prin structur i comportament similare, iar prin instan nelegem o
valoare particular din mulimea respectiv
clasele sunt legate ntre ele prin relaii de motenire.
Un limbaj de programare care ofer suport pentru utilizarea claselor i a obiectelor, dar care
nu are implementat mecanismul relaiilor de motenire ntre clase este un limbaj de programare bazat
pe obiecte. Programarea bazat pe clase i pe obiecte, care nu face uz de relaia de motenire se mai
numete programare cu tipuri de date abstracte.
10