Sunteți pe pagina 1din 5

10/6/13

Paradigma Obiect-Orientare; Clase i obiecte - WikiLabs

Paradigma Obiect-Orientare; Clase i obiecte


De la WikiLabs

Cuprins
1 Noiuni despre paradigme de programare 1.1 Programarea imperativ procedural 1.2 Programarea declarativ funcional 2 Programarea orientat obiect 2.1 Tipuri de date 2.1.1 Structura n C 2.1.2 Clasa i obiectul

Noiuni despre paradigme de programare


De la inventarea mainilor de calcul, lupta pentru performa i avans tehnologic s-a dat pe dou fronturi. Pe de o parte prin mbuntirea performaelor hardware-ului, prin creterea frecveei, a numrului de core-uri, a memoriei disponibile i a complexitii setului de instruciuni, iar pe de alt parte, prin gsirea de noi metode de programare eficient a algoritmilor. Aceste metode noi nu nsemn exclusiv limbaje noi, cu toate c dac urmrim evoluia acestora n ultimii ani, vom observa o cretere semnificativ, att ca numr, ct i ca varietate. De ce apar n continuare limbaje noi, dac exist deja un numr att de mare? Exist mai multe motive, dar cel principal const n apariia unor funcionaliti noi, care trebuie exprimate n moduri care nc nu exist (spre exemplu acceleratoarele SIMD - Single Instruction Multiple Data sunt greoi de programat folosind C, deoarece limbajul nu are suport pentru tipuri de date vectoriale). Dar apariia limbajelor noi mai este influenat de un lucru, i anume apariia unor noi paradigme. Paradigma de programare (http://en.wikipedia.org/wiki/Programming_paradigm) se refer la modul n care este descris un algoritm. Sigur, prin descriere nu ne referim la modul n care se fac adunrile sau nmulirile sau la limbajul n sine, ci la un nivel mai nalt, i anume la cum sunt structurate datele, i la legtura dintre structurile de date i secvenele de program care acioneaz asupra lor. Exist un numr relativ mic de paradigme de programare, i vom numi imediat nite exemple, dar e important de reinut c nu se poate spune c una este sau nu mai bun dect cealalt, ci, ca i n cazul limbajelor de programare, fiecare este optim pentru anumite clase de aplicaii.

Programarea imperativ procedural


Programarea imperativ (http://en.wikipedia.org/wiki/Imperative_programming) descrie un algoritm la nivel de instruciune care modific starea programului. Programarea procedural structureaz aceste instruciuni pe secvene distincte, numite proceduri sau funcii (a nu se confunda totui cu programarea funcional), care acioneaz asupra unor structuri de date globale, vizibile tuturor procedurilor, dar locale, vizibile fiecrei proceduri n parte. Ca exemplu de limbaj de programare procedural este C-ul original (nu C++). Programele scrise n C sunt construite din funcii (care pot lua argumente i calcula i ntoarce valori) i date globale.
dcae.pub.ro/wikilabs/index.php/Paradigma_Obiect-Orientare;_Clase_i_obiecte 1/5

10/6/13

Paradigma Obiect-Orientare; Clase i obiecte - WikiLabs

Programarea procedural se folosete pe scar larg n programare la nivel foarte jos (kernel, sistem de operare, embedded), deoarece C-ul ofer control absolut asupra resurselor hardware, i se potrivete foarte bine cu modul n care procesorul execut programul. Pe de alt parte, n cazul aplicaiilor la nivel nalt, cum ar fi editoare de text, aplicaii client - server, simulatoare, programe de sintez, etc., acolo unde se scrie o cantitate enorm de algoritmi, faptul c programarea procedural nu ofer o structurare a datelor i o legtur ntre date i procedurile care le folosesc, o face foarte greu de folosit. n aceste cazuri apar probleme de securitate, probleme de memorie, probleme de mentenan i dezvoltare ulterioar, etc.

Programarea declarativ funcional


Programarea funcional (http://en.wikipedia.org/wiki/Functional_programming) se refer la stilul i limbajele de programare n care computaia se trateaz evalund expresii matematice. Spre deosebire de programarea imperative, unde apar stri i variabile, programarea funcional pe bazeaz pe un sistem formal numit lambda-calcul (http://en.wikipedia.org/wiki/Lambda_calculus) , care descrie un program sub forma compunerii unor funcii matematice. Unul din primele limbaje funcionale este Lisp (http://en.wikipedia.org/wiki/Lisp_(programming_language)) .

Programarea orientat obiect


Programarea orientat obiect (http://en.wikipedia.org/wiki/Object-oriented_programming) are ca punct de plecare programarea procedural, n sensul c se bazeaz tot pe noiunile de stare i variabile, dar introduce o serie de concepte care ajut la structurarea programelor: clase i obiecte; ncapsulare; polimorfism; motenire. Majoritatea acestor noiuni vor fi prezentate n pagina noiuni avansate de programare obiect-orientat;

Tipuri de date
Structura n C Plecnd de la limbajul C, ne amintim c acesta pune la dispoziie o serie de tipuri de date primitive, incluse n standardul limbajului. Ca exemple, avem: int , long, char, double, etc. n plus, exist posibilitatea de a crea structuri compuse folosind cuvntul cheie struct (http://en.wikipedia.org/wiki/Struct_(C_programming_language)) . O structur n C este compus din una sau mai multe variabile care pot fi ori de tip primitiv, ori alte structuri. n continuare avem un exemplu de definiie a unor structuri n C. s t r u c ts t r i n g { c h a r *s t r ; u n s i g n e dl e n g t h ;
dcae.pub.ro/wikilabs/index.php/Paradigma_Obiect-Orientare;_Clase_i_obiecte 2/5

10/6/13

Paradigma Obiect-Orientare; Clase i obiecte - WikiLabs

} ; s t r u c tp e r s o n { s t r u c ts t r i n g* f i r s t _ n a m e ; s t r u c ts t r i n g* l a s t _ n a m e ; u n s i g n e da g e ; f l o a th e i g h t ; f l o a tw e i g h t ; } ; Se vede c structura person conine pointeri la dou structuri de tip string. Relaia este descris de schema bloc urmtoare (cu exemple de valori pentru variabilele primitive):

n continuare, vom da un exemplu de utilizare a acestor structuri: # i n c l u d e < s t d i o . h > # i n c l u d e < s t d l i b . h > # i n c l u d e < s t r i n g . h > i n tm a i n ( ) { / / m a k ead e f a u l ts t r i n gw i t hn oc o n t e n ta n dl e n g t h=3 0 s t r u c ts t r i n g*s o m e _ s t r i n g=( s t r u c ts t r i n g * ) m a l l o c ( s i z e o f ( s t r u c t u n s i g n e dd e f a u l t _ l e n g t h=3 0 ; s o m e _ s t r i n g > l e n g t h=d e f a u l t _ l e n g t h ; s o m e _ s t r i n g > s t r=( c h a r * ) m a l l o c ( d e f a u l t _ l e n g t h*s i z e o f ( c h a r ) ) ; s t r c p y ( s o m e _ s t r i n g > s t r ," V a s i l e " ) ;

/ / m a k eap e r s o ns t r u c t u r ei nw h i c ha l ls t r i n g sr e f e rt ot h ed e f a u l te m s t r u c tp e r s o n *n e w _ p e r s o n=( s t r u c tp e r s o n * ) m a l l o c ( s i z e o f ( s t r u c tp e r s o n e w _ p e r s o n > f i r s t _ n a m e=s o m e _ s t r i n g ; n e w _ p e r s o n > l a s t _ n a m e=s o m e _ s t r i n g ; n e w _ p e r s o n > a g e=2 9 ; n e w _ p e r s o n > h e i g h t=( f l o a t ) 1 . 7 ;
dcae.pub.ro/wikilabs/index.php/Paradigma_Obiect-Orientare;_Clase_i_obiecte 3/5

10/6/13

Paradigma Obiect-Orientare; Clase i obiecte - WikiLabs

n e w _ p e r s o n > w e i g h t=6 8 . 9 F ;

p r i n t f ( " P e r s o a n as en u m e s t e% s% s ,a r ev a r s t ad e% da n i ,i n a l t i m e a% f n e w _ p e r s o n > l a s t _ n a m e > s t r , n e w _ p e r s o n > a g e , n e w _ p e r s o n > h e i g h t , n e w _ p e r s o n > w e i g h t ) ; r e t u r n0 ; }

n acest exemplu, schema bloc este diferit dintr-un punct de vedere esenial: ambii pointeri de tip string sunt referin la aceeai adres, respectiv la acelai string. Astfel, dac se modific new_person->first_name, atunci implicit se modific i new_person->last_name (de fapt este aceeai structur):

Pentru a face un rezumat, structura, in C, este un tip de dat compus din tipuri primitive, sau alte structuri. Analog cu orice alt tip de dat, se pot defini variabile de tipul structurii, aa cum se pot defini variabile de tip primitiv. Limitarea fundamental a structurilor este c acestea nu pot conine dect date , nu i funcii. Astfel se introduce noiunea de clas. Clasa i obiectul Atenie: Clasa este o structur care poate conine variabile, numite cmpuri ale clasei, i funcii, numite metode are clasei. Cmpurile i metodele sunt membrii clasei.

Atenie: Metodele unei clase acioneaz asupra cmpurilor clasei.

Atenie: Clasa este un tip de dat. Datele de tipul clasei se numesc obiecte . Obiectele sunt instane ale clasei. Astfel, cnd se creeaz un obiect nou, se mai spune c se instaniaz un obiect de tipul clasei respective. Adus de la http://dcae.pub.ro/wikilabs/index.php/Paradigma_Obiect-Orientare;_Clase_%C8%99i_obiecte Ultima modificare efectuat la 07:08, 17 iulie 2012.
dcae.pub.ro/wikilabs/index.php/Paradigma_Obiect-Orientare;_Clase_i_obiecte 4/5

10/6/13

Paradigma Obiect-Orientare; Clase i obiecte - WikiLabs

Coninutul este disponibil sub Public Domain.

dcae.pub.ro/wikilabs/index.php/Paradigma_Obiect-Orientare;_Clase_i_obiecte

5/5