1. Ce este o clasa java java si cum cum se salveaza salveaza pe disk? disk?
Clasă: set de obiecte cu caracteristici şi funcţionalitate identice (termenul de clasa se substituite termenului de tip) O clasa reprezinta o modalitate de a descrie un nou tip de date. Clasa este o descriere a unei multimi de obiecte caracterizate prin structuri si comportamente similar similare. e. De aceea, o clasa va cuprinde defnitiile datelor si operatiilor ce caracterizeaza obiectele obiectele clasei respective. respective. Datele defnite intr-o intr-o clasa se mai numesc atribute, iar operatiile se mai numesc metode sau unctii-membru. tributele tributele si metodele ormeaza membrii unei clase. !inta"a olosita pentru a defni o clasa in #ava este: class nume_clasa { // date si metode }
!alvarea pe dis$ se ace in olderul built cu numele clasei si e"tensia .class 2. Ce este este un pack package age? ?
%n pac$a&e &rupeaza toate clasele , %tilizate pentru or&anizarea or&anizarea claselor . 'ac$a&eurile pot si comprimate sub orma ar. 3. Defneste Defneste fnal, fnal, fnally fnally fnalize. fnalize.
inal- o clasa declarata cu fnal nu poate f subclasata. O clasa declarata ca fnal opreste linia de mostenire, nu se poate e"tinde o clasa fnala. O metoda declarata cu fnal nu poate f suprascrisa.O variabila declarata cu fnal poate f initializata numai o sin&ura data. %tilizata in special pentru mostenire inall*- +locul declarat cu fnall* se e"ecuta mereu mereu dupa tr* and catc atunci cand apare a pare o e"ceptie neasteptata sau ara a f o e"ceptie.ste utilizat utilizat pentru a evita . uta pro&ramatorul pro&ramatorul sa evite curatarea codului accidentala prin return brea$ sau continue. inalize-este o metoda care daca este prezenta intr-o intr-o clasa este apelata inaintea &arba&e &a rba&e collectorului. etoda fnalize() este utilizata pentru curatarea codului inainte ca un obiesct sa fe luat de &arba&e colector 4. Defneste Defneste variaila variaila locala, variaila variaila memra memra si variaila de clasa
/ariabile /ariabile de instan0ă. !unt unice fecărei instan0e le clasei. 1
Variabile de clasă. O singură copie pentru toate instanţele clasei. Se foloseşte modicatorul de acces „static. Variabile locale. Variabile Variabile temporare declarate !n cadrul unei metode sau a unui bloc. Sunt "i#ibile doar !n cadrul acelei metode.
'arametri. /ariabilele prin care se trimit ar&umente la apelul metodelor. variabile de 2nstanta (atribute) 3 aceste variabile defnesc valorile unui obiect, deci, ele sunt create atunci c4nd obiectul este creat5 ele e"ista de c4nd obiectul este creat si pana cand acesta este distrus5 doar obiectul ob iectul si metodele sale au acces la variabilele de instanta5 variabilele statice 3 aceste variabile sunt parte dintr-o clasa5 sunt create atunci c4nd clasa este incarcata de #/5 variabile locale ale unor metode 3 aceste variabile sunt defnite pe stiva metodei si ele e"ista at4ta timp c4t metoda este e"ecutata (e"ista (e"ista in stiva de apeluri)5 variabilele locale nu pot f accesate a ccesate si din interiorul unor metode imbricate ciar daca ele e"ista cand metoda imbricata este e"ecutata variabile locale unui bloc de cod - aceste variabile sunt defnite in interiorul blocurilor de cod (intre 6 si 7) si poate f utilizate in timp ce blocul este e"ecutat5 e"ecutat5 blocuri de cod sunt tipice pentru, or, 8ile si blocuri de initializare. initializare. Variablie membre$ sunt declarate in cadrul unei clase% dar apartin unui obiect.
!. Defneste Defneste private, private, protecte protected d , pulic pulic
'rivate: elementele elementele private pot f accesate doar de creatorul clasei in cadrul metodelor acelei clase - olosit in declararea unui camp sau a unei metode dintr-o clasa - specifca aptul ca membrul sau metoda respectiva poate f accesata doar din cadrul clasei insesi, nu si din clasele derivate din aceasta clasa. 'ublic: elementele elementele publice sunt disponibile oricaror alte clase 'rotected: 'rotected: similar cu private, utilizat in mostenire, clasele care mostenesc pot accesa elementele private din clasele de baza -olosit in declararea unui camp sau a unei metode dintr-o dintr-o clasa - specifca aptul ca membrul sau metoda respectiva poate f accesata doar din cadrul clasei insesi sau din clasele derivate din aceasta clasa.
9
". #ol #olul ul clasel claselor or de tip tip $ilter $ilter
%n fltru este un obiect de a eectua sarcini de fltrare pe fecare cerere, cerere, la o resursă (cu un coninut de servlet sau statice), sau pe răspunsul la o resursă, sau ambele. "emplele "emplele care au ost identifcate pentru acest desi&n sunt 1) iltre de autentifcare 9) e"ploatarea orestieră ;i udit fltre <) de conversie oto&rafe fltre =) iltre de compresie a datelor >) iltrele de criptare ?) iltre @o$enizin& A) iltre care declanseaza resurse de acces evenimente B) ! E @ fltre F) ime-@ip fltru lan Clasele ilter ilter sunt radacina abstracta a bstracta a claselor de decorator %. Design Design pattern patternul ul &terato &teratorr '. Descrieti Descrieti modul de utilizare utilizare a Decoratorilo Decoratorilorr la realizarea realizarea i(o in java ). Care este este di*erenta di*erenta intre o clasa clasa astracta astracta si o inter*ata inter*ata
O interata defneste un set de metode, proprietati, proprietati, evenimente, inde"atori. cesti membri vor f implementati de o clasa sau ciar de o structura. O clasa abstracta este o clasa care nu poate f instantiata si este olosita pentru mostenire. O clasa care nu este abstracta si care deriveaza dintr-o dintr-o clasa abstracta, trebuie sa includa implementarile tuturor membrilor abstracti. abs tracti.
1+.
Des Descri crieti mecanismul mul trycatc- c-fnally
tr* 6 EE codul care este susceptibil sa &enereze &enereze e"ceptie e"ceptie 7 catc (@*pe1 tp1) 6 EE e"ceptii de tipul @*pe1 7 catc (@*pe9 tp9) 6 EE e"ceptii de tipul @*pe9 <
7G fnall* 6 7
EE cod care care se e"ecuta e"ecuta indierent indierent de tipul tipul de e"ceptie e"ceptie aruncat (sau nu)
@r* @r* 3 catc unctioneaza ca un s8itc s8itc pe tipul de e"ceptie e"ceptie 9 modalitati de tratare a erorilor erorilor
@ermination: @ermination: eroarea eroarea este aruncata aruncata Hesumption: se insereaza cod tr* 3 catc pt rezolvarea erorii
+locul Itr*I contine instructiunile de descidere a unui fsier si de citire dintr-un dintr-un fsier ambele put4nd produce e"ceptii. "ceptiile provocate provocate de aceste instructiuni sunt tratate Jn cele doua blocuri IcatcI, IcatcI, c4te unul pentru fecare fecare tip de e"ceptie. e"ceptie. 2nciderea fsierului se ace Jn blocul Ifnall*I, deoarece acesta este si&ur ca se va e"ecuta. ara a olosi blocul Ifnall*I Jnciderea fsierului ar f trebuit acuta Jn fecare situatie Jn care fsierul ar f ost descis, ceea ce ar f dus la scrierea de cod redundant: 11. 11. Desc Descri riet etii modu module lele le de crea creare re a oie oiect ctel elor or din din tipu tipull clas clasel elor or interioare care nu sunt anonimie
Clasa interioarK este necesarK numai clasei e"terioare. e"terioare. 'entru reducerea reducerea numKrului de clase de nivel superior si pentru simplifcarea comunicKrii Jntre clasele ascultKtor la evenimente putem defni clasele receptor ca niste clase interioare cu nume, incluse Jn clasa cu ereastra aplicatiei: class rame rame e"tends e"tends #rame #rame 6 #+utton b1 L ne8 #+utton (I M I)5 #+utton b9 L ne8 #+utton (I - I)5 #@e"t #@e"tield ield te"t L ne8 #@e"t #@e"tield ield (?)5 int nL N5 public rame() 6 Container c L &etContent'ane()5 b1.addctionistener b1.addctionistener (ne8 +1())5 b9.addctionistener b9.addctionistener (ne8 +9())5 c.seta*out (ne8 lo8a*out())5 c.add(b1)5 c.add(b9)5 te"t.set@e"t(I te"t.set@e"t(I IMn)5 c.add (te"t)5 7 EE clase incluse cu nume class +1 implements ctionistener ctionistener 6 public void action'erormed (ctionvent ev) 6 te"t.set@e"t(I IM MMn)5 =
7
7 class +9 implements ctionistener ctionistener 6 public void action'erormed (ctionvent ev) 6 te"t.set@e"t(I IM --n)5 7 7 Defnirea de clase incluse anonime reduce si mai mult lun&imea pro&ramelor, dar ele sunt mai &reu de citit si de e"tins
19. 19. ie un s*st s*stem em orma ormall def defni nitt pe pe ala alabe betu tull or orma matt din din lite literrele ele a si b.i b.imb mba aul ul ormat accepta doar cuvinte care se inceie cu aab.!a se scrie automatul fnit determinist pentru acest limba si reprezentarea limbaului in +. 13. 13. Desc Descri riet etii mod modal alia iate tea a de de rea reali liza zare re a unu unuii ite itera rato torr si si inc incer erca cati ti sa *urnizati un eemplu concret de utilizare a acestui salon de programare
%n iterator este un obiect care permite traversarea traversarea unei colectii si modifcarea acesteia (e": ster&ere de elemente) in mod selectiv. 'uteti obtine un iterator pentru o colectie, apeland metoda sa iterator(). 2nterata 2terator este urmatoarea:
public interace 2teratorPQ 6 boolean ase"t()5 ne"t()5 void remove()5 remove()5 EE optional 7 etodele au urmatorul u rmatorul comportament: ase"t -intoarce true daca mai e"ista elemente neparcurse inca de iteratorul respectiv ne"t -intoarce urmatorul element remove -elimina -elimina din colectie ultimul element intors de ne"t. 2n mod evident, remove nu poate f apelat decat o sin&ura data dupa un apel ne"t. Daca aceasta re&ula nu este respectata, vom primi o eroare. e putem ima&ina ca un iterator se pozitioneaza intre elementele colectiei. colectiei. 2nitial, cursorul sau precede primul element, astel ca primul apel ne"t va intoarce primul element. tentie: etoda remove este sin&ura modalitate !2R%H de a inlatura un element dintr-o dintr-o colectie in timpul parcur&erii parcur&erii acesteia. Orice alta metoda are un comportament neprecizat neprecizat (nu putem &aranta ca ster&erea ster&erea va avea loc, sau ca elementul sters va f cel pe care ciar doream sa-l ster&em). ste util sa olosim iteratori cand dorim: ster&er s ter&erea ea elementului curent, in timpul iterarii >
Cand dorim sa iteram mai multe colectii in paralel. pa ralel. "emplu "emplu de olosire a unui iterator: Collection c L ne8 rra*ist()5 rra*ist()5 2terator it L c.iterator()5 8ile (it.ase"t()) 6 EEverifcari asupra elementului curent: it.ne"t()5 it.remove()5 7 14. Ce inseamna upcast? Descrieti mecanismul legarii intarziate si cum *aciliteaza acest mecanism realizarea proprietatii de upcast.
'roprietatea 'roprietatea de upcast presupune tratarea unui obiect dintr-o clasa derivata ca si cum ar f din clasa de bază. e&are (bindin&) L asocierea dintre numele metodei si corpul metodei. ate bindin& necesita un mecanism pt identifcarea tipului la e"ecutie(H e"ecutie(H@@2), @@2), pt a se identifca in mod corect corpul metodei care trebuie apelat. 2n cazul late bindin&, le&area se ace la e"ecutie, e"act inainte de e"ecutia eectiva a metodei. !e utilizeaza late bindin& pt orice apel de metoda, cu e"ceptia metodelor static si fnal.
1!. 1!. Care Ca re este este rolu rolull con const stru ruct ctor orul ului ui de co copi pier ere e in cazu cazull agr agreg egar arii ii indirecte?
Constructorul este o metodă specială apelată automat la instan0ierea unei clase şi ace opera0iile necesare pentru ini0ializarea fecărui obiect al unei clase fe ea statică sau dinamică. Dacă se oloseşte pentru a ini0ializa un obiect cu alt obiect atunci denumirea de constructor de copiere. &re&area &re&area este relatia intre doua obiecte ob iecte in care unul dintre obiecte apartine celuilalt obiect. &re&area &re&area reda apartenta unui obiect la un alt obiect. Din punct de vedere conceptual, e"ista 9 tipuri de a&re&are: stron& 3 la disparitia obiectelor continute prin a&re&are, e"istenta obiectului container inceteaza (de e"emplu, e"emplu, o carte nu poate e"ista ara pa&ini) 8ea$ 3 obiectul-container poate e"ista si in absenta obiectelor a&re&ate (de e"emplu, e"emplu, o biblioteca poate e"ista si ara carti) a&re&are indirect S
1". 1". Care Ca re este este di*e di*ere rent nta a intr intre e co cole lect ctii iile le gene generi rice ce,, -ete -etero roge gene ne si parametrizate?
Colectiile sunt un ansamblu a nsamblu de iterete si clase ce realizeaza: colectarea impreuna impreuna a obiectelor, stocarea, sortarea si accesarea obiectelor. Colectii &enerice 3 putem specifca tipul de data pe care il va olosi colectia, e": istP!trin&Q strin&s ?
Colectii etero&ene etero&ene 3 atunci c4nd se crează crează o colec0ie pentru elemente elemente de acelaşi tip (necunoscut), oricine poate insera elemente de alt tip Colectii parametrizate 1%.
/erializarea
1'.
0ternalizarea
'astrarea obiectelor dincolo de e"ecutia pro&ramului. L transormarea unui obiect intr-o intr-o secventa de octeti, din care sa poata f reacut ulterior obiectul ori&inal. ste un mecanism utilizat pt salvarea si restaurarea datelor.
Ce se intampla daca dorim ca parti din obiect sa nu fe serializateS !au dorim să recreem recreem subobiecte de la zeroS 2nterata "ternalizable: "ternalizable: e"tinde interata !erializable 9 metode noi: 8rite"ternal, 8rite"ternal, read"ternal ceste metode sunt apelate automat la serializare serializare E deserializare deserializare si contin cod suplimentar care se e"ecuta la aceste operatii a obiectele deserializate cu "ternalizable, "ternalizable, obiectele sunt construite obisnuit (cu deault constructor) si apoi se apeleaza metoda read"ternal a obiectele "ternalizable, "ternalizable, subobiectele componente trebuie serializate manual (in 8rite"ternal) iar la deserializare, ele trebuie recuperate recuperate de pe disc a mostenire mostenire dintr-o dintr-o clasa "ternalizable, "ternalizable, se apeleaza 8rite"ternal 8rite"ternal si read"ternal read"ternal a clasei de baza pentru a se asi&ura serializare E deserializare corecta vitarea serializarii anumitor componente ale obiectelor 'rima metoda: utilizarea utilizarea "ternalizable "ternalizable etoda 9-a: cuvantul ceie transient: indica aptul acel camp marcat cu transient nu va f serializat ca si parte a procesului automat de serializare etoda <-a: se adau&a la clase metodele 8riteObect si readObect in care se urnizeaza codul pro&ramator p ro&ramatorului ului pentru serializare serializare ceste metode sunt private si sunt apelate automat de catre 8riteObect 8riteObect si readObect a claselor ObectOutput!tream si Obect2nput!tream Obect2nput!tream 1).
/uprancrcarea
!upraJncărcarea unei metode (o8erloadin&) este procesul prin care Jn cadrul unei clase sunt adău&ate două sau mai multe metode cu acelaşi nume dar cu număr dierit de parametri. Tn momentul apelării metodei, mediul de rulare va şti e"act ce metodă să apelez apeleze e pe baza baza parame parametri trilor lor specif specifca0 ca0ii astel astel Jnc4t Jnc4t nu e"ist e"ista a posibi posibilit litate ate de conuzie si de apelare a unei metode &reşite. A
2+.
Cuvntul c-eie t-is
Cuv4ntul ceie tis este olosit Jn cadrul metodelor atunci c4nd se doreşte să se aibă acces la reerin0a obiectului curent. Cuv4ntul ceie tis este o reerin0ă reerin0ă către obiectul curent. cest cuv4nt ceie este olosit doar Jn cazurile speciale c4nd este nevoie să se acă o reerin0ă e"plicită e"plicită la obiectul curent. De e"emplu Jn cazul unei metode care trebuie să returneze obiectul curent. 91.
Cuv4ntul ceie UstaticV
Cuv4ntul ceie UstaticV este olosit Jn ava pentru a defni o variabilă sau o metodă care poate f accesata prin intermediul numelui clasei, ără a f nevoie să se construiască obiecte de tipul respectiv. respectiv. Tn construirea construirea unei aplica0ii orientate pe obiecte utilizarea atributelor sau metodelor statice trebuie să fe evitată şi acestea să fe olosite doar Jn cazuri de strictă necesitate. 22.
Clase i metode astracte o metodă se numeşte abstractă dacă este doar declarată şi nu defnită. Declara0ia va con0ine, obli&atoriu, cuv4ntul ceie abstract : abstract numemetoda ()5
o clasă ce con0ine con0ine măcar o metodă metodă abstractă abstractă devine devine clasă abstractă şi va trebui califcată ca atare (Jn caz contrar se produce o eroare de compilare). iind o clasă incompletă, tentativa de a crea un obiect de tip abstract, se soldează cu eroare. eroare. 23.
&nter*a5a
2ntera0a acoperă no0iunea de clasă abstractă pură. Tn această situa0ie defni0ia tipului este precedată de cuv4ntul ceie interface, ce va Jnlocui cuv4ntul ceie class. 'rin intera0ă se pune la dispozi0ie o ormă şi nu o implementare. a poate con0ine: membri de tip primitiv (implicit statici şi fnali)5 nume de metode cărora li se ataşează: - lista de ar&umente a r&umente de apel5 - tipurile returnate Desing patternul 6roy.
'ro"* 'ro"*:: %n obiect substitut, transmis in locul unui obiect real, pentru a urniza prelucrari aditionale inainte de a transmite operatiile catre obiectul real GD*namic pro"*: se creaza obiectul pro"* dinamic si se trateaza apelurile catre metodele pro"ied in mod dinamic Design patternul /trategy7 Crearea Crearea unei metode care sa aibă comportament dierit in unctie de tipul ar&umentului
care se prezinta la intrare5 -etoda contine o parte f"a care este apelata de fecare data si o parte care variază (strate&ia)5 -2n cazul in care nu se utilizează interetele, dacă dorim să aplicăm metoda (strate&ia) unui obiect dintr-o clasă care nu ace parte din ierarie, ierarie, nu se poate5 - LQ in e"emplul e"emplul ppl* si 'rocesor, e"ista o cuplare oarte puternica intre metoda ppl*.proces si clasa 'rocesor, astel incat aceasta metoda nu poate f aplicata decat obiectelor din ieraria 'rocesor, si nicidecum altor obiecte din alte B
ierarii5 'rocesor 'rocesor se creaza ca si o interata, iar clasele care doresc sa aca parte din strate&ie vor implementa interata scrisa Design patternul 8dapter7
-se scrie cod care preia la intrare interata e"istenta si care sa produca interata de care este nevoie in pro&ram5 -'rin decuplarea interetei de implementare se permite ca o interata sa fe aplicata mai multor implementari, deci codul devine mult mai acil de reutilizat Design patternul $actory9et-od7
-in loc sa se apeleze un constructor in mod direct, pentru crearea crearea unui obiect se apeleaza o metoda de creere a obiectului dintr-o clasa actor*. Clasa actor* implementeaza implementeaza o interata care specifca metoda de creere5 creere5 -stel, se poate scimba la runtime o implementare a unei unctionalitati cu alta rame8or$: un set de clase proiectate proiectate sa rezolve un Control *rame:orks: -pplication rame8or$: tip anume de problemă (design patternul ;emplate 9et-od )5 -'entru aplicarea application rame8or$ se mostenesc din clasele de baza si se scimba implementarea prin overridin&5 -Codul suprascris este cel care customizeaza solutia la cazul particular5 -@emplate -@emplate etod: contine structura de baza a al&oritmului, iar partile specifce sunt apeluri la metode care pot f override5 -stel, se separa partile nescimbate ale al&oritmului de cele We"ibile5 -Control rame8or$: un tip particular de application rame8or$ prin care sistemul raspunde la evenimentele evenimentele &enerate (sistem event-driven) 3 de e"emplu e"emplu R%2s5 -2n implementarea Control rame8or$, inner class sunt utilizate pentru a e"prima diversele actiuni (metoda action) Design patternul Decorator:
-Decoratorul trebuie sa aiba aceasi interata cu obiectele decorate5 -Decoratorul poate să e"tinda interata acestor obiecte5 -Clasele ilter ilter sunt radacina abstracta a claselor de decorator <iect: un obiect are o stare, un comportament si o identitate Clas: set de obiecte cu caracteristici şi funcţionalitate identice (termenul de clasa se substituite termenului de tip) a dresate unui obiect particular &nte*a5a: metode (unc0ionalitate): cererile care pot f adresate dintr-o clasa &mplementarea: mod concret de realizare realizare a unc0ionalită0ii 9otenire7 o clasă nouă se aseamănă (e"tinde) o clasă e"istentă 9ostenire = cum se di*erentiaza clasa derivata de clasa de aza? -'rin adau&are
de noi metode suplimentare5 suplimentare5 -!cimbarea comportamentului unor metode e"istente in clasa de baza (overridin&)5 -Helatia -Helatia is-a: clasa derivata doar override metode din clasa de baza (principiul substitutiei pure)5 -Helatia is-li$e-a: is-li$e-a: clasa derivata adau&a elemente noi interetei clasei de baza (metodele noi nu sunt accesibile din clasa de baza 3 substitutia nu mai este pura)
F
9osternirea multipla7 -2n #ava se poate e"tinde o sin&ura clasă si se pot implementa
oricate clase5 -Holul interetelor: interetelor: sa se poata ace upcast la mai mult decat o clasa de baza5 Daca se poate crea o clasa de baza ara defnitii de metode si variabile membre, se recomanda sa se creeze interete in locul claselor abstracte5 -2nteretele se pot combina (se e"tinde interetele la el ca si clasele)5 -Coliziunea numelor la implementarea implementarea mai multor interete (daca interetele de baza au acelasi nume de metoda cu semnaturi dierite): este o problema daca metodele diera doar prin tip de return return LQ eroare la compilare5 -Campurile care care sunt inserate intr-o intr-o interata devin in mod automat statis si fnal LQ reprezinta un mod convenabil pentru a defni constante (similar cu enum)5 -Campurile defnite in interete nu pot f blan$ fnals, ele trebuie initializate la defnire Containere7 ecesare datorita aptului ca nu stim de la desi&n numarul de obiecte
necesare pentru a rezolva o anumita problema5 -Containerele sunt siruri de reerinte catre alte obiecte5 -le se e"pandeaza automat pentru a salva noi obiecte, dupa necesitati5 -9 tipuri de liste: rra*ist, in$edist5 in$edist5 -Containerele in #ava sunt create sa pastreze obiecte de tipul Obect. -Q ele pot salva orice5 -'ot aparea e"ceptii e"ceptii la Do8ncast la runtime, timp de e"ecutie e"ecutie crescut datorită operaiei de Do8ncast Crearea oiectelor si ciclul de viata : -iecare obiect necesita resurse (memorie), crearea si distru&erea obiectelor devin importante5 -#ava utilizeaza in mod e"clusiv alocarea dinamica a memoriei5 -'entru orice obiect, trebuie utilizat ne8 la creeere creeere55 -Obiectele sunt alocate alocate in in zona de eap5 -Distru&erea -Distru&erea obiectelor este realizata automat de catre garbage collector 5 -&' identifcă momentul in care un obiect nu mai este utilizat ;i il dezalocă
ava: -Xona #egistru: re&istrele procesorului, nu avem access direct la ele5 - /tiva7 zona de stiva memoreaza reerintele reerintele catre obiecte5 - eap: in aceasta zona sunt alocate toate obiectele (la apelul ne8)5 -/patiu de stocare non #897 obiecte care e"ista in aara spatiului de memorie a pro&ramului (persistenta obiectelor) pro&ramare orientat saet*5 -a crearea crearea unui rra* se /iruri @8rraysA in >ava 5 -limba de pro&ramare
creaza un sir de reerinte reerinte fecare initializata la valoarea null5 - LQ fecare membru al sirului trebuie initializat5 -#ava nu permite utilizarea unui indice in aara ran&e-ului arra*ului (se arunca o e"ceptie) Clase77
class @*peame 6 EY class bod* YE7Clasele contin:-Campuri5 -etode 9odul de accesare a unui camp(metoda obectHeerence.member 'entru datele din tipuri primitive se &aranteaza initializarea la valori implicite (alse si N) 9etode, argumente si tip de return Heturn@*pe metodame(EY ar&ument list YE) 6 EY metod bod*YE7
-@oti operatorii produc o valoare prin aplicarea lor5 -i pot produce si side-eZects (modifcarea (modifcarea valorii operanzilor)5 -liasin&: la la transmiterea transmiterea unui obiect obiect ca si ar&ument intr-o intr-o metoda, se transmite o reerinta, reerinta, deci modifcarea valorii in metoda aecteaza valoarea obiectului din aara metodei5 -Operatorii MM si 3 au orma postf"ata si pref"ata5 -Operatorii LL si L[ plicati pe reerinte de obiecte, compara reerintele, si nu continutul obiectelor Barage collector-ul dezaloca memoria alocata prin ne8, atunci cand obiectele nu mai sunt olosite5 -colecteaza memoria ramasa alocata in obiectele care nu mai sunt utilizate si compacteaza eap-ul, rearanand obiectele alocate5 -!top-and-cop*: RC-ul opreste pro&ramul, scaneaza toate reerintele reerintele de pe stac$ si copiaza obiectele identifcate in noul 1N
eap. Ceea ce ramane e &arba&e-ul care trebuie trebuie dezalocat, iar noul eap e dea compactat 9etoda fnalize: -permite operatii de ster&ere ster&ere inainte ca obiectele sa fe supuse
&arba&e collectorului5 -#ava nu &aranteaza apelarea acestei metode, pro&ramatorul nu are control asupra momentului cand se apeleaza &arba&e collectorul5 -inalize se utilizeaza in &eneral pentru a implementa termination conditions pentru un obiect (de e"emplu inciderea unui fsier) /pecifcatorii de access pulic, private, protected7
-ccess la nivel de pac$a&e: accesul implicit al membrilor care nu au nici un specifcator5 -'entru -'entru clasele din aara pac$a&e-ului, acesti membrii sunt considerati private5 -ccess public: orice clasa de oriunde poate accesa membrul respective5 respective5 -Clasele mostenite: pot accesa membrii protected protected din clasa de baza, ca si cum acestia ar f membrii public5 -embrii private: pot f accesati doar in clasa in care au ost defnite5 -2nterata claselor: public5 -2mplementarea -2mplementarea unctionalitatilor: unctionalitatilor: private /intaa mostenirii:
-ostenirea -ostenirea se realizează ori de c4te ori se crează o clasă: se mo;tene;te din Obect5 -ostenire: -ostenire: clasa nouă se aseamănă cu clasa vece: cuv4ntul ceie e"tends5 -Clasa nouă va prelua automat toate campurile ;i metodele din clasa de bază5 -He&ulă nescrisă la mostenire: mostenire: c4mpurile din clasele de bază se scriu private iar metodele se lasă public (sau protected)45 protected)45 -Clasa derivată poate să preia o metodă din clasa de bază si să o rescrie5 rescrie5 -Din clasa derivată, pentru a se apela o metodă din clasa de bază se poate utiliza super5 -Healizarea -Healizarea mostenirii: la crearea obiectului din clasa derivată, se crează un subobiect din clasa de bază ba ză (ca si cum ar f realizată o compozitie către acesta)5 -2nitializarea -2nitializarea subobiectului din clasa de bază: doar prin constructor5 -Constructorul clasei de bază este apelat intotdeauna inaintea constructorului clasei derivate5 -'entru apel constructor al cl de bază cu ar&umente: super ( ar&umente) $inal: itemii fnal: nu pot f scimbate ( de e"emplu, intr-o intr-o clasă derivata)5 -Datele fnal: fna l: Constante la compilare care nu se scimba ulterior/alori ulterior/alori initializate la runtime care nu se doreste sa fe scimbate!tatic fnal: au o sin&ură locatie de stocare a datei5 -inal -inal aplicat la o reerinta: ace reerinta constantă, valoarea obiectului poate f modifcata5 -+lan$ fnal: campuri declarate fnal care nu sunt initializate -Q ele trebuie initializate inainte de utilzare5 -r&umente -r&umente fnal: Jn metodă nu se poate scimba valoarea către care arată reerinta5 reerinta5 -etode fnal: nu pot f scimbate prin mostenire5 -etodele fnal sunt tratate inline de către compilator5 -Clase fnal: se inibă mostenirea din clasa respectivă 9ecanismul upcast: -socierea dintre numele metodei si corpul metodei 3 le&are (bindin&)5 -arl* bindin&: atunci cand le&area se ace la compilare5 compilare5 -ate bindin&: atunci cand le&area se ace la e"ecutie, e"ecutie, e"act inainte de e"ecutia eectiva a metodei5 -ate bindin& L d*namic bindin& sau runtime bindin&5 -ate bindin&: necesită un mecanism pentru identifcarea identifcarea tipului la e"ecutie (H@@2) 3 pentru a se identifca in mod corect corpul metodei care trebuie apelat5 -2n #ava se utilizeaza late bindin& pentru orice apel de metodă, cu e"ceptia e"ceptia metodelor static si fnal (private e implicit fnal pt ca o metoda private nu poate f mostenita)5 -Campurile si elementele static sunt rezolvate la compilare5 -e&area -e&area constructorilor este realizata la compilare &sa vs. &slikea : 11
-Helatie de mostenire mostenire de tip is-a: clasa derivată doar suprascrie interaa clasei de bază5 ba ză5 -Helatie -Helatie de mostenire de tip is-li$e-a: is-li$e-a: clasa derivată contine metode suplimentare aă de clasa de bază5 -Helaia de substituie: a o relatie de tip is-a substitutia este pură: orice mesa trimis clasei derivate poate f trimis si clasei de bază (rezolvarea (rezolvarea mesaului se ace prin upcast) a o relaie de tip is-li$e-a: partea e"tinsă e"tinsă din clasa derivată nu mai este disponibilă prin upcast (prin adresarea adresarea clasei de bază)5 -Do8ncast: operaia inversă upcast 3 nu este o operaie &arantată, in sensul in care nu stim e"act clasa derivată către care care se ace do8ncast5 -#ava verifcă orice conversie (cast), si daca nu se s e poate realiza realiza se aruncă o e"ceptie de tipul ClassCast"ception ClassCast"ception Clase astracte : -Holul -Holul clasei 2nstrument (varul ierariei): ierariei): să creeze o interaă comună claselor derivate5 - LQ obiectele din clasa 2nstrument nu au sens (dpdv lo&ic)5 - LQ clasa 2nstrument: clasă abstractă5 -'entru a evita astel de erori la e"ecutie e"istă un mecanism prin care se declară clasele abstracte: cuvantul ceie abstract 5 -Clasă abstractă: are cel putin o metodă abstractă (metodă declarată abstract si care nu are corp)5 -!e &enerează eroare eroare la compilare dacă se incearcă crearea crearea unui obiect o biect dintr-o dintr-o clasă abstractă5 -a mostenire dintr-o dintr-o clasă abstractă, metoda abstractă abs tractă trebuie suprascrisă, altel clasa derivată devine si ea abstractă &nner classes7
-!e plaseaza clase in interiorul altor clase5 -2nner classes reprezinta un concept dierit de compozitie5 -De obicei, clasa e"terioara e"terioara are o metoda care returneaza returneaza un obiect din clasa inner5 -@ipul obiectului din clasa interioara se specifca precum: OuterClass.2nnerClass5 -Obiectul clasei interioare are un lin$ (reerinta) catre obiectul clasei e"terioare e"terioare care l-a creat5 -Obiectul clasei interioare poate accesa membrii obiectului clasei e"terioare ara ca sa fe nevoie de califcare (dreptul (dreptul de a accesa este asupra tuturor obiectelor membre membre ale clasei e"terioare5 -'entru -'entru a se obtine reerinta la obiectul clasei e"terioare (din obiectul clasei inner) se utilizeaza: Outer@*pe.tis 5 -'entru a crea un obiect din clasa inner pornind de la un obiect ob iect din clasa outer se poate poa te utiliza: obiectOuter.ne8 obiectOuter.ne8 5- Clasele inner sunt potrivite pentru a implementa interete: se realizeaza ascunderea implementarii Closures callacks7 Closure: un obiect apelabil care retine inormatie despre domeniul de vizibilitate in care
a ost creat (are access la variabilele din domeniul de vizibilitate unde a ost creat)5 -LQ clasa interioara este un closure (deoarece (deoarece are o reerinta catre obiectul e"terior e"terior si poate sa acceseze inclusiv membrii privati ai clasei e"terioare) e"terioare) Callack : un obiect primeste o inormatie care va permite sa apelam obiectul initial la un moment ulterior de timp. !e implementeaza cu clase interioare. Clasa de tip Closure urnizeaza o poată Jn intriorul clasei e"teriore (dar intr-un intr-un mod sae 3 nu se necesită ca sa transormam accesul la metodele acestei clase) &teratori:-
ste un desi&n pattern5 -%n obiect de tip iterator este asociat unei colectii si permite re&asirea re&asirea ordonata a obiectelor din colectia respective5 -etoda iterator() a unei colectii5 -etoda ne"t() a obiectului iterator: produce urmatorul element din colectie5 -etoda ase"t(): ase"t(): intero&eaza daca mai sunt elemente neiterate5 -etoda remove(): ster&e ultimul element iterat din colectie5 -2teratorii pot produce elementele colectiei colectiei doar intr-o intr-o sin&ura directive5 -ist2terator: urnizat doar de interata ist, poate poa te parcur&e elementele colectiei in ambele directii directii 19
Conceptul de eceptie: in domeniul de vizibilitate unde apare eroarea de obicei nu
stim cum sa tratam eroarea, insa stim ca nu putem să continuăm cu eroarea, astel că transmitem eroarea spre rezolvare la un domeniu de vizibilitate e"terior <iectul Class: -#ava - #ava realizează H@@2 H@@2 prin intermediul obiectului Class5 -cesta contine
inormatie reeritoare reeritoare la tip, inormatie care poate f intero&ată5 -'entru fecare clasă pe care o avem in pro&ram, e"istă un obiect Class asociat5 a compilarea unei noi clase, acest obiect este creat si salvat in fsierul .class5 -a crearea unui obiect dintr-o dintr-o clasă, #/ utilizează un subsistem subsistem numit class loader5 @oate @oate clasele sunt incarcate incarcate in mod dinamic de către #/ la prima utilizare a acestora (anume cand se ace prima reerinta la un membru static al clasei)5 a incarcarea unei clase, se verifcă daca obiectul ob iectul Class al tipului respectiv este incarcat, incarcat, daca nu, se identifcă fsierul .class pe disc, si octetii acestuia sunt verifcati inainte să fe incarcati /istemul de &(< intrun limaj de programare :
-!istemul de 2EO intr-un limba de pro&ramare trebuie să fe capabil să trateze:!urse dierite de dispozitive de 2EO (fsiere, consola, cone"iuni de retea etc),@ipuri dierite de access la surse (access secvential, access random, access buZered),@ipuri dierite de lucru cu sursa (binar, la nivel de caracter, la nivel de linie, la nivel de cuvant) Heprezinta un nume a unui fsier sau unui set de fsiere dintr-un director5 Clasa $ile:- Heprezinta -etoda list() -Q produce un sir de !trin& care reprezinta fsierele reerite de obiectul de tip ile5 -ist poate f invocata utilizand un Director* ilter, pentru a returna doar acele fsiere pentru care numele respecta un pattern5 -2nterata ilenameilter: metoda accept primeste la intrare obiectul de tip ile si strin&ul pentru comparare. etoda list din ile apeleaza metoda accept pentru fecare fsier din ile, ile, iar acesta este inserat in lista doar daca accept urnizeaza true5 -Obiectul ile ile poate f utilizat ca sa creemEster&emEredenumim un directorEfsier sau un directorEfsier cu o intrea&a cale5 -ile poate f utilizat ca sa citim inormatiile reeritoare reeritoare la un fsierEdirector &nput si
aceasta ierarie5 -Clase adapter: adapter: 2nput!treamHeader 2nput!treamHeader si Output!tream\riter5 Output!tream\riter5 -otivul pentru care au ost create: sa se permita internationalizarea internationalizarea (%nicode lucreaza cu caractere pe 1? biti)5 -Hecomandare: sa se utilizeze clase de tip Header si \riter ori de cate ori e posibil5 -a citiri specifce la nivel de octet, sa se utilizeze 2nput!tream 2nput!tream si Output!tream e"ecutia pro&ramelor5 -stel obiectele pot /erializare:- 'astrarea obiectelor dincolo de e"ecutia
f recuperate si e"ecutia e"ecutia restartata de la punctul unde a ost oprita anterior5 -Orice obiect dintr-o dintr-o clasă care implementeaza !erializable poate f convertit in sir de octeti si s i apoi restaurat5 -'ersistentă: -'ersistentă: durata de viata a unui obiect o biect e"ista dincolo de e"ecutia e"ecutia unui pro&ram5 -'entru realizarea realizarea persistentei, obiectele trebuie serializate E deserializate in mod e"plicit (li&t8ei&t persistence)5 -'entru serializare, se crează un obiect dintr-un tip Output!tream, Output!tream, acesta este ^8rapV in interiorul unui ObectOutput!tream ObectOutput!tream si se utilizeaza metoda 8riteObect5 -!erializarea -!erializarea salveaza intre& 8ebul de obiecte din spatele s patele obiectului serializat5 -@ipul unui obiect deserializat: &etClass 0ternalize: -e"tinde interata !erializable5 -a obiectele ob iectele deserializate cu
"ternalizable, "ternalizable, obiectele sunt construite obisnuit (cu deault constructor) si a poi se apeleaza metoda read"ternal5 -a obiectele "ternalizable, "ternalizable, subobiectele componente trebuie serializate manual (in 8rite"ternal) 8rite"ternal) iar la deserializare, ele trebuie recuperate recuperate de pe disc5 -a mostenire mostenire dintr-o clasa "ternalizable, se apeleaza 8rite"ternal 8rite"ternal si read"ternal a clasei de baza pentru a se asi&ura serializare E deserializare corecta
Desing patternul 6roy7
1 'ro"* ro"*:: %n obie obiect ct subs substi titu tut, t, tran transm smis is in locu locull unui unui obie obiect ct real, eal, pent pentru ru a urni urniza za prelucrari prelucrari aditionale inainte de a transmite operatiile catre obiectul real G 9 D*nami D*namicc pro" pro"* *: se creaza creaza obiectul obiectul pro"* pro"* dinamic dinamic si se trateaza trateaza apeluril apelurile e catre catre metodele pro"ied pro"ied in mod dinamic Design patternul /trategy7
1 Crea Crearrea unei unei me meto tode de car care sa aibă aibă comp compor orta tame ment nt die dieri ritt in unc uncti tie e de tipu tipull ar&umentului care se prezinta la intrare5 9 eto etoda da cont contin ine e o part parte e f"a f"a car care este este apela apelata ta de fecar fecare e data data si o part parte e car care variază (strate&ia)5 < 2n cazu cazull in car care nu se util utiliz izea ează ză inte inter ret etel ele, e, dacă dacă dori dorim m să apli aplică căm m me meto toda da (strate&ia) unui obiect dintr-o clasă care nu ace parte din ierarie, nu se poate5 LQ in e"emplul ppl* si 'rocesor, e"ista o cuplare oarte puternica intre metoda ppl*.proces si clasa 'rocesor, astel incat aceasta metoda nu poate f aplicata decat obiectelor din ieraria 'rocesor, si nicidecum altor obiecte din alte ierarii5 1=
'rocesor se creaza ca si o interata, iar clasele care doresc sa aca parte din strate&ie vor implementa interata scrisa Design patternul 8dapter7
1 !e scrie scrie cod care care preia preia la intrare intrare interata interata e"iste e"istenta nta si care care sa produca produca interata interata de care este nevoie in pro&ram5 9 'rin 'rin decuplare decuplarea a interetei interetei de implem implementar entare e se permite permite ca o interata interata sa fe aplicata aplicata mai multor implementari, deci codul devine mult mai acil de reutilizat reutilizat Design patternul $actory9et-od7
1 2n loc sa se apeleze apeleze un construc constructor tor in mod direct direct,, pentru pentru crear crearea ea unui obiect obiect se apeleaza o metoda de creere a obiectului dintr-o clasa actor*. Clasa actor* implementeaza o interata care specifca metoda de creere5 creere5 9 stel, stel, se poate poate scimba scimba la runtim runtime e o implement implementare are a unei unei unctional unctionalitati itati cu cu alta Control *rame:orks: 1 ppl pplic icat atio ion n rame8 rame8or or$: $: un set de clase clase proi proiec ecta tate te sa rezo rezolv lve e un tip tip anume anume de problemă (design patternul ;emplate 9et-od)5 -'entru aplicarea application rame8or$ se mostenesc din clasele de baza si se scimba implementarea prin overridin&5 9 Codul suprasc suprascris ris este este cel care care custom customizeaz izeaza a solutia solutia la cazul particular particular55 < @emplat emplate e eto etod: d: contin contine e struct structura ura de baza baza a al&ori al&oritmu tmului lui,, iar partile partile specif specifce ce sunt apeluri la metode care pot f override5 override5 = stel, stel, se separa separa partile partile nescim nescimbate bate ale al&oritmu al&oritmului lui de cele cele We"ibil We"ibile5 e5 > Contr Control ol rame8or rame8or$: $: un tip partic particula ularr de applicat application ion rame8o rame8or$ r$ prin care sistemu sistemull raspunde la evenimentele &enerate (sistem event-driven) 3 de e"emplu R%2s5 -2n imple im pleme menta ntare rea a Contr Control ol rame rame8or 8or$, $, inner inner class class sunt sunt utili utilizat zate e pentru pentru a e"pri e"prima ma diversele actiuni (metoda action) Design patternul Decorator:
1 Decoratorul Decoratorul trebuie trebuie sa aiba aiba aceasi aceasi inter interata ata cu obiect obiectele ele decora decorate5 te5 9 Decoratorul Decoratorul poate să e"tin e"tinda da intera interata ta acestor acestor obiecte5 obiecte5 < Clasele Clasele ilte ilterr sunt radaci radacina na abstracta abstracta a claselo claselorr de decorat decorator or 9ostenire = cum se di*erentiaza clasa derivata de clasa de aza?
1 'rin 'rin adau&a adau&are re de de noi meto metode de suplim supliment entar are5 e5 1>
9 !cimbare area compor portam ame entului unor metode e"istente in clasa de baza aza (overridin&)5 < Helat elatia ia is-a is-a:: clasa clasa deri deriva vata ta doar doar over overri ride de me meto tode de din din clas clasa a de baza baza (pri (princ ncip ipiu iull substitutiei pure)5 = Helat elatia ia is-l is-li$ i$ee-a: a: clas clasa a deri deriva vata ta adau& adau&a a elem elemen ente te noi noi inte inter ret etei ei clase claseii de baza baza (metodele noi nu sunt accesibile din clasa de baza 3 substitutia nu mai este pura) Crearea oiectelor si ciclul de viata :
1 iecare iecare obiect necesita necesita resurse resurse (memorie (memorie), ), crearea crearea si distru&erea distru&erea obiectelor obiectelor devin importante5 9 #ava utiliz utilizeaza eaza in in mod e"cl e"clusiv usiv alocar alocarea ea dinamic dinamica a a memoriei memoriei55 < 'entru 'entru orice orice obiect obiect,, trebuie trebuie utilizat utilizat ne8 ne8 la creeer creeere5 e5 = Obiect Obiectele ele sunt sunt aloca alocate te in in zona zona de de eap5 eap5 > Distru&er Distru&erea ea obiecte obiectelor lor este este realiz realizata ata automat automat de catre catre garbage collector 5 ? &' identifcă momentul in care un obiect nu mai este utilizat ;i il dezalocă /tatic7
1 Date Datele le me memb mbrre si me meto tode dele le pot pot f acce accesa sate te doar doar sub sub cali califc fcar area ea unui unui obie obiect ct cunoscut, e"istent in memonia pro&ramului (creat cu ne8). 9 %n camp sau sau o metoda metoda statica statica nu este este le&ata le&ata de un obiect obiect anume anume dintr-o dintr-o clasa5 < %n camp camp static static e"ista e"ista o sin&ura sin&ura data data pentru pentru o clasa, clasa, find find partaa partaatt de catre catre toate obiectele clasei respective5 respective5 = Campurile Campurile statice statice pot pot f reerit reerite e prin prin numele numele clasei5 clasei5 > etode etodele le static statice e sunt la nivel nivel de clasa, clasa, pot f reeri reerite te prin prin numele numele clasei clasei ara ara a f necesara e"istenta unui obiect5 ? etoda ma main5 A etodele etodele static statice e nu pot pot accesa accesa campuriE campuriE metode metode nestatice nestatice din clasa. clasa. B +loc +locul ul stat static ic este este apel apelat at o sin& sin&ur ura a data, data, la prima prima crear creare e a unui unui obiect obiect din clas clasa a respe espect ctiv iva a sau sau la apel apelar area ea unei unei me memb mbrre stati statice ce din din acea acea clas clasa a si poat poate e sa initializeze doar date statice.
1 @oti operator operatoriiii produc produc o valoar valoare e prin aplicar aplicarea ea lor5 9 i pot produce produce si side-eZec side-eZects ts (modifc (modifcare area a valorii valorii operanz operanzilor ilor)5 )5 < liasin&: liasin&: la transmit transmitere erea a unui obiect obiect ca si ar&ument ar&ument intr intr-o -o metoda, se se transmite transmite o reerinta, reerinta, deci modifcarea modifcarea valorii in metoda aecteaza valoarea obiectului din aara aa ra metodei5 = Operatori Operatoriii MM si 3 au orma orma postf"ata postf"ata si pref pref"ata5 "ata5 1?
> Oper Operat ator orii ii LL si L[ pli plica cati ti pe reer eerin inte te de obiec obiecte te,, comp compar ara a reer eerin inte tele le,, si nu continutul obiectelor
Barage collector-ul7
1 dezaloca dezaloca memoria memoria alocata alocata prin prin ne8, atunci atunci cand cand obiectel obiectele e nu mai sunt sunt olosite5 olosite5 9 cole colect ctea eaza za me memo mori ria a rama ramasa sa aloc alocat ata a in obie obiect ctel ele e care care nu ma maii sunt sunt util utiliz izat ate e si compacteaza eap-ul, rearanand obiectele alocate5 -!top-and-cop*: < RC-u RC-ull opr oprest este pro& pro&ra ramu mul, l, scan scanea eaza za toat toate e reer eerin inte tele le de pe stac stac$$ si copi copiaz aza a obiectele identifcate in noul eap. Ceea ce ramane e &arba&e-ul care trebuie dezalocat, iar noul eap e dea compactat /intaa mostenirii:
1 ost osten enir irea ea se reali ealize zeaz ază ă ori ori de c4te c4te ori ori se creaz crează ă o clas clasă: ă: se mo;te mo;tene ne;t ;te e din din Obect5 9 ostenir ostenire: e: clasa clasa nouă se aseamăn aseamănă ă cu clasa clasa vece: vece: cuv4ntul cuv4ntul ceie ceie e"tends e"tends55 < Clasa nouă nouă va prelua prelua automat automat toate toate campuril campurile e ;i metodel metodele e din clasa clasa de bază5 bază5 = He&ulă e&ulă nescri nescrisă să la mosten mostenir ire: e: c4mpuri c4mpurile le din clasele clasele de bază bază se scriu scriu private private iar metodele se lasă public (sau protected)45 > Clasa deri derivată vată poate poate să preia preia o metodă metodă din din clasa clasa de bază bază si să să o rescri rescrie5 e5 ? Din clasa clasa deriva derivată, tă, pentru pentru a se apela apela o metodă metodă din clasa clasa de bază bază se poate utili utiliza za super5 A Heali ealiza zarrea mo most sten enir irii ii:: la crea crearrea obie obiect ctul ului ui din din clas clasa a deri deriva vattă, se crea crează ză un subobiect din clasa de bază ba ză (ca si cum ar a r f realizată o compozitie către acesta)5 B 2nitializ 2nitializare area a subobiectul subobiectului ui din clasa clasa de bază: doar doar prin prin construc constructor5 tor5 F Constructo Constructorul rul clasei clasei de bază bază este apelat apelat intotdea intotdeauna una inaintea inaintea constru constructorul ctorului ui clasei clasei derivate5 1N 'entru 'entru apel constructor al cl de bază cu ar&umente: super ( ar&umente) /intaa compoziEiei7
1 !e plasează plasează o reer reerină ină cătr către e un obiect obiect nou nou Jntr-o Jntr-o clasă clasă nouă 9 Heeri eerinte ntele le nou creat create e se initiali initializea zează ză la valoar valoarea ea null -Q trebuie trebuie initial initializa izate te e"plicit
1 Operatie Operatie intermedi intermediară ară intre intre compoziti compozitie e si a&re a&re&are &are 9 2ntr 2ntr-o -o clas clasă ă se plase plaseaz ază ă un obiec obiectt me memb mbru ru din a 9-a 9-a clas clasă, ă, iar iar clas clasa a nouă nouă va e"pune toate metodele urnizate de obiectul din clasa 9-a 1A
< 'entr entru u reali ealiza zarrea oper operat atii iilo lorr de mo most sten enir ire e E comp compoz ozit itie ie,, este este sufci sufcien entt ca să se importe clasele reutilizate (codul lor sursă nu este necesar) 9ecanismul upcast:
1 sociere socierea a dintre dintre numele numele metodei metodei si corpul corpul metode metodeii 3 le&are le&are (bindin&)5 (bindin&)5 9 arl* bindin&: bindin&: atunci atunci cand cand le&ar le&area ea se ace la la compilar compilare5 e5 < ate ate bindin bindin&: &: atunci atunci cand cand le&ar le&area ea se ace ace la e"ecu e"ecutie tie,, e"act e"act inainte inainte de e"ecut e"ecutia ia eectiva a metodei5 = ate bindin& bindin& L d*namic d*namic bindin& bindin& sau sau runtim runtime e bindin&5 bindin&5 > ate bindin&: bindin&: necesită necesită un mecanis mecanism m pentru identif identifcar carea ea tipului tipului la e"ecuti e"ecutie e (H@@2) (H@@2) 3 pentru a se identifca in mod corect corpul metodei care trebuie trebuie apelat5 ? 2n #ava #ava se util utiliz izea eaza za late late bind bindin in& & pent pentru ru oric orice e apel apel de me meto todă dă,, cu e"cept ceptia ia metodelor static si fnal (private e implicit fnal pt ca o metoda private nu poate f mostenita)5 A Campurile Campurile si element elementele ele static static sunt rezolv rezolvate ate la compilar compilare5 e5 B e&are e&area a construct constructorilo orilorr este este realiz realizata ata la compilar compilare e &sa vs. &slikea :
1 Helatie elatie de mostenir mostenire e de tip is-a: is-a: clasa derivat derivată ă doar suprascri suprascrie e interaa interaa clasei clasei de bază5 9 Helatie elatie de mo moste stenir nire e de tip is-li$ is-li$e-a e-a:: clasa clasa derivată derivată contine contine metode metode suplimen suplimentar tare e aă de clasa de bază5 < Helaia elaia de substitu substituie ie:: a o relatie elatie de tip is-a substitu substitutia tia este este pură: orice orice mesa mesa trimis clasei derivate poate f trimis si clasei de bază (rezolvarea mesaului se ace prin upcast) a o relaie de tip is-li$e-a: partea e"tinsă din clasa derivată nu mai este disponibilă prin upcast (prin adresar ad resarea ea clasei de bază)5 = Do8ncast: Do8ncast: operaia operaia inver inversă să upcast 3 nu nu este o opera operaie ie &arantată, &arantată, in in sensul sensul in care care nu stim e"act clasa derivată către care se ace do8ncast5 > #ava verifcă verifcă orice orice convers conversie ie (cast), (cast), si daca nu se poate poate realiza realiza se aruncă aruncă o e"cept e"ceptie ie de tipul ClassCast"ception Containere7
1 ecesa ecesare re datori datorita ta aptulu aptuluii ca nu stim de la desi&n desi&n numarul numarul de obiecte obiecte necesar necesare e pentru a rezolva o anumita problema5 9 Container Containerele ele sunt sunt siruri siruri de reerin reerinte te catre catre alte obiecte5 obiecte5 < le se e"pandeaz e"pandeaza a automat automat pentru pentru a salva salva noi noi obiecte, obiecte, dupa dupa necesit necesitati5 ati5 = 9 tipuri tipuri de de liste: liste: rr rra* a*ist ist,, in$e in$edi dist5 st5 1B
> Contai Container nerele ele in #ava #ava sunt sunt create create sa pastreze pastreze obiect obiecte e de tipul tipul Obect. Obect. -Q ele pot salva orice5 ? 'ot apar aparea ea e"ce e"cept ptii ii la Do8n Do8nca cast st la runt runtim ime, e, timp timp de e"ecut ecutie ie cres crescu cutt dator datorit ită ă operaiei de Do8ncast Cuvantul c-eie t-is7
1 2n fecare fecare me metod toda a apelat apelata, a, reerin reerinta ta obiectul obiectului ui sub care care se apeleaz apeleaza a me metod toda a este este transmisa in metoda sub orma reerintei tis 9 tis poate f utiliza utilizatt doar in interi interiorul orul metode metodelor lor ne-stat ne-statice ice < 2n interior interiorul ul unei metode metode dinstr dinstr-o -o clasa, la la apelul unei unei metode metode din din clasa curenta, curenta, nu este nevoie sa se utilizeze tis = @is este este recven recventt utilizat utilizat in retur return, n, pentru pentru a returna returna obiectul obiectul curent curent Clase astracte7
1 Dintr-o Dintr-o clasa abstract abstracta a nu se poate poate instantia instantia nu se se poate instantia instantia si olose oloseste ste doar la dezvoltarea ulterioara a unor clase ce descriu obiecte concrete5 9 'ot 'ot contine contine obiecte obiecte ara nici o imple implementa mentare re55 < ste ste defnit defnita a prin prin cuvant cuvantul ul ceie ceie abstra abstract5 ct5 = 'une 'une la dispoziti dispozitia a subclaselor subclaselor un un model model complet complet pe care care sa-l implem implementez enteze5 e5 > u se pot pot crea crea obiecte obiecte din din clasa clasa abstract abstract L Q eroar eroare e la compila compilare5 re5 ? re cel putin putin o metoda metoda abstracta abstracta,, care care se impleme implementeaz nteaza a in toate subclasele subclasele.. &nter*ete7
1 !e impl implem ement enteaz eaza a si meto metodel dele e nu au au bloc5 bloc5 9 O clasa care are implementeaza aza o interata ata tre trebuie obli&atori oriu sa spe specifce implementari pentru toate metodele interetei5 < O clas clasa a poat poate e im impl plem emen enta ta ma maii mult multe e inte inter ret ete e L super superin inte ter ret ete e sepa separa rate te prin prin vir&ula 3 mostenire multipla5 = Corpul Corpul unei interet interete e contine contine variabile variabile constante, constante, implici implicitt static si fnal care care trebuie trebuie initializate5 > etode etodele le sunt impli implicit cit public public si nu pot f declar declarate ate cu nici nici un identi identifc fcator ator pblic, pblic, private sau protected5 9osternirea multipla7
1 2n #ava se poate poate e"tind e"tinde e o sin&ura sin&ura clasă si se pot implem implementa enta oricate oricate clase5 clase5 9 Holul inter interetelo etelor: r: sa se poata ace ace upcast upcast la mai mult mult decat decat o clasa clasa de baza
1F
< Daca se poate poate crea crea o clasa de baza baza ara ara defnitii defnitii de metode metode si variab variabile ile membr membre, e, se recomanda sa se creeze interete in locul claselor abstracte5 -2nteretele se pot combina (se e"tinde interetele la el ca si clasele)5 = Colizi Coliziune unea a numelo numelorr la implem implement entar area ea mai multor multor inter interet ete e (daca (daca inter interet etele ele de baza au acelasi nume de metoda cu semnaturi dierite): este o problema daca metodele diera doar prin tip de return LQ eroare eroare la compilare5 compilare5 > Campur Campurile ile care care sunt sunt insera inserate te intr-o intr-o interat interata a devin devin in mod automat automat statis statis si fnal LQ reprezinta reprezinta un mod convenabil pentru a defni constante (similar cu enum)5 ? Camp Campur uril ile e defn defnit ite e in inte inter ret ete e nu pot pot f blan$ blan$ fnals, fnals, ele ele treb trebui uie e init initia iali liza zate te la defnire. &nner classes7
1 9 < = > ?
A B F
!e plase plaseaza aza clas clase e in inter interior iorul ul altor altor clas clase5 e5 2nner classes classes repr reprezint ezinta a un concep conceptt dierit dierit de compozi compozitie5 tie5 De obicei, obicei, clasa clasa e"terioar e"terioara a are o metoda metoda care care returne returneaza aza un obiect obiect din clasa clasa inner5 @ipul @ipul obiectului obiectului din clasa clasa interioara interioara se specifca specifca precum: precum: OuterC OuterClass.2 lass.2nner nnerClass5 Class5 Obiectul Obiectul clasei interio interioare are are un lin$ (reer (reerinta) inta) catre catre obiectul clasei clasei e"terio e"terioare are care care l-a creat5 Obiectul Obiectul clasei clasei interioar interioare e poate accesa accesa membrii membrii obiectului obiectului clasei clasei e"ter e"terioar ioare e ara ca sa fe nevoie de califcare (dreptul de a accesa este asupra tuturor obiectelor membre ale clasei e"terioare5 'entru 'entru a se obtine reeri reerinta nta la obiectul obiectul clasei e"ter e"terioar ioare e (din obiectul obiectul clasei clasei inner) inner) se utilizeaza: Outer@*pe.tis 5 'entru entru a crea crea un obiect obiect din clasa clasa inner inner pornin pornind d de la un obiect obiect din clasa clasa outer outer se poate utiliza: obiectOuter.ne8 5 Clas Clasel ele e inne nner sunt sunt potr potriivite ite pent pentrru a implem pleme enta nta inter ntere ete te:: se reali alizeaza aza ascunderea implementarii
Clase interioare anonime7
1 !unt clase clase interioar interioare e ara nume (clase (clase create create direct direct la momentul momentul utiliz utilizarii arii lor) lor) 9 fnalizeaz fnalizeaza a constructia constructia instruc instructiuni tiuniii care care contine contine defnitia defnitia clasei clasei anonime anonime < Campur Campurile ile din clasel clasele e anonime anonime pot f initia initialilizat zate e cu valor valorii din aara aara (din domeni domeniul ul unde se creaza clasa) = Daca Daca intr-o intr-o clas clasa a anon anonim ima a se dores doreste te a f util utiliz izat at un ar&um ar&umen entt (sau (sau o valo valoar are) e) defnita in aara acesteia, atunci reerinta acesteia trebuie sa fe fnal > Clasel Clasele e anonime anonime nu pot avea avea constr construct uctor, or, dar initia initializ lizari arile le se pot realiz ealiza a in blocul blocul non-static de initializare initializare 9N
? Clasele Clasele interioar interioare e pot f create create static (neste (nested d classes) classes) daca nu se doreste doreste utilizar utilizarea ea reerintei reerintei obiectului e"terior in interiorul clasei inner A Clasele Clasele interioar interioare e parte a unei interet interete e devin automat automat static static public. public. Hol: Hol: crearea crearea de cod comun care sa fe utilizat de toate implementarile implementarile interetei B Oricat Oricat de adanca este este imbri imbricar carea ea claselor claselor nested nested,, aceste acestea a pot accesa accesa obiectel obiectele e membre din clasele e"terioare, indierent de nivelul de imbricare F a mostenir mostenire e dintr-o dintr-o clasa inner, inner, trebuie trebuie urnizat urnizat la constructi constructia a obiectului obiectului un obiect din din clas clasa a inne inner, r, pent pentru ru a se per permi mite te cons constr trui uirrea subsub-ob obie iect ctul ului ui cl. cl. baza baza ( enclosin&ClassHeerence.super enclosin&ClassHeerence.super() () ) 1N Clasele locale unui domeniu de vizibilitate vizibilitate au access la toate variabilele variabilele domeniului respectiv respectiv (inclusiv cele fnal), insa aceste clase nu au specifcator de access Closure: •
un obiect apelabil care retine inormatie despre domeniul de vizibilitate in care a
ost creat (are access la variabilele din domeniul de vizibilitate unde a ost creat)5 -LQ clasa clasa interi interioar oara a este este un closur closure e (deoar (deoarece ece are are o reeri eerinta nta catre catre obiect obiectul ul e"terior si poate sa acceseze inclusiv membrii privati ai clasei e"terioare) Callack : •
un obiect primeste o inormatie care va permite sa apelam obiectul initial la un moment ulterior de timp. !e implementeaza cu clase interioare. Clasa de tip Closure urnizeaza o poată Jn intriorul clasei e"teriore (dar intr-un mod sae 3 nu se necesită ca sa transormam accesul la metodele acestei clase)
&teratori:
1 ste ste un desi desi&n &n patte patterrn5 9 %n obiect obiect de tip iterator iterator este este asociat asociat unei colect colectiiii si permite permite re&asi re&asire rea a ordonata ordonata a obiectelor din colectia respective5 < etoda etoda iterat iterator( or()) a unei unei colec colectii tii55 = etoda etoda ne"t() ne"t() a obiectului obiectului iterator iterator:: produce produce urmatorul urmatorul element element din colectie5 colectie5 > etoda etoda ase"t(): ase"t(): inter intero&ea o&eaza za daca mai mai sunt eleme elemente nte neiterat neiterate5 e5 ? etoda etoda remove remove(): (): ster&e ster&e ultim ultimul ul element element iterat iterat din colectie colectie55 A 2teratori 2teratoriii pot produce produce elemente elementele le colectiei colectiei doar intr intr-o -o sin&ura directi directive5 ve5 B ist2ter ist2terator ator:: urnizat urnizat doar de interata interata ist, ist, poate parcur parcur&e &e elementele elementele colect colectiei iei in ambele directii <iectul Class:
91
1 #ava reali realizeaz zează ă H@@2 H@@2 prin prin interm intermediul ediul obiectului obiectului Class5 Class5 9 cesta cesta contine contine inormatie inormatie reeri reeritoar toare e la tip, inormati inormatie e care poate poate f intero&ată5 intero&ată5 < 'entru 'entru fecar fecare e clasă pe care care o avem avem in pro&ram pro&ram,, e"istă e"istă un obiect obiect Class asociat asociat55 a compilarea compilarea unei noi clase, acest obiect este creat si salvat in fsierul .class5 = a crea crearrea unui unui obie obiect ct dint dintrr-o clas clasă, ă, #/ #/ util utiliz izea ează ză un subs subsis iste tem m numi numitt clas classs loader5 > @oate oate clas clase ele sunt sunt incar ncarca cate te in mod dinamic de către #/ la prima utilizare a acestora (anume cand se ace prima reerinta reerinta la un membru static al clasei)5 ? a incarc incarcar area ea unei clase, clase, se verif verifcă că daca obiectu obiectull Class Class al tipulu tipuluii respect respectiv iv este incarcat, daca nu, se identifcă fsierul .class pe disc, si octetii acestuia sunt verifcati inainte să fe incarcati /istemul de &(< intrun limaj de programare : •
!istemul de 2EO intr-un intr-un limba de pro&ramare pro&ramare trebuie să fe capabil să trateze:!urse dierite de dispozitive de 2EO (fsiere, consola, cone"iuni de retea etc),@ipuri dierite de access access la surse surse (acce (access ss secve secventi ntial, al, access access random random,, access access buZer buZered) ed),@ ,@ipu ipuri ri dierite de lucru cu sursa (binar, la nivel de caracter, la nivel de linie, la nivel de cuvant)
Clasa $ile:
1 Heprezin eprezinta ta un nume a unui fsier fsier sau unui unui set de fsiere fsiere dintr dintr-un -un directo director5 r5 9 eto etoda da list( list()) -Q prod produc uce e un sir sir de !tri !trin& n& car care reprez eprezin inta ta fs fsie ierrele ele reer eerit ite e de obiectul de tip ile5 < ist ist poat poate e f invo invoca cata ta util utiliz izand and un Dir Directo ector* r* ilte ilter, r, pent pentru ru a retur eturna na doar doar acel acele e fsiere pentru care numele respecta un pattern5 = 2nter 2nterata ata ilen ilename ameilter ilter:: me metod toda a accept accept primest primeste e la intrar intrare e obiect obiectul ul de tip ile ile si strin&ul pentru comparare. etoda list din ile apeleaza metoda accept pentru fecare fsier din ile, iar acesta este inserat in lista doar daca accept urnizeaza true5 > Obiectul Obiectul ile ile poate f utilizat utilizat ca sa creemE creemEster ster&emE &emEred redenumi enumim m un directorEfs directorEfsier ier sau un directorEfsier cu o intrea&a cale5 ? -ile -ile poate f utilizat utilizat ca sa citim citim inormati inormatiile ile reeri reeritoar toare e la un fsierEdirec fsierEdirector tor &nput si
1 'entru 'entru intrar intrare: e: clasele clasele 2nput!tr 2nput!tream eam si Header Header cu cu metoda metoda read5 read5 9 'entru 'entru iesir iesire: e: clasele clasele Output! Output!tre tream am si \rite \riterr cu metoda metoda 8rite5 8rite5 < Head si 8rite 8rite lucreaza lucreaza pe octeti octeti (sau siruri siruri de octeti octeti)5 )5 99
= @oate oate clas clasel ele e de 2EO 2EO sunt sunt deri deriva vate te din din aces aceste tea5 a5 -a -a reali ealiza zarrea eec eecti tiva va de 2EO 2EO pro&r pro&rama amator toriiii creaz creaza a insuru insuruir irii de obiect obiecte e din clase clasele le de 2EO (desi& (desi&n n patter patternul nul Decorator)
;ipuri de &nput/tream:
1 +*te +*ter rra ra*2 *2np nput ut!t !trream: eam: permi permite te ca un buZe buZerr de me memo mori rie e sa fe util utiliz izat at ca si un 2nput!tream (din buZer se e"tra& octeti)5 9 !trin&+uZe !trin&+uZer2nput r2nput!tr !tream: eam: conver converteste teste un un !trin& intr intr-un -un 2nput!tr 2nput!tream5 eam5 < ile2nput!t ile2nput!trea ream: m: sursa de intrare intrare e un fsier. fsier. !e urnize urnizeaza aza la construirea construirea obiectul obiectului ui fe un !trin& fe un ile5 = 'iped 'iped2npu 2nput!t t!trream: eam: este este asociat asociat cu un 'ipedO 'ipedOutp utput! ut!tr tream eam (care (care este este urniz urnizat at la construirea obiectului). 2mplementeaza conceptul de 'ipe5 > !e]uence2n !e]uence2nput!t put!trea ream: m: converte converteste ste unul sau mai multe multe 2nput!tr 2nput!tream eam intr-un intr-un sin&ur sin&ur obiect de tip 2nput!tream (la construire se urnizeaza fe un 2nput!tream, fe un numerator de obiecte 2nput!tream)5 ? ilter2 ilter2nput nput!tr !tream eam:: clasa clasa abstra abstracta cta,, inter interata ata pentru pentru decora decorator toriiii care care urniz urnizeaz eaza a tipuri particulare de citire ;ipuri de
1 +*terr +*terra*Out a*Output!tr put!tream: eam: creaza creaza un buZer de memor memorie ie (octeti). (octeti). Datele Datele scrise scrise sunt trimise in acest buZer5 9 ileOutput! ileOutput!tr tream: eam: iesire iesire intr-un intr-un fsier. fsier. !e construie construieste ste obiectul obiectul pe baza unui !trin& sau a unui ile5 < 'ipedOut 'ipedOutput!tr put!tream: eam: in conunctie conunctie cu 'iped2npu 'iped2nput!tr t!tream. eam. 'entru 'entru conceptu conceptull de 'ipe5 = ilterOutp ilterOutput!tr ut!tream: eam: pentru pentru iesire iesire ormatata, ormatata, se implemente implementeaza aza unctionalit unctionalitati ati de scriere
#eader si riter :
1 dau&a dau&a unctional unctionalitate itate pentru pentru 2EO la la nivel nivel de caract caracter er sau %nico %nicode5 de5 9 Clas Clasel ele e sunt sunt adau adau&a &ate te in iera ierarria ia 2npu 2nput! t!tr trea eam m si Outp Output ut!t !trream eam deci deci nu se inlocuieste aceasta ierarie5 < Clase adapter adapter:: 2nput!tr 2nput!treamH eamHeader eader si Output!tr Output!tream\ eam\riter riter55 = oti otivu vull pent pentru ru car care au ost ost crea create te:: sa se per permi mita ta inte interrnati nation onal aliz izar area ea (%ni (%nico code de lucreaza cu caractere pe 1? biti)5 > Hecomandar ecomandare: e: sa se utilizez utilizeze e clase de tip tip Header Header si \rite \riterr ori de cate ori ori e posibil5 posibil5 9<
? a citiri citiri specifce specifce la nivel nivel de octet, octet, sa se utilizeze utilizeze 2nput!t 2nput!trea ream m si Output!tr Output!tream eam /erializare:
1 'astrarea astrarea obiectel obiectelor or dincolo dincolo de de e"ecuti e"ecutia a pro&rame pro&ramelor5 lor5 9 stel stel obiect obiectele ele pot f recup recupera erate te si e"ecu e"ecutia tia restar restartat tata a de la punctul punctul unde a ost ost oprita anterior5 < Orice Orice obiect dintr dintr-o -o clasă care care implement implementeaza eaza !erializ !erializable able poate poate f convertit convertit in sir de octeti si apoi restaurat5 = 'ersist 'ersistentă: entă: durata durata de viata viata a unui obiect obiect e"ista e"ista dincolo dincolo de e"ecuti e"ecutia a unui pro&ram pro&ram55 > 'entru 'entru realiza realizarea rea persiste persistentei, ntei, obiectel obiectele e trebuie trebuie serializate serializate E deserializa deserializate te in mod e"plicit (li&t8ei&t persistence)5 ? 'entr entru u seri serial aliz izar are, e, se crea crează ză un obie obiect ct dint dintrr-un -un tip tip Outp Output ut!t !trream, eam, aces acesta ta este este ^8rapV in interiorul unui ObectOutput!tream si se utilizeaza metoda 8riteObect5 A !erializa !erializarea rea salveaza salveaza intre& intre& 8ebul de obiecte obiecte din spatele obiectului obiectului serializ serializat5 at5 -@i -@ipul pul unui obiect deserializat: &etClass
0ternalize:
1 e"tin e"tinde de inter interata ata !erial !erializa izable ble55 9 a obiectele obiectele deseri deserializ alizate ate cu "ternaliz "ternalizable, able, obiecte obiectele le sunt construit construite e obisnuit obisnuit (cu deault constructor) si apoi se apeleaza metoda read"ternal5 < a obiect obiectele ele "ter "ternal naliz izabl able, e, subobi subobiect ectele ele compon component ente e trebu trebuie ie serial serializa izate te manual manual (in 8rite"ternal) iar la deserializare, ele trebuie recuperate recuperate de pe disc5 = a mostenir mostenire e dintr-o dintr-o clasa "ternaliz "ternalizable, able, se apeleaza apeleaza 8rite"ter 8rite"ternal nal si read"ter read"ternal nal a clasei de baza pentru a se asi&ura serializare serializare E deserializare corecta #;;&7
1 Hun-@ un-@ime @*pe @*pe 2dent 2dentifc ifcati ation on 9 Descoperi Descoperirea rea tipului tipului la e"e e"ecutie cutie si utilizar utilizarea ea acestuia acestuia < 9 tip tipu uri de H@@2: -@raditional radition al 3 la compilare -HeWection: - la e"ecutie [[[ = %pc %pcast: ast: nece necesi sittă reali ealizzare area aut autom omat ata a a H@@2 pent pentrru invoc nvocar are ea auto automa mată tă (polimorfcă) a metodei suprascrise > 'rin rin H@@2 @@2 se poat poate e iden identi tifc fca a tipu tipull e"ac e"actt al unui unui obie obiect ct la e"ec e"ecut utie ie (lim (limba bau ull de pro&ramare are metode pentru a realiza acest lucru)
9=
$inal7
1 declar declara a ca o clasa clasa nu nu poate poate accesa accesa subclas subclase e 9 decl declar arar area ea are are 9 scop scopur uri: i: securitate : unele metode pot astepta ca parametru un obiect al unei clase si nu al •
•
unei sublcase, dar tipul e"act al unui obiect nu poate f aWat cu e"actitate decat in momentul e"ecutiei pro&ramare pro&ramare in spirit orientat obiect: o clasa perecta nu trebuie sa aiba subclase s ubclase
$inalize7 •
ste o metoda ce se implementeaza in vederea vederea oricarui tip ce incapsuleaza o resursa ne&estionata, care trebuie sa suporte fnalizarea, adica RC determina ca un obiect trebuie eliminate din memorie si apeleaza metoda inalize care oera resursei eliberarea corecta, colectarea acesteia
0ecutia unui loc ;ryCatc-$inally7 ;ryCatc-$inally7
1 %n bloc tr* este este urmat urmat de mai multe multe blocur blocurii catc catc si optional optional de un bloc bloc fnall* 9 +locul +locul tr*-catc tr*-catc sta la baza baza sistemului sistemului de de tratare tratare a eror erorilor, ilor, o portiu portiune ne de cod cod nu poate f monitrizata pentru tratarea e"ceptiilor, ara a f inclusa intr-un intr-un astel de bloc < Daca o e"ce e"ceptie ptie este este aruncata aruncata in blocul blocul tr*, tr*, aceasta aceasta este prinsa prinsa in blocul blocul catc corespunzator, dupa care blocul acelui catc se e"ecuta e"ecuta = inall* inall* este olosit olosit atunci atunci cand cand dorim dorim ca anumite anumite portiuni portiuni de de cod sa se e"ecute e"ecute indiZerent daca blocul tr* s-a e"ecutat normal sau a &enerat o e"ceptie e"ceptie LQ blocul fnall* se e"ecuta e"ecuta indiZerent de modul in care blocul tr* si-a terminat e"ecutia Clauza t-ro:s7
1 Daca o metoda metoda contine contine cod cod care care ar putea putea &enera &enera o e"cepti e"ceptie, e, si totusi, totusi, in cadrul cadrul metodei nu e"ista e"ista un cod tr*-catc care care sa prinda acea e"ceptie e"ceptie LQ metoda trebuie sa specifce prin clauza tro8s ca poate &enera acea e"ceptie 9 u se supun acestei acestei re&uli re&uli e"ce e"ceptiil ptiile e care sunt sunt subclase subclase ale claselo claselorr rror rror si Hun@ime"ception 9>
Clauza t-ro:7 •
'entru 'entru a &enera manual o e"ceptie in urma unei stari pe care o consideram eronata, olosim cuvantul ceie tro85
6olimorfsm7
1 celasi celasi nume se poate poate reer reerii la 9 metode metode dierite. dierite. 9 s ste te de 9 e eluri: uri: Overridin& Overridin& 3 metoda cu acceasi semnatura cu o alta a lta din clasa parinte5 Overridin& 3 doua sau mai multe metode in acelasi clasa cu acelasi nume, dar • •
semnaturi dierite.
1 9 < = > ? A B F
'entru 'entru fecar fecare e clasa clasa compil compilata ata se produce produce un un fsier fsier .class .class %n pro&ram pro&ram este compus compus dintr-o dintr-o colectie colectie de fsier fsiere e .class .class cest cestea ea pot pot f ariv arivate ate:: fsie fsierr .ar .ar iecare iecare fsier .ava .ava incepe incepe cu mentiunea mentiunea ^pac$a& ^pac$a&eV: eV: se indica indica numele numele pac$a&eulu pac$a&euluii din care vor ace parte clasele Clasele Clasele utiliza utilizate te care care ac parte parte din alt alt pac$a&e pac$a&e se importa importa cu cu ^importV ^importV @oate clasele clasele dintr-un dintr-un pac$a&e pac$a&e vor f colectate colectate intr-un intr-un sin&ur subdire subdirector ctor Conven Conventie tie pentru pentru denumi denumirrea pac$a& pac$a&eur eurilo ilor: r: utilizar utilizarea ea domeni domeniilo ilorr de inter internet net in ordine inversa Calea Calea root pentr pentru u director directorare: are: variabila variabila sistem sistem C!!' C!!' @_ C!!' C!!'@_ poate poate include include directo directoare are sau sau fsiere fsiere .ar
1 Desi Design gn pat patte tern rnul ul 6ro 6roy y
ste sablonul care permite crearea unui inlocuitor pentru un obiect, inlocuitor care sa controleze accesul la obiectul respectiv. respectiv. cest sablon se mai numeste surogat. !ablonul Proxy se se aplica in &eneral in situatiile in care este necesara o reerinta la un obiect mai comple"a si mai We"ibila decat un simplu pointer. pointer. Cateva dintre cazurile in care sablonul 'ro"* poate f utilizat sunt: necesitatea unui reprezentant reprezentant local al unui obiect aWat a Wat in alt spatiu de adrese (pe alta masina) decat clientul sau. 2n acest caz obiectul pro"* care care oaca rolul reprezentantului reprezentantului local se mai numeste remote pro"* pro"* sau ambasador5 crearea crearea la comanda a obiectelor costisitoare (cum este cazul din e"emplul prezentat prezentat in para&raul anterior). 2n acest caz obiectul pro"* pro"* se mai numeste pro"* virtual, el dand 9?
iluzia e"istentei e"istentei unui obiect server inainte ca acesta sa f ost creat5 daca se pune problema ca diversi clienti sa aibe a ibe drepturi de acces dierite la un anumit obiect server, se poate olosi cate un obiect pro"* care care sa reprezinte reprezinte serverul din perspectiva fecarei fecarei cate&orii de clienti. 2n acest caz, obiectul pro"* se mai numeste pro"* de protectie5 un obiect pro"* poate uca rolul unui pointer inteli&ent, care poate eectua operatii suplimentare suplimentare la accesarea obiectului reerit. semenea operatii suplimentare tipice sunt: o
o
o
contorizarea contorizarea reerintelor la un anumit obiect, e"istente la un moment dat. cest lucru permite ster&erea obiectului respectiv cand se constata ca nu mai e"ista nici o reerinta la el. De e"emplu, un &arba&e collector ar putea utiliza acest principiu de lucru5 incarcarea incarcarea in memorie a unui obiect ob iect persistent atunci cand el este reerit prima oara5 asi&urarea blocarii obiectului reerit, pe durata accesarii lui, astel incat sa nu poata f modifcat
`ablonul 'ro"* 'ro"* asi&ură un suro&at sau un Jnlocuitor pentru alt obiect pentru a controla accesul la acesta Dele&area la distan0ă controlează accesul către un obiect nelocal
Dele&area virtuală controlează accesul la o resursă costisitor de creat
Dele&area de protec0ie controlează controlează accesul la o resursă pe baza unor drepturi de acces
Heerin0ă inteli&entă: copierea la scriere (cop* on 8rite), blocarea unui ob iect, numărarea reerin0elor, cacin&
2!.Design patternul &terator
!ablonul 2terator asi&ura o cale de accesare secventiala a elementelor unui obiect a&re&at, ara a e"pune reprezentarea reprezentarea lui de baza.
etodele 2teratorului pot avea nume dierite
#ava 2terator: ne"t(), ase"t(), remove()
C 2numerator: Current, ovee"t(), Heset()
"istă 2teratori interni şi e"terni e"terni
9A
2teratorul e"tern e"tern este controlat de client, ca Jn e"emplul e"emplul precedent (cu metoda metoda ne"t)
2teratorul intern este controlat de 2teratorul Jnsuşi, căruia trebuie să i se s pună ce opera0ii să eectueze eectueze cu elementele pe care le parcur&e parcur&e
`ablonul se utilizează pentru: accesa con0inutul unui obiect a&re&at a&re&at ără a e"pune reprezentarea reprezentarea internă internă
asi&ura suport pentru pentru mai multe multe traversări ale obiectelor a&re&ate a&re&ate
urniza o intera0ă uniormă uniormă pentru traversarea traversarea structurilor a&re&ate a&re&ate dierite
'entru a suporta o itera0ie polimorfcă
!uportă varia0ii Jn traversarea unui a&re&at a &re&at Obiectele a&re&ate pot f traversate Jn mai multe eluri şi de mai multe ori
Obiectele 2terator simplifcă intera0a &re&at
&re&atul are nevoie de o metodă unică pentru crearea 2teratorului
!cade cuplarea dintre client şi ş i obiectele a&re&ate
Creşte coeziunea obiectului a&re&at prin eliminarea necesită0ii de a asi&ura el Jnsuşi traversarea
2". Design patternul /trategy
!cop: !e defneşte o amilie de al&oritmi5 se Jncapsulează fecare mebru5 al&oritmii se ac interscimbabili. plicabilitate 3 ulte clase Jnrudite dieră doar prin comportament 3 !e olosesc diverse variante ale unui al&oritm 3 l&oritmii olosesc date irelevante irelevante pentru client 3 O clasă defneşte comportamente multiple, defnite de conditii &ardă la Jnceputul metodelor.
9B