Sunteți pe pagina 1din 20

Motto: Any fool can write code that a computer can understand.

Good programmers write code that humans can understand. Martin Fowler

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

Lucrare ap arut a cu sprijinul CNCSIS, Grant AT 329840/2004.

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

Cuprins
1 Introducere n programarea orientat a pe obiecte 1.1 Primii pa si n programarea orientat a pe obiecte . . . 1.1.1 Abstractizarea . . . . . . . . . . . . . . . . . 1.1.2 Interfat a . . . . . . . . . . . . . . . . . . . . . 1.1.3 Ascunderea informat iei . . . . . . . . . . . . 1.1.4 Incapsularea . . . . . . . . . . . . . . . . . . 1.2 Primii pa si n Java . . . . . . . . . . . . . . . . . . . 1.2.1 Comentariile . . . . . . . . . . . . . . . . . . 1.2.2 Identicatori, tipuri primitive si declararea de 1.2.3 Expresii si operatori . . . . . . . . . . . . . . 1.2.4 Tip arirea la ie sirea standard . . . . . . . . . . 1.2.5 Instruct iuni de control . . . . . . . . . . . . . 1.2.6 Primul program . . . . . . . . . . . . . . . . . 1.3 Exercit ii . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 13 14 15 16 16 17 17 18 19 21 23 24 25 26 26 27 27 27 31 31 33 35 37 38 38 39

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

2 Clase si Obiecte 2.1 Clase si obiecte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Ce este un obiect? Ce este o clas a? . . . . . . . . . . . . . . 2.1.2 Denirea unei clase . . . . . . . . . . . . . . . . . . . . . . . 2.1.3 Crearea unui obiect . . . . . . . . . . . . . . . . . . . . . . 2.2 Referint e la obiecte . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Component a unei clase . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Specicatori de acces . . . . . . . . . . . . . . . . . . . . . . 2.3.2 Constructori . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.3 Membri statici . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.4 Constante . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Convent ii pentru scrierea codului surs a. . . . . . . . . . . . . . . . 2.5 Notat ii utilizate pentru descrierea programelor orientate pe obiecte 2.6 Exercit ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

8 3 Transmiterea mesajelor 3.1 Supra nc arcarea metodelor . . . . . . . . . . . . . . 3.1.1 Supra nc arcarea constructorilor . . . . . . . 3.1.2 Supra nc arcarea si tipurile de date primitive 3.2 Transmiterea parametrilor . . . . . . . . . . . . . . 3.3 Cuv antul cheie this . . . . . . . . . . . . . . . . . . 3.4 Metodele clasei Object . . . . . . . . . . . . . . . . 3.4.1 Compararea obiectelor . . . . . . . . . . . . 3.4.2 Metoda toString . . . . . . . . . . . . . . . 3.4.3 Eliberarea memoriei ocupate de obiecte . . 3.5 Exercit ii . . . . . . . . . . . . . . . . . . . . . . . . 4 C ateva clase Java predenite 4.1 Clasa String . . . . . . . . . . . . . . . . . . . 4.1.1 S irul de caractere n Java . . . . . . . 4.1.2 Operat ii cu siruri de caractere . . . . . 4.1.3 Alte metode denite de clasa String . 4.2 Clase nf a sur atoare . . . . . . . . . . . . . . . 4.2.1 Orice ar putea obiect . . . . . . . . 4.2.2 Mecanismul de autoboxing si unboxing 4.3 Clase destinate operat iilor de intrare-ie sire . . 4.3.1 Citirea liniilor de text . . . . . . . . . 4.3.2 Scrierea liniilor de text . . . . . . . . . 4.3.3 Exemplu . . . . . . . . . . . . . . . . . 4.4 Tablouri . . . . . . . . . . . . . . . . . . . . . 4.5 Exercit ii . . . . . . . . . . . . . . . . . . . . .

CUPRINS 41 41 42 43 44 46 47 47 49 51 52 53 53 53 54 56 57 57 57 61 61 63 64 65 68 70 70 71 73 74 74 74 75 76 77 79 81 82 83 85

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

. . . . . . . . . . . . .

5 Relat ia de mo stenire 5.1 Ierarhizarea . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Ierarhia de obiecte. Relat ia de agregare . . . . . 5.1.2 Ierarhia de clase. Relat ia de mo stenire . . . . . . 5.2 Denit ia program arii orientate pe obiecte . . . . . . . . 5.3 Declararea relat iei de mo stenire n Java . . . . . . . . . 5.4 Mo stenirea de clas a n Java . . . . . . . . . . . . . . . . 5.4.1 Vizibilitatea membrilor mo stenit i. Specicatorul tected . . . . . . . . . . . . . . . . . . . . . . . . 5.4.2 Cuv antul cheie super . . . . . . . . . . . . . . . . 5.4.3 Constructorii n contextul mo stenirii de clas a . . 5.4.4 Exemplu de mo stenire de clas a . . . . . . . . . . 5.5 Most enirea de tip n Java . . . . . . . . . . . . . . . . . 5.5.1 Exemplu de mo stenire de tip . . . . . . . . . . . 5.5.2 Operatorii instanceof si cast . . . . . . . . . . . . 5.6 Exercit ii . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . de access pro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

CUPRINS 6 Polimorsmul 6.1 Ce este polimorsmul? . . . . . . . . . . . . . . 6.1.1 Suprascrierea metodelor . . . . . . . . . 6.1.2 Legarea dinamic a. Polimorsmul. . . . . 6.1.3 Clase si metode abstracte . . . . . . . . 6.2 Principiul de Proiectare Inchis-Deschis . . . . . 6.3 Supra nc arcarea versus suprascrierea metodelor 6.4 Constructorii si polimorsmul . . . . . . . . . . 6.5 Tablourile si polimorsmul . . . . . . . . . . . . 6.6 Exercit ii . . . . . . . . . . . . . . . . . . . . . . 7 Interfet e 7.1 Denirea unei interfet e. Component a 7.2 Implementarea unei interfet e . . . . 7.3 Tipurile unui obiect . . . . . . . . . 7.4 Conicte . . . . . . . . . . . . . . . . 7.5 Clase abstracte versus interfet e . . . 7.6 Exercit ii . . . . . . . . . . . . . . . .

9 87 87 91 92 93 95 97 98 99 100 104 104 105 108 109 110 112 117 117 117 118 122 122 122 123 129 130 131 131 134 134 134 135 136 137 137 138 139 140 140

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

unei . . . . . . . . . . . . . . .

interfet e . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

8 Tratarea except iilor 8.1 Except iile si tratarea lor . . . . . . . . . . . . . . . . 8.1.1 Ce este o except ie? . . . . . . . . . . . . . . . 8.1.2 Metode clasice de tratare a except iilor . . . . 8.2 Tratarea except iilor n Java . . . . . . . . . . . . . . 8.2.1 Denirea except iilor . . . . . . . . . . . . . . 8.2.2 Clauza throws . . . . . . . . . . . . . . . . . 8.2.3 Interceptarea except iilor . . . . . . . . . . . . 8.2.4 Emiterea explicit a a except iilor . . . . . . . . 8.2.5 Situat ii n care se pot emite implicit except ii 8.2.6 Clasicarea except iilor . . . . . . . . . . . . . 8.3 Exercit ii . . . . . . . . . . . . . . . . . . . . . . . . . 9 Pachete 9.1 Modularizarea . . . . . . . . . . . . . . . . . . . . . . 9.1.1 Arhitectura programelor orientate pe obiecte 9.1.2 Proprietatea de modularitate . . . . . . . . . 9.1.3 Scopul modulariz arii . . . . . . . . . . . . . . 9.1.4 De la vorbe la fapte . . . . . . . . . . . . . . 9.2 Modularizarea programelor Java . . . . . . . . . . . 9.2.1 Declararea pachetelor . . . . . . . . . . . . . 9.2.2 Subpachetele. Numele complet al unui pachet 9.2.3 Numele complet al claselor . . . . . . . . . . 9.2.4 Vizibilitatea cont inutului pachetelor . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

10 9.2.5 Accesarea cont inutului pachetelor . 9.2.6 Vizibilitatea membrilor claselor . . 9.2.7 Gestionarea sierelor .java si .class Exercit ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CUPRINS . . . . . . . . . . . . . . . . 141 144 147 149 152 153 158 158 160 160 164 165 167 167 168 170 172 172 173 174 174 175 184 187 187 187 188 191 193 194 194 196 197

9.3

10 Colect ii de obiecte 10.1 S a ne amintim...tablourile . . . . . . . . . . . . . 10.2 Suportul Java pentru lucrul cu colect ii de obiecte 10.2.1 O privire de ansamblu . . . . . . . . . . . 10.2.2 Interfat a Collection . . . . . . . . . . . . . 10.2.3 Liste . . . . . . . . . . . . . . . . . . . . . 10.3 Tipuri generice . . . . . . . . . . . . . . . . . . . 10.4 Parcurgerea colect iilor . . . . . . . . . . . . . . . 10.5 Alte tipuri de colect ii . . . . . . . . . . . . . . . . 10.5.1 Mult imi . . . . . . . . . . . . . . . . . . . 10.5.2 Dict ionare . . . . . . . . . . . . . . . . . . 10.6 Exercit ii . . . . . . . . . . . . . . . . . . . . . . . 11 Elemente de programare concurent a 11.1 Concurent a . . . . . . . . . . . . . . . . . . . 11.2 Ce este un r de execut ie? . . . . . . . . . . . 11.3 Utilizarea relor de execut ie n Java . . . . . 11.3.1 Denirea, crearea si declan sarea relor 11.3.2 Cooperarea relor de execut ie . . . . . 11.4 Exercit ii . . . . . . . . . . . . . . . . . . . . . 12 Probleme frecvente n cod. Javadoc. Jar 12.1 C ateva probleme frecvente n cod . . . . . 12.1.1 Cod duplicat . . . . . . . . . . . . 12.1.2 List a lung a de parametri . . . . . . 12.1.3 Instruct iuni switch si if-else-if . . . 12.1.4 Data Class . . . . . . . . . . . . . 12.2 Despre javadoc si jar . . . . . . . . . . . . 12.2.1 Instrumentul software javadoc . . . 12.2.2 Instrumentul software jar . . . . . 12.3 Exercit ii . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . de execut ie . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

Lect ia 1

Introducere n programarea orientat a pe obiecte


1.1 Primii pa si n programarea orientat a pe obiecte

Totul a nceput datorit a necesit a tii disperate de a organiza mai bine programele. Intro viziune primitiv a programele sunt v azute ca ind f acute din proceduri si funct ii, ecare implement and o buc a tic a din funct ionalitatea programului (altfel spus, un algoritm) si f ac and uz de un fond global comun de date. Prin intermediul apelurilor de proceduri si funct ii, ace sti algoritmi sunt combinat i n vederea obt inerii funct ionalit a tii dorite din partea programului. O lung a perioad a de timp programatorii au scris programe av and n minte aceast a viziune de organizare. Ei bine, odat a ce programele au nceput s a devin a tot mai mari si mai complexe, aceast a modalitate de organizare a nceput s a- si arate decient ele. Astfel, n loc s a se ocupe de implementarea propriu-zis a a unor noi buc a ti de funct ionalitate necesare extinderii unui program, programatorii au nceput s a petreac a tot mai mult timp ncerc and s a nt eleag a diverse proceduri si funct ii pentru a putea combina noile buc a ti de funct ionalitate cu cele deja existente. Cum ntelegerea subprogramelor devenea din ce n ce mai grea datorit a modic arilor succesive aduse lor, adesea de programatori diferit i, aceste programe au nceput s a arate n scurt timp ca ni ste saci cu foarte multe petice. Cel mai grav, s-a ajuns n multe situat ii ca nimeni s a nu mai stie rolul unui petec iar u soare ncerc ari de modicare a lor ducea la spargerea sacului, adic a la un comportament anormal al programului. Incet ncet, programul sc apa de sub control, nimeni nu l mai putea extinde si n scurt timp nici un client nu mai era interesat n a-l achizit iona din moment ce nu mai corespundea noilor sale necesit a ti. In vederea limit arii acestor situat ii nepl acute s-au dezvoltat diferite modalit a ti de organizare a programelor cunostute sub numele de stiluri arhitecturale. Stilul arhitectural descris anterior a fost numit Main program and subroutines. Exist a descrise multe

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

PE OBIECTE 12LECT IA 1. INTRODUCERE IN PROGRAMAREA ORIENTATA

pe obiecte a unui sistem software. Figura 1.1: Organizarea orientata alte stiluri n literatura de specialitate. Pe parcursul acestei c art i noi ne vom con centra asupra stilului arhitectural denumit object-oriented. In viziunea acestui stil de organizare, un program este f acut din obiecte, la fel ca lumea real a. Un obiect trebuie s a grupeze mpreun a un set de date si un set de operat ii primitive singurele care stiu manipula respectivele date. Obiectele coopereaz a ntre ele n vederea obt inerii funct ionalit a tii dorite din partea programului prin intermediul apelurilor la operat iile primitive corespunz atoare ec arui obiect. Figura 1.1 surpinde aspectele legate de organizarea orientat a pe obiecte a unui program. Este total mpotriva spiritului de organizare orientat pe obiecte ca un obiect s a fac a uz de datele unui alt obiect. Singura form a de cooperare permis a ntre obiecte trebuie realizat a prin intermediul apelului la operat ii primitive. S i apropo, o operat ie a c arei singur rol e de a returna o dat a a obiectului asociat NU e n general o operat ie primitiv a. In acest context putem da o denit ie part ial a a program arii orientate pe obiecte. Denit ie 1 Programarea orientat a pe obiecte este o metod a de implementare a programelor n care acestea sunt organizate ca si colect ii de obiecte care coopereaz a ntre

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

PE OBIECTE 1.1. PRIMII PAS I IN PROGRAMAREA ORIENTATA ele.

13

Ei bine, acum stim part ial ce nseamn a programarea orientat a pe obiecte. Dar putem deja s a scriem programe conform program arii orientate pe obiecte? R aspunsul este categoric NU!!! Cum descompunem un program n obiectele sale componente? Cum stabilim operat iile primitive asociate unui obiect? Cum implement am operat iile primitive asociate unui obiect? Inainte de toate, pentru a putea r aspunde la aceste ntreb ari, trebuie s a nt elegem anumite concepte care stau la baza organiz arii orientate pe obiecte. F ar a o bun a nt elegere a lor nu vom sti niciodat a s a program am corect orientat pe obiecte. Nici m acar dac a stim la perfect ie limbajul de programare Java! In urma discut iei de mai sus anumite persoane ar putea ajunge la anumite concluzii pripite. Tot ce am nv a tat despre programare p an a acum este inutil. Este total fals. Tendint a aproape instinctual a a unei persoane, c and are de scris un program care s a rezolve o anumit a problem a, este de a identica o serie de algoritmi necesari rezolv arii unor p art i din problema init ial a, de a implementa ace sti algoritmi ca subprograme si de a combina aceste subprograme n vederea rezolv arii ntregii probleme. Prin urmare, pare natural s a organizezi un program a sa cum am amintit la nceputul acestui capitol, dar n acela si timp nu este bine s a proced am a sa. Ei bine, nu este ntru-totul adev arat. Acest mod de organizare este bun dac a e folosit unde trebuie. Nu e bine s a organiz am astfel ntregul program, dar, dup a cum vom vedea mai t arziu, obiectele sunt organizate astfel n intimitatea lor. Limbajul de programare C este dep a sit si nu are sens s a-l mai studiez si nici s a-l mai utilizez. Este mai mult dec at fals. Utilizarea losoei organiz arii orientate pe obiecte a unui program nu depinde absolut de utilizarea unui limbaj de programare orientat pe obiecte cum sunt, de exemplu, Java si C++. Este adev arat c a limbajul C nu det ine anumite mecanisme absolut necesare program arii orientate pe obiecte, dar nu este imposibil s a implement am un program n C si n acela si timp s a-l organiz am orientat pe obiecte. In astfel de situat ii se vorbe ste despre programare cu tipuri de date abstracte sau despre programare bazat a pe obiecte. In capitolele urm atoare vom ar ata care sunt diferent ele.

1.1.1

Abstractizarea

Lumea care ne nconjoar a este f acut a din obiecte. Zi de zi interact ion am cu obiecte pentru a duce la ndeplinire anumite activit a ti. Unele obiecte sunt mai simple, altele sunt mai complexe. Dar poate cineva s a ne spun a n cele mai mici detalii cum funct ioneaz a ecare obiect cu care interact ioneaz a el sau ea zilnic? R aspunsul e simplu: nu! Motivul ar putea socant pentru unii: pentru c a n general ne intereseaz a ceea ce fac obiectele si nu cum fac. Cu alte cuvinte, simplic am sau abstractiz am obiectele ret in and doar caracteristicile lor esent iale. In cazul program arii orientate pe obiecte aceste caracteristici se refer a exclusiv la comportamentul observabil al unui obiect.

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

PE OBIECTE 14LECT IA 1. INTRODUCERE IN PROGRAMAREA ORIENTATA Mult i dintre noi interact ioneaz a zilnic cu obiectul televizor pentru a urm ari diferite programe Tv. Dar oare c a ti dintre noi pot s a ne spun a n cele mai mici detalii cum funct ioneaz a televizorul de acas a? Evident foarte put ini. Motivul este c a pe majoritatea dintre noi ne intereseaz a doar s a utiliz am televizorul pentru a urm ari programe Tv. Cum anume ajunge imaginea din studioul unei televiziuni pe ecranul televizorului i intereseaz a doar pe cei care fac televizoare. Dar sunt aceste caracteristici esent iale acelea si pentru oricare persoan a care interact ioneaz a cu un obiect particular? Evident nu. Depinde de la persoan a la persoan a. Pentru a achita valoarea unei c al atorii cu autobusul, un pasager utilizeaz a un compostor de bilete pentru a- si perfora biletul de c al atorie. Din perspectiva rmei care pune la dispozit ie serviciul de transport, obiectul compostor poate utilizat si pentru a determina num arul de c al atori dintr-o zi si/sau intervalul orar cel mai aglomerat, lucruri care nu sunt importante din perspectiva pasagerului.

Denit ie 2 O abstract iune (rezultatul procesului de abstractizare) denot a caracteristicile esent iale ale unui obiect care-l disting de orice alt obiect denind astfel granit ele conceptuale ale obiectului relativ la punctul de vedere din care este v azut.

O aceea si abstract iune poate corespunde mai multor obiecte din lumea care ne nconjoar a dac a ele sunt identice din perspectiva din care sunt privite. De exemplu, dac a pe o persoan a o intereseaz a c at e ora la un moment dat poate folosi la fel de bine un ceas mecanic sau un telefon mobil cu ceas. Dac a altcineva vrea ns a s a dea un telefon evident c a acestor obiecte nu le poate corespunde aceea si abstract iune. O aceea si abstract iune poate corespunde n acest caz mai multor feluri de telefoane (mobile sau xe).

1.1.2

Interfat a

Dup a cum reiese din sect iunea anterioar a abstract iunea scoate n evident a comportamentul observabil al unui obiect din punctul de vedere al unui utilizator. Cu alte cuvinte, abstract iunea focalizeaz a atent ia asupra serviciilor pe care le pune la dispozit ie obiectul spre a utilizate de alte obiecte. Aceste servicii nu sunt altceva dec at operat iile primitive ale obiectului iar ansamblul tuturor operat iilor primitive se nume ste interfat a obiectului respectiv. Un nume utilizat pentru identicarea unei anumite interfet e se nume ste tip (mai general tip de date abstract).

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

PE OBIECTE 1.1. PRIMII PAS I IN PROGRAMAREA ORIENTATA

15

S a revenim la exemplul cu ceasul mecanic si telefonul mobil. Din perspectiva unei persoane care vrea s a stie c at e ceasul ambele obiecte au aceea si interfat a care pune la dispozit ie operat ia prin care omul sau, n general, un alt obiect poate aa ora exact a. Din punctul lui de vedere obiectele sunt de acela si tip. Este clar c a pentru o persoan a care vrea s a dea un telefon obiectele au interfet e diferite si deci tipuri diferite. S a ne g andim acum la compostorul de bilete. Pare ciudat, dar acela si obiect compostor are dou a tipuri diferite. Aceasta pentru c a difer a perspectiva din care este privit de client i, adic a de c atre c al ator, respectiv de c atre managerul rmei de transport.

1.1.3

Ascunderea informat iei

Abstractizarea este util a pentru c a focalizeaz a atent ia doar asupra caracteristicilor comportamentale esent iale ale unui obiect din perspectiva unui utilizator, permit and astfel identicarea interfet ei obiectului. Dar, dup a cum am spus la nceputul acestei expuneri, un obiect grupeaz a un set de date si un set de operat ii primitive, singurele care stiu manipula aceste date. Il intereseaz a pe utilizator aceste date n mod direct? Mai mult, operat iile primitive trebuie s a aib a o implementare. Interfat a ne spune doar care sunt aceste operat ii si nimic altceva. Il intereseaz a pe utilizator modul lor de implementare n mod direct? Aici intervine a sa numitul principiu al ascunderii informat iei. O discut ie complet a despre acest principiu este dup a p arerea noastr a cu mult dincolo de scopul acestei c art i. Drept urmare, ne vom rezuma a spune c a acest principiu este utilizat c and se decide s a se ascund a ceva neesent ial despre un obiect oarecare de orice utilizator potent ial. Ei bine, n contextul program arii orientate pe obiecte acest principiu este utilizat c and spunem c a reprezentarea datelor unui obiect si implementarea operat iilor sale primitive trebuie ascunse de orice client al obiectului. Cum anume realiz am aceast a ascundere vom vedea n urm atorul paragraf. In urma abstractiz arii televizorului de acas a, un utilizator ar putea ajunge la concluzia c a interfat a unui astfel de obiect cont ine urm atoarele operat ii: comut aPornitOprit, m are steVolumul, mic soreaz aVolumul, comut aPeProgramulAnterior, comut aPeProgramulUrm ator. Ei bine, toate aceste operat ii primitive au o implementare undeva n auntrul cutiei televizorului. Folosind principiul ascunderii informat iei constructorul televizorului a hot ar at ca toate detaliile de implementare s a e ascunse utilizatorului televizorului. Atent ie, doar a hot ar at c a trebuie ascunse. Faptul c a ele au fost ascunse folosind o cutie nu are important a din punctul de vedere al principiului ascunderii informat iei.

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

PE OBIECTE 16LECT IA 1. INTRODUCERE IN PROGRAMAREA ORIENTATA

1.1.4

Incapsularea

In programarea orientat a pe obiecte, abstractizarea ajut a la determinarea serviciilor furnizate de un obiect. Prin utilizarea principiului ascunderii informat iei se spune c a datele si implementarea operat iilor unui obiect trebuie ascunse de orice client potent ial al obiectului. Cu alte cunvinte, obiectul nu trebuie s a spun a nimic despre datele si implementarea operat iilor sale. Incapsularea vine s a completeze cele dou a not iuni, reprezent and mecanismul necesar punerii mpreun a a interfet ei unui obiect cu o anumit a implementare a acestei interfet e. Mecanismul permite n acela si timp ascunderea implement arii de orice posibil client al respectivei interfet e, f ac and astfel posibil a aplicarea principiului ascunderii informat iei. Denit ie 3 Incapsularea este procesul de compartimentare a elementelor unei abstract i uni care constituie structura si comportamentul s au. Incapsularea serve ste la separarea interfet ei unei abstract iuni si a implement arii sale.

Este total mpotriva not iunii de programare orientat a pe obiecte ca un client s a poat a accesa datele unui obiect sau s a stie detaliile de implementare ale unei operat ii primitive. Aceste informat ii trebuie ascunse. Incapsularea permite s a se ascund a implementarea unui obiect, dar nu de la sine. De obicei, programatorul este cel care trebuie s a spun a explicit atunci c and dene ste un obiect ce este ascuns si ce nu. Cu except ia motivelor bine ntemeiate, toate datele unui obiect trebuie ascunse explicit de c atre programator. Promisiuni de genul promit s a nu m a uit niciodat a la datele tale NU se accept a deoarece mai devreme sau mai t arziu cineva tot le va nc alca. S a revenim la exemplul anterior despre televizor. Clientul este interesat doar de interfat a televizorului prin intermediul c areia poate controla acest obiect. Folosind principiul ascunderii informat iei, constructorul televizorului decide s a ascund a detaliile de implementare ale acestei interfet e. Pentru a realiza acest lucru el folose ste de obicei o cutie. Incapsularea este procesul prin care televizorul n ansamblul s au este intodus n respectiva cutie. Ea va ascunde tot ce tine de detaliile de funct ionare ale televizorului si las a accesibil doar ce tine de interfat a televizorului.

1.2

Primii pa si n Java

Dac a n prima parte a acestei lect ii am introdus primele elemente legate de programarea orientat a pe obiecte, n aceast a sect iune vom prezenta pe scurt c ateva not iuni de baz a necesare scrierii unui program n limbajul Java.

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

1.2. PRIMII PAS I IN JAVA

17

1.2.1

Comentariile

Comentariile reprezint a port iuni de cod surs a care sunt ignorate de c atre compilator si sunt utilizate cu prec adere pentru documentarea codului surs a. Modul de marcare a comentariilor este prezentat n exemplul de mai jos.
/*Exemplu de comentariu pe o linie*/ /*Exemplu de comentariu pe mai multe linii*/ //Alt exemplu de comentariu.

In cazul primului tip de comentariu, tot ce este cuprins ntre /* si */ este ignorat de c atre compilator. In cazul celui de-al doilea tip, tot ce urmeaz a dup a // p an a la terminarea liniei este ignorat.

1.2.2

Identicatori, tipuri primitive si declararea de variabile

Identicatorul este un nume asociat unei entit a ti dintr-un program. Numele unei variabile, a unui parametru sau a unei funct ii ( n Java metode) reprezint a identicatori. Principial, n Java un identicator poate ncepe cu sau cu o liter a si poate cont ine litere, cifre si caracterul 1 . Exist a un num ar de identicatori care sunt rezervat i deoarece ei reprezint a cuvinte cheie ale limbajului Java, de exemplu cuvintele cheie main sau class. Nu vom furniza aici o list a a tuturor acestor cuvinte cheie deoarece ele vor nv a tate pe parcurs. Momentan ne vom opri doar asupra cuvintelor cheie corespunz atoare tipurilor primitive. In tabelele urm atoare sunt prezentate tipurile primitive denite n limbajul de programare Java. Tip byte short int long Num ar de bit i utilizat i 8 16 32 64 Domeniul valoric 128, 127 32768, 32767 2147483648, 2147483647 9223372036854775808, 9223372036854775807

Tabelul 1.1: Tipuri numerice ntregi. Este important de amintit aici si tipul String asociat sirurilor de caractere. Dup a cum vom vedea ceva mai t arziu, acest tip nu este unul primitiv. Limbajul Java trateaz a ntr-un mod special acest tip pentru a face mai u soar a munca programatorilor ( sirurile de caractere se utilizeaz a des n programe). Din acest motiv el se aseam an a cu tipurile primitive si poate amintit aici.
1 In Java, un identicator poate ncepe si cont ine caractere Unicode corespunz atoare unui simbol de moned a.

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

PE OBIECTE 18LECT IA 1. INTRODUCERE IN PROGRAMAREA ORIENTATA Tip oat double Num ar de bit i utilizat i 32 64 Domeniul valoric 1.4E 45, 3.4028235E + 38 4.9E 324, 1.7976931348623157E + 308

flotanta . Tabelul 1.2: Tipuri numerice n virgula Tip char Num ar de bit i utilizat i 16 Exemple de valori a - caracterul a \n - caracterul linie nou a \u3C00 - caracterul specicat n hexazecimal boolean 1 Sunt posibile doar valorile logice date de cuvintele cheie true si false

Tabelul 1.3: Alte tipuri primitive.

In continuare, vom ar ata prin intermediul unui exemplu modul n care se declar a variabile n Java, mod ce nu difer a fundamental de declararea variabilelor n limbajul C.
//Declararea unei variabile are forma: Tip NumeVariabila = Initializare char unCaracter,altCaracter = A; int i; String sir = "Acesta e un sir de caractere";

1.2.3

Expresii si operatori

In paragraful anterior am v azut care sunt tipurile primitive ale limbajului Java si modul n care putem declara variabile de diferite tipuri. Variabilele mpreun a cu literalii (constante de genul A sau Un sir de caractere) sunt cele mai simple expresii posibile, denumite si expresii primare. Expresii mai complicate pot create combin and expresiile primare cu ajutorul operatorilor. C a tiva dintre operatorii Java sunt prezentat i n Tabelul 1.4. Exist a dou a not iuni importante care trebuie amintite n contextul operatorilor. Prima este precedent a (P) operatorilor care dicteaz a ordinea n care se vor efectua operat iile. Ca si exemplu, operatorul de nmult ire are o precedent a mai ridicat a dec at operatorul de adunare si prin urmare nmult irea se realizeaz a nainte de adunare. Precedent a

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

1.2. PRIMII PAS I IN JAVA implicit a a operatorilor poate modicat a prin utilizarea parantezelor.
int a,b,c;

19

//Operatorul * are o precedenta mai ridicata decat + deci se executa primul a * b + c //Operatorul * are o precedenta mai ridicata decat + dar din cauza //parantezelor care prezinta explicit ordinea operatiilor adunarea //se va executa prima a * (b + c)

A doua not iune important a legat a de operatori const a n asociativitatea (A) lor. Ea specic a ordinea n care se execut a operat iile atunci c and o expresie utilizeaz a mai mult i operatori de aceea si precedent a. Un operator poate asociativ la stanga sau asociativ la dreapta. In primul caz expresia se evalueaz a de la st anga la dreapta, iar n al doilea caz de la dreapta la st anga. Evident, utilizarea parantezelor poate modica ordinea de evaluare implicit a.
int a,b,c; //Operatorul - este asociativ la stanga, deci prima data se executa scaderea //iar apoi adunarea a - b + c //Operatorul - este asociativ la stanga, dar parantezele spun ca prima data //se executa adunarea apoi scaderea a - (b + c) //Operatorii += si = sunt asociativi la dreapta, deci prima data se da //valoarea 5 lui b dupa care se da valoarea a + 5 lui a a+= b = 5

1.2.4

Tip arirea la ie sirea standard

Dup a cum am mai spus anterior, un program organizat n spiritul stilului orientat pe obiecte este alc atuit din obiecte. Prin urmare, pentru a a sa o valoare pe ecranul calculatorului, avem nevoie de un obiect care stie face acest lucru. Limbajul Java pune automat la dispozit ie un astfel de obiect, accesibil prin variabila out. El are o operat ie 2 primitiv a (mai exact metod a) denumit a println care stie s a a seze parametrul dat, indiferent de tipul s au, la ie sirea standard. In exemplul urm ator se arat a modul n care se realizeaz a a sarea pe ecran dintr-un program.
2

De fapt are mai multe dar pentru moment nu ne intereseaz a acest lucru.

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

PE OBIECTE 20LECT IA 1. INTRODUCERE IN PROGRAMAREA ORIENTATA

P 15 14 14 14 14 12 11 11 10 10 10 9 9 8 8 7 7 6 6 5 5 4 3 1

A S D D D D S S S S S S S S S S S S S S S S S S D

Operator ++, -++, -+, ~ ! *, /, % +,+ << >> >>> <, <= >, >= == != & & ^ ^ | | && || =

Tipul operanzilor variabil a de tip numeric /char variabil a de tip numeric /char numeric/char ntreg/char boolean numeric/char, numeric /char numeric/char, numeric /char String, orice tip ntreg/char, ntreg/char ntreg/char, ntreg/char ntreg/char, ntreg/char numeric/char, numeric /char numeric/char, numeric /char orice tip , orice tip orice tip, orice tip ntreg/char, ntreg/char boolean, boolean ntreg/char, ntreg/char boolean, boolean ntreg/char, ntreg/char boolean, boolean boolean, boolean boolean, boolean variabil a de orice tip, tipul variabilei

Efectul execut iei Post incrementare/decrementare Pre incrementare/decrementare Plus/Minus unar Negare pe bit i Negare logic a Inmult ire/ mp art ire/rest Adunare/sc adere Concatenare de siruri de caractere Deplasare st anga pe bit i Deplasare dreapta pe bit i cu insert ie de semn Deplasare dreapta pe bit i cu insert ie de 0 Mai mic/mai mic sau egal Mai mare/mai mare sau egal Egalitate valoric a Inegalitate valoric a S i pe bit i S i logic Sau exclusiv pe bit i Sau exclusiv logic Sau pe bit i Sau logic S i logic Sau logic Atribuire

Tabelul 1.4: Un subset de operatori Java.

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

1.2. PRIMII PAS I IN JAVA

21

//Afisarea unui sir de caractere System.out.println("Acest mesaj va fi afisat pe ecranul calculatorului!"); //Afisarea valorii unei variabile System.out.println(i);

Prezent a lui System naintea obiectului out este obligatorie. Motivul l vom vedea mai t arziu.

1.2.5

Instruct iuni de control

Instruct iunile de control sunt necesare pentru a permite unui program s a ia anumite decizii la execut ia sa. Principalele instruct iuni de decizie sunt if si switch. Buclele de program se realizeaz a prin instruct iunile while, do si for. Deoarece toate aceste instruct iuni sunt asem an atoare celor din C nu vom insista asupra lor, rezum andu-ne n a prezenta mai jos forma lor general a.
if (ExpresieLogica) //Instructiunea se executa daca ExpresieLogica este adevarata //Daca sunt mai multe instructiuni ele trebuie cuprinse intre { si } else { //Instructiuni //Ramura else poate sa lipseasca daca nu e necesara } switch (Expresie) { //Expresie trebuie sa fie de tip char, byte, short sau int case ExpresieConstanta1: //Instructiuni ce se executa cand Expresie ia valoarea lui //ExpresieConstanta1 break; case ExpresieConstanta2: //Instructiuni ce se executa cand Expresie ia valoarea lui //ExpresieConstanta2 break; case ExpresieConstanta3: //Instructiuni ce se executa cand Expresie ia valoarea lui //ExpresieConstanta3 break; default: //Instructiuni ce se executa cand Expresie ia o valoare diferita //de oricare ExpresieConstanta. Ramura default poate lipsi }

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

PE OBIECTE 22LECT IA 1. INTRODUCERE IN PROGRAMAREA ORIENTATA

while(ExpresieLogica) { //Instructiuni ce se executa atata timp cat ExpresieLogica este //adevarata } do { //Instructiuni ce se repeta atata timp cat ExpresieLogica este adevarata //Ele se executa cel putin o data pentru ca ExpresieLogica este testata //la sfarsitul buclei } while(ExpresieLogica); for (Initializare;ExpresieLogica;Incrementare) { //Instructiuni ce se repeta atata timp cat ExpresieLogica este adevarata //Inaintea primei iteratii se executa Initializare //Dupa fiecare iteratie se executa Incrementare }

La fel ca n limbajul C, exist a de asemenea instruct iunile continue si break. Instruct iunea continue trebuie s a apar a n interiorul unui ciclu, iar efectul s au const a n trecerea imediat a la execut ia urm atoarei iterat ii din bucla imediat nconjur atoare instruct iunii continue. Tot n interiorul ciclurilor poate apare si instruct iunea break. Efectul ei const a n terminarea imediat a a ciclului imediat nconjur ator instruct iunii break. In plus, instruct iunea break poate apare si n corpul unuei instruct iuni switch, mai exact pe una dintre posibilele ramuri case ale instruct iunii. Execut ia unui astfel de break conduce la terminarea execut iei instruct iunii switch. Dac a pe o ramur a case nu apare instruct iunea break atunci la terminarea execut iei instruct iunilor respectivei ramuri se va continua cu execut ia instruct iunilor ramurii urm atoare (evident dac a exist a una). Situat ia este exemplicat a mai jos.
char c; //Instructiuni switch(c) { case 1: System.out.println("Unu ");break; case 2: System.out.println("Doi "); case 3: System.out.println("Trei"); } //Daca c este caracterul 1 pe ecran se va tipari // Unu //Daca c este caracterul 2 pe ecran se va tipari // Doi // Trei //Daca c este caracterul 3 pe ecran se va tipari // Trei

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

1.2. PRIMII PAS I IN JAVA

23

1.2.6

Primul program

In acest paragraf vom vedea un prim program Java si modul n care l lans am n execut ie.
class PrimulProgram { public static void main(String argv[]) { System.out.println("Hello world!"); } }

La fel ca si n limbajul de programare C, execut ia unui program Java ncepe n funct ia ( n Java metoda) main. Singurul parametru al acestei metode este un tablou de siruri de caractere prin intermediul c aruia se transmit parametri din linia de comand a. Metoda nu returneaz a nici o valoare, motiv pentru care se specic a tipul void ca tip returnat. Dup a cum vom vedea n lucrarea urm atoare, n Java orice metod a trebuie s a e inclus a ntr-o clas a, n acest caz clasa PrimulProgram. Tot acolo vom nt elege si rolul cuvintelor cheie public si static. Deocamdat a nu vom vorbi despre ele. Pentru a rula programul, acesta trebuie mai nt ai compilat. S a presupunem c a programul prezentat mai sus se a a ntr-un sier denumit PrimulProgram.java. Pentru a-l compila se folose ste comanda:
javac PrimulProgram.java

Rezultatul va un sier cu numele PrimulProgram.class care cont ine, printre altele, codul executabil al metodei main. S a presupunem c a programul de mai sus s-ar aat n sierul Program.java. In acest caz comanda de compilare ar fost javac Program.java, dar rezultatul compil arii ar fost tot PrimulProgram.class deoarece numele sierului rezultat se obt ine din numele clasei compilate si nu din numele sierului ce cont ine codul surs a. Pentru a se lansa n execut ie programul se utilizeaz a comanda:
java PrimulProgram

Ca urmare a acestei comenzi, ma sina virtual a Java va c auta n sierul PrimulProgram.class codul metodei main dup a care va trece la execut ia sa. In acest caz se va a sa pe ecran mesajul Hello world!.

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

PE OBIECTE 24LECT IA 1. INTRODUCERE IN PROGRAMAREA ORIENTATA Dac a clasa dat a ca parametru ma sinii virtuale Java nu cont ine metoda main se va semnala o eroare.

1.3

Exercit ii

1. Compilat i si lansat i n execut ie programul Hello World! dat ca exemplu n Sect iunea 1.2.6. 2. Scriet i un program Java care init ializeaz a dou a variablile ntregi cu dou a valori constante oarecare. In continuare, programul va determina variabila ce cont ine valoarea maxim a si va tip ari cont inutul ei pe ecran. 3. Scriet i un program Java care a seaz a pe ecran numerele impare si suma numerelor pare cuprinse n intervalul 1-100 inclusiv. Pentru a rezolva exercit iile 2 si 3 folosit i doar variabile locale metodei main. In Java nu exist a variabile globale ca n Pascal sau C.

Bibliograe
1. David Flanagan, Java In A Nutshell. A Desktop Quick Reference, Third Edition, OReilly, 1999. 2. Edward V. Berard, Abstraction, Encapsulation, and Information Hiding, www.toa.com/pub/abstraction.txt, 2002. 3. Grady Booch, Object-Oriented Analysis And Design With Applications, Second Edition, Addison Wesley, 1997. 4. Mary Shaw, David Garlan Software Architecture. Perspectives On An Emerging Discipline, Prentice Hall, 1996.

(c) Ed. Politehnica Timisoara. 2006. C. Marinescu http://www.cs.utt.ro/~cristina, P. Mihancea http://www.cs.utt.ro/~petrum.

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