59
7/21/2019 java teorie hatz http://slidepdf.com/reader/full/java-teorie-hatz 1/59 Desing patternul Proxy. Proxy: Un obiect substitut, transmis in locul unui obiect real, pentru a furniza prelucrari aditionale inainte de a transmite operatiile catre obiectul real …Dynamic proxy: se creaza obiectul proxy dinamic si se trateaza apelurile catre metodele proxied in mod dinamic Design patternul Strategy: -Crearea unei metode care sa aibă comportament diferit in functie de tipul argumentului care se  prezinta la intrare; -etoda contine o parte fixa care este apelata de fiecare data si o parte care !ariază "strategia#; -$n cazul in care nu se utilizează interfetele, dacă dorim să aplicăm metoda "strategia# unui obiect dintr-o clasă care nu face parte din ierar%ie, nu se poate; - &' in exemplul (pply si Procesor, exista o cuplare foarte puternica intre metoda (pply)proces si clasa Procesor, astfel incat aceasta metoda nu poate fi aplicata decat obiectelor din ierar%ia Procesor, si nicidecum altor obiecte din alte ierar%ii; Procesor se creaza ca si o interfata, iar clasele care doresc sa faca parte din strategie !or implementa interfata scrisa Design patternul Adapter:  -se scrie cod care preia la intrare interfata existenta si care sa produca interfata de care este ne!oie in program; -Prin decuplarea interfetei de implementare se permite ca o interfata sa fie aplicata mai multor implementari, deci codul de!ine mult mai facil de reutilizat Design patternul FactoryMethod:  -in loc sa se apeleze un constructor in mod direct, pentru crearea unui obiect se apeleaza o metoda de creere a obiectului dintr-o clasa *actory) Clasa *actory implementeaza o interfata care specifica metoda de creere; -(stfel, se poate sc%imba la runtime o implementare a unei functionalitati cu alta Control framewors: -(pplication frame+or: un set de clase proiectate sa rezol!e un tip anume de problemă "design patternul !emplate Method#; -Pentru aplicarea application frame+or se mostenesc din clasele de baza si se sc%imba implementarea prin o!erriding; -Codul suprascris este cel care customizeaza solutia la cazul particular; -emplate et%od: contine structura de baza a algoritmului, iar partile specifice sunt apeluri la metode care pot fi o!erride; -(stfel, se separa partile nesc%imbate ale algoritmului de cele flexibile; -Control frame+or: un tip particular de application frame+or prin care sistemul raspunde la e!enimentele generate "sistem e!ent-dri!en# . de exemplu /U$s; -$n implementarea Control frame+or, inner class sunt utilizate pentru a exprima di!ersele actiuni "metoda action# Design patternul Decorator:  -Decoratorul trebuie sa aiba aceasi interfata cu obiectele decorate; -Decoratorul poate să extinda interfata acestor obiecte; -Clasele *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 0i funcţionalitate identice "termenul de clasa se substituite termenului de tip# %ntefa&a: metode "func1ionalitate#: cererile care pot fi adresate unui obiect particular dintr-o clasa %mplementarea: mod concret de realizare a func1ionalită1ii Mo'tenire: o clasă nouă se aseamănă "extinde# o clasă existentă Mostenire ( cum se diferentia)a clasa deri*ata de clasa de #a)a+ -Prin adaugare de noi metode suplimentare; -2c%imbarea comportamentului unor metode existente in clasa de baza

java teorie hatz

  • Upload
    demiii

  • View
    94

  • Download
    1

Embed Size (px)

DESCRIPTION

hatz

Citation preview

Page 1: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 1/59

Desing patternul Proxy. Proxy: Un obiect substitut, transmis in locul unui obiect real, pentru a furniza prelucrariaditionale inainte de a transmite operatiile catre obiectul real …Dynamic proxy: se creazaobiectul proxy dinamic si se trateaza apelurile catre metodele proxied in mod dinamic

Design patternul Strategy:-Crearea unei metode care sa aibă comportament diferit in functie de tipul argumentului care se prezinta la intrare; -etoda contine o parte fixa care este apelata de fiecare data si o parte care!ariază "strategia#; -$n cazul in care nu se utilizează interfetele, dacă dorim să aplicăm metoda"strategia# unui obiect dintr-o clasă care nu face parte din ierar%ie, nu se poate; - &' in exemplul(pply si Procesor, exista o cuplare foarte puternica intre metoda (pply)proces si clasa Procesor,astfel incat aceasta metoda nu poate fi aplicata decat obiectelor din ierar%ia Procesor, sinicidecum altor obiecte din alte ierar%ii; Procesor se creaza ca si o interfata, iar clasele caredoresc sa faca parte din strategie !or implementa interfata scrisa

Design patternul Adapter:

 -se scrie cod care preia la intrare interfata existenta si care sa produca interfata de care estene!oie in program; -Prin decuplarea interfetei de implementare se permite ca o interfata sa fieaplicata mai multor implementari, deci codul de!ine mult mai facil de reutilizatDesign patternul FactoryMethod: -in loc sa se apeleze un constructor in mod direct, pentru crearea unui obiect se apeleaza ometoda de creere a obiectului dintr-o clasa *actory) Clasa *actory implementeaza o interfata carespecifica metoda de creere; -(stfel, se poate sc%imba la runtime o implementare a uneifunctionalitati cu altaControl framewors: -(pplication frame+or: un set de clase proiectate sa rezol!e un tipanume de problemă "design patternul !emplate Method#; -Pentru aplicarea applicationframe+or se mostenesc din clasele de baza si se sc%imba implementarea prin o!erriding;

-Codul suprascris este cel care customizeaza solutia la cazul particular; -emplate et%od:contine structura de baza a algoritmului, iar partile specifice sunt apeluri la metode care pot fio!erride; -(stfel, se separa partile nesc%imbate ale algoritmului de cele flexibile; -Controlframe+or: un tip particular de application frame+or prin care sistemul raspunde lae!enimentele generate "sistem e!ent-dri!en# . de exemplu /U$s; -$n implementarea Controlframe+or, inner class sunt utilizate pentru a exprima di!ersele actiuni "metoda action#

Design patternul Decorator: -Decoratorul trebuie sa aiba aceasi interfata cu obiectele decorate; -Decoratorul poate să extindainterfata acestor obiecte; -Clasele *ilter sunt radacina abstracta a claselor de decorator "#iect: un obiect are o stare, un comportament si o identitateClas$: set de obiecte cu caracteristici 0i funcţionalitate identice "termenul de clasa se substituitetermenului de tip#%ntefa&a: metode "func1ionalitate#: cererile care pot fi adresate unui obiect particular dintr-o clasa%mplementarea: mod concret de realizare a func1ionalită1iiMo'tenire: o clasă nouă se aseamănă "extinde# o clasă existentă

Mostenire ( cum se diferentia)a clasa deri*ata de clasa de #a)a+ -Prin adaugare de noimetode suplimentare; -2c%imbarea comportamentului unor metode existente in clasa de baza

Page 2: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 2/59

"o!erriding#; -3elatia is-a: clasa deri!ata doar o!erride metode din clasa de baza "principiulsubstitutiei pure#; -3elatia is-lie-a: clasa deri!ata adauga elemente noi interfetei clasei de baza"metodele noi nu sunt accesibile din clasa de baza . substitutia nu mai este pura#

Mosternirea multipla: -$n 4a!a se poate extinde o singura clasă si se pot implementa oricateclase; -3olul interfetelor: sa se poata face upcast la mai mult decat o clasa de baza; Daca se poatecrea o clasa de baza fara definitii de metode si !ariabile membre, se recomanda sa se creezeinterfete in locul claselor abstracte; -$nterfetele se pot combina "se extinde interfetele la fel ca siclasele#; -Coliziunea numelor la implementarea mai multor interfete "daca interfetele de baza auacelasi nume de metoda cu semnaturi diferite#: este o problema daca metodele difera doar printip de return &' eroare la compilare; -Campurile care sunt inserate intr-o interfata de!in in mod

automat statis si final &' reprezinta un mod con!enabil pentru a defini constante "similar cuenum#; -Campurile definite in interfete nu pot fi blan finals, ele trebuie initializate la definire

Containere: 5ecesare datorita faptului ca nu stim de la design numarul de obiecte necesare pentru a rezol!a o anumita problema; -Containerele sunt siruri de referinte catre alte obiecte; -6lese expandeaza automat pentru a sal!a noi obiecte, dupa necesitati; -7 tipuri de liste: (rray8ist,8ined8ist; -Containerele in 4a!a sunt create sa pastreze obiecte de tipul 9bect) -' ele pot sal!aorice; -Pot aparea exceptii la Do+ncast la runtime, timp de executie crescut datorită opera iei deț

Do+ncastCrearea o#iectelor si ciclul de *iata:-*iecare obiect necesita resurse "memorie#, crearea si distrugerea obiectelor de!in importante;

-4a!a utilizeaza in mod exclusi! alocarea dinamica a memoriei; -Pentru orice obiect, trebuieutilizat ne+ la creeere; -9biectele sunt alocate in zona de %eap; -Distrugerea obiectelor esterealizata automat de catre garbage collector ; -GC identifică momentul in care un obiect nu maieste utilizat i il dezalocăș

"rgani)area memoriei in ,a*a: -ona egistru: registrele procesorului, nu a!em access directla ele; -Sti*a: zona de sti!a memoreaza referintele catre obiecte; -eap: in aceasta zona suntalocate toate obiectele "la apelul ne+#; -Spatiu de stocare non-AM: obiecte care exista inafara spatiului de memorie a programului "persistenta obiectelor#

Siruri /Arrays0 in ,a*a; -limba de programare orientat safety; -8a crearea unui (rray se creazaun sir de referinte fiecare initializata la !aloarea null; - &' fiecare membru al sirului trebuieinitializat; -4a!a nu permite utilizarea unui indice in afara range-ului array-ului "se arunca oexceptie#Clase::class (ype5ame < => class body >=?Clasele contin:-Campuri; -etode Modul de accesare aunui camp1metoda obect3eference)member Pentru datele din tipuri primiti!e se garanteazainitializarea la !alori implicite "false si @#Metode2 argumente si tip de return 3eturnypemet%od5ame"=> argument list >=# < => met%od body>=?"peratori:

Page 3: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 3/59

-oti operatorii produc o !aloare prin aplicarea lor; -6i pot produce si side-effects "modificarea!alorii operanzilor#; -(liasing: la transmiterea unui obiect ca si argument intr-o metoda, setransmite o referinta, deci modificarea !alorii in metoda afecteaza !aloarea obiectului din afarametodei; -9peratorii AA si . au forma postfixata si prefixata; -9peratorii && si &B (plicati pereferinte de obiecte, compara referintele, si nu continutul obiectelor

3ar#age collector-ul dezaloca memoria alocata prin ne+, atunci cand obiectele nu mai suntfolosite; -colecteaza memoria ramasa alocata in obiectele care nu mai sunt utilizate sicompacteaza %eap-ul, rearanand obiectele alocate; -2top-and-copy: /C-ul opreste programul,scaneaza toate referintele de pe stac si copiaza obiectele identificate in noul %eap) Ceea ceramane e garbage-ul care trebuie dezalocat, iar noul %eap e dea compactat

Metoda finali)e: -permite operatii de stergere inainte ca obiectele sa fie supuse garbagecollectorului; -4a!a nu garanteaza apelarea acestei metode, programatorul nu are control asupramomentului cand se apeleaza garbage collectorul; -*inalize se utilizeaza in general pentru aimplementa termination conditions pentru un obiect "de exemplu inc%iderea unui fisier#

Specificatorii de access pu#lic2 pri*ate2 protected:-(ccess la ni!el de pacage: accesul implicit al membrilor care nu au nici un specificator;-Pentru clasele din afara pacage-ului, acesti membrii sunt considerati pri!ate; -(ccess public:orice clasa de oriunde poate accesa membrul respecti!e; -Clasele mostenite: pot accesa membrii protected din clasa de baza, ca si cum acestia ar fi membrii public; -embrii pri!ate: pot fiaccesati doar in clasa in care au fost definite; -$nterfata claselor: public;-$mplementarea functionalitatilor: pri!ate 

Sintaxa mostenirii: -ostenirea se realizează ori de cte ori se crează o clasă: se mo tene te din 9bectș ș ; -ostenire:clasa nouă se aseamănă cu clasa !ec%e: cu!ntul c%eie extends; -Clasa nouă !a prelua automat

toate campurile i metodele din clasa de bazăș

; -3egulă nescrisă la mostenire: cmpurile dinclasele de bază se scriu pri!ate iar metodele se lasă public "sau protected#; -Clasaderi!ată poate să preia o metodă din clasa de bază si să o rescrie; -Din clasa deri!ată, pentru a seapela o metodă din clasa de bază se poate utiliza super; -3ealizarea mostenirii: la creareaobiectului din clasa deri!ată, se crează un subobiect din clasa de bază "ca si cum ar fi realizată ocompozitie către acesta#; -$nitializarea subobiectului din clasa de bază: doar prin constructor;-Constructorul clasei de bază este apelat intotdeauna inaintea constructorului clasei deri!ate;-Pentru apel constructor al cl de bază cu argumente: super " argumente#Final:itemii final: nu pot fi sc%imbate " de exemplu, intr-o clasă deri!ata#; -Datele final: Constante lacompilare care nu se sc%imba ulterioralori initializate la runtime care nu se doreste sa fiesc%imbate2tatic final: au o singură locatie de stocare a datei; -*inal aplicat la o referinta: facereferinta constantă, !aloarea obiectului poate fi modificata; -Elan final: campuri declarate finalcare nu sunt initializate -' ele trebuie initializate inainte de utilzare; -(rgumente final: Fn metodănu se poate sc%imba !aloarea către care arată referinta; -etode final: nu pot fi sc%imbate prinmostenire; -etodele final sunt tratate inline de către compilator; -Clase final: se in%ibămostenirea din clasa respecti!ăMecanismul upcast:

Page 4: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 4/59

 -(socierea dintre numele metodei si corpul metodei . legare "binding#; -6arly binding: atuncicand legarea se face la compilare; -8ate binding: atunci cand legarea se face la executie, exactinainte de executia efecti!a a metodei; -8ate binding & dynamic binding sau runtime binding;-8ate binding: necesită un mecanism pentru identificarea tipului la executie "3$# . pentru a seidentifica in mod corect corpul metodei care trebuie apelat; -$n 4a!a se utilizeaza late binding

 pentru orice apel de metodă, cu exceptia metodelor static si final "pri!ate e implicit final pt ca ometoda pri!ate nu poate fi mostenita#; -Campurile si elementele static sunt rezol!ate lacompilare; -8egarea constructorilor este realizata la compilare%s-a *s. %s-lie-a: -3elatie de mostenire de tip is-a: clasa deri!ată doar suprascrie interfa a clasei de bazăț ; -3elatiede mostenire de tip is-lie-a: clasa deri!ată contine metode suplimentare fa ă de clasa de bazăț ;-3ela ia de substitu ie: 8a o relatie de tip is-a substitutia este pură: orice mesa trimis claseiț ț

deri!ate poate fi trimis si clasei de bază "rezol!area mesaului se face prin upcast# 8a o rela ie deț

tip is-lie-a: partea extinsă din clasa deri!ată nu mai este disponibilă prin upcast "prin adresareaclasei de bază#; -Do+ncast: opera ia in!ersă upcast . nu este o opera ie garantată, in sensul inț ț

care nu stim exact clasa deri!ată către care se face do+ncast; -4a!a !erifică orice con!ersie

"cast#, si daca nu se poate realiza se aruncă o exceptie de tipul ClassCast6xceptionClase a#stracte:-3olul clasei $nstrument "!arful ierar%iei#: să creeze o interfa ă comună claselor deri!ate; - &ț 'obiectele din clasa $nstrument nu au sens "dpd! logic#; - &' clasa $nstrument: clasă abstractă;-Pentru a e!ita astfel de erori la executie există un mecanism prin care se declară claseleabstracte: cu!antul c%eie abstract ; -Clasă abstractă: are cel putin o metodă abstractă "metodădeclarată abstract si care nu are corp#; -2e generează eroare la compilare dacă se incearcă creareaunui obiect dintr-o clasă abstractă; -8a mostenire dintr-o clasă abstractă, metoda abstractă trebuiesuprascrisă, altfel clasa deri!ată de!ine si ea abstractă%nner classes: -2e plaseaza clase in interiorul altor clase; -$nner classes reprezinta un concept diferit de

compozitie; -De obicei, clasa exterioara are o metoda care returneaza un obiect din clasa inner;-ipul obiectului din clasa interioara se specifica precum: 9uterClass)$nnerClass; -9biectulclasei interioare are un lin "referinta# catre obiectul clasei exterioare care l-a creat; -9biectulclasei interioare poate accesa membrii obiectului clasei exterioare fara ca sa fie ne!oie decalificare "dreptul de a accesa este asupra tuturor obiectelor membre ale clasei exterioare; -Pentrua se obtine referinta la obiectul clasei exterioare "din obiectul clasei inner# se utilizeaza:9uterype)t%is ; -Pentru a crea un obiect din clasa inner pornind de la un obiect din clasa outer se poate utiliza: obiect9uter)ne+ ;- Clasele inner sunt potri!ite pentru a implementa interfete: serealizeaza ascunderea implementariiClosures 4 call#acs:Closure: un obiect apelabil care retine informatie despre domeniul de !izibilitate in care a fostcreat "are access la !ariabilele din domeniul de !izibilitate unde a fost creat#; -&' clasa interioaraeste un closure "deoarece are o referinta catre obiectul exterior si poate sa acceseze inclusi!membrii pri!ati ai clasei exterioare#Call#ac : un obiect primeste o informatie care !a permite sa apelam obiectul initial la unmoment ulterior de timp) 2e implementeaza cu clase interioare) Clasa de tip Closure furnizeaza o poată Fn intriorul clasei exteriore "dar intr-un mod safe . nu se necesită ca sa transformamaccesul la metodele acestei clase#

Page 5: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 5/59

%teratori:- 6ste un design pattern; -Un obiect de tip iterator este asociat unei colectii si permite regasireaordonata a obiectelor din colectia respecti!e; -etoda iterator"# a unei colectii; -etoda next"# aobiectului iterator: produce urmatorul element din colectie; -etoda %as5ext"#: interog%eazadaca mai sunt elemente neiterate; -etoda remo!e"#: sterge ultimul element iterat din colectie;

-$teratorii pot produce elementele colectiei doar intr-o singura directi!e; -8ist$terator: furnizatdoar de interfata 8ist, poate parcurge elementele colectiei in ambele directii

Conceptul de exceptie: in domeniul de !izibilitate unde apare eroarea de obicei nu stim cum satratam eroarea, insa stim ca nu putem să continuăm cu eroarea, astfel că transmitem eroarea sprerezol!are la un domeniu de !izibilitate exterior 

"#iectul Class: -4a!a realizează 3$ prin intermediul obiectului Class; -(cesta contineinformatie referitoare la tip, informatie care poate fi interogată; -Pentru fiecare clasă pe care oa!em in program, există un obiect Class asociat; 8a compilarea unei noi clase, acest obiect estecreat si sal!at in fisierul )class; -8a crearea unui obiect dintr-o clasă, 4 utilizează un subsistem

numit class loader; oate clasele sunt incarcate in mod dinamic de către 4 la prima utilizare aacestora "anume cand se face prima referinta la un membru static al clasei#; 8a incarcarea uneiclase, se !erifică daca obiectul Class al tipului respecti! este incarcat, daca nu, se identificăfisierul )class pe disc, si octetii acestuia sunt !erificati inainte să fie incarcati

Sistemul de %1" intr-un lim#a5 de programare:-2istemul de $=9 intr-un limba de programare trebuie să fie capabil să trateze:2urse diferite dedispoziti!e de $=9 "fisiere, consola, conexiuni de retea etc#,ipuri diferite de access la surse"access sec!ential, access random, access buffered#,ipuri diferite de lucru cu sursa "binar, lani!el de caracter, la ni!el de linie, la ni!el de cu!ant#Clasa File:- 3eprezinta un nume a unui fisier sau unui set de fisiere dintr-un director; -etoda

list"# -' produce un sir de 2tring care reprezinta fisierele referite de obiectul de tip *ile; -8ist poate fi in!ocata utilizand un Directory *ilter, pentru a returna doar acele fisiere pentru carenumele respecta un pattern; -$nterfata *ilename*ilter: metoda accept primeste la intrare obiectulde tip *ile si stringul pentru comparare) etoda list din *ile apeleaza metoda accept pentrufiecare fisier din *ile, iar acesta este inserat in lista doar daca accept furnizeaza true; -9biectul*ile poate fi utilizat ca sa creem=stergem=redenumim un director=fisier sau un director=fisier cu ointreaga cale; -*ile poate fi utilizat ca sa citim informatiile referitoare la un fisier=director %nput si "utput: -Pentru intrare: clasele $nput2tream si 3eader cu metoda read; -Pentru iesire:clasele 9utput2tream si Griter cu metoda +rite; -3ead si +rite lucreaza pe octeti "sau siruri deocteti#; -oate clasele de $=9 sunt deri!ate din acestea; -8a realizarea efecti!a de $=9 programatorii creaza insuruiri de obiecte din clasele de $=9 "design patternul Decorator#!ipuri de %nputStream:- Eyte(rray$nput2tream: permite ca un buffer de memorie sa fie utilizatca si un $nput2tream "din buffer se extrag octeti#; -2tringEuffer$nput2tream: con!erteste un2tring intr-un $nput2tream; *ile$nput2tream: sursa de intrare e un fisier) 2e furnizeaza laconstruirea obiectului fie un 2tring fie un *ile; -Piped$nput2tream: este asociat cu unPiped9utput2tream "care este furnizat la construirea obiectului#) $mplementeaza conceptul dePipe; -2eHuence$nput2tream: con!erteste unul sau mai multe $nput2tream intr-un singur obiectde tip $nput2tream "la construire se furnizeaza fie un $nput2tream, fie un 6numerator de obiecte

Page 6: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 6/59

$nput2tream#; -*ilter$nput2tream: clasa abstracta, interfata pentru decoratorii care furnizeazatipuri particulare de citire!ipuri de "utputStream: -Eyte(rray9utput2tream: creaza un buffer de memorie "octeti#)Datele scrise sunt trimise in acest buffer; -*ile9utput2tream: iesire intr-un fisier) 2e construiesteobiectul pe baza unui 2tring sau a unui *ile; -Piped9utput2tream: in conunctie cu

Piped$nput2tream) Pentru conceptul de Pipe; -*ilter9utput2tream: pentru iesire formatata, seimplementeaza functionalitati de scriereeader si 6riter:- (dauga functionalitate pentru $=9 la ni!el de caracter sau Unicode; -Claselesunt adaugate in ierar%ia $nput2tream si 9utput2tream deci nu se inlocuieste aceasta ierar%ie;-Clase adapter: $nput2tream3eader si 9utput2treamGriter; -oti!ul pentru care au fost create:sa se permita internationalizarea "Unicode lucreaza cu caractere pe IJ biti#; -3ecomandare: sa seutilizeze clase de tip 3eader si Griter ori de cate ori e posibil; -8a citiri specifice la ni!el deoctet, sa se utilizeze $nput2tream si 9utput2tream

Seriali)are:- Pastrarea obiectelor dincolo de executia programelor; -(stfel obiectele pot firecuperate si executia restartata de la punctul unde a fost oprita anterior; -9rice obiect dintr-o

clasă care implementeaza 2erializable poate fi con!ertit in sir de octeti si apoi restaurat;-Persistentă: durata de !iata a unui obiect exista dincolo de executia unui program; -Pentrurealizarea persistentei, obiectele trebuie serializate = deserializate in mod explicit "lig%t+eig%t persistence#; -Pentru serializare, se crează un obiect dintr-un tip 9utput2tream, acesta esteK+rapL in interiorul unui 9bect9utput2tream si se utilizeaza metoda +rite9bect; -2erializareasal!eaza intreg +ebul de obiecte din spatele obiectului serializat; -ipul unui obiect deserializat:getClass

7xternali)e: -extinde interfata 2erializable; -8a obiectele deserializate cu 6xternalizable,obiectele sunt construite obisnuit "cu default constructor# si apoi se apeleaza metodaread6xternal; -8a obiectele 6xternalizable, subobiectele componente trebuie serializate manual

"in +rite6xternal# iar la deserializare, ele trebuie recuperate de pe disc; -8a mostenire dintr-oclasa 6xternalizable, se apeleaza +rite6xternal si read6xternal a clasei de baza pentru a seasigura serializare = deserializare corecta 

8 Ce este o clasa 5a*a si cum se sal*ea)a pe dis+

Clasă: set de obiecte cu caracteristici 0i funcţionalitate identice "termenul declasa se substituite termenului de tip#

9 clasa reprezinta o modalitate de a descrie un nou tip de date) Clasa este o

descriere a unei multimi de obiecte caracterizate prin structuri sicomportamente similare) De aceea, o clasa !a cuprinde definitiile datelor sioperatiilor ce caracterizeaza obiectele clasei respecti!e)

Page 7: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 7/59

Datele definite intr-o clasa se mai numesc atribute, iar operatiile se mainumesc metode sau functii-membru) (tributele si metodeleformeaza membrii unei clase)

2intaxa folosita pentru a defini o clasa in 4a!a este:class nume_clasa {

 // date si metode

 }

2al!area pe dis se face in folderul built cu numele clasei si extensia )class

9 Ce este un pacage+

Un pacage grupeaza toate clasele , Utilizate pentru organizarea claselor )Pacageurile pot si comprimate sub forma ar)

Defineste final2 finally finali)e.

*inal- o clasa declarata cu final nu poate fi subclasata) 9 clasa declarata ca finalopreste linia de mostenire, nu se poate extinde o clasa finala) 9 metoda declaratacu final nu poate fi suprascrisa)9 !ariabila declarata cu final poate fi initializata

numai o singura data) Utilizata in special pentru mostenire

*inally- Elocul declarat cu finally se executa mereu dupa try and catc% atunci candapare o exceptie neasteptata sau fara a fi o exceptie)6ste utilizat pentru a e!ita )(uta programatorul sa e!ite curatarea codului accidentala prin return brea saucontinue)

*inalize-este o metoda care daca este prezenta intr-o clasa este apelata inainteagarbage collectorului) etoda finalize"# este utilizata pentru curatarea codului

inainte ca un obiesct sa fie luat de garbage colector 

; Defineste *aria#ila locala2 *aria#ila mem#ra si *aria#ila de clasa

 ariabile de instan1ă) 2unt unice fiecărei instan1e le clasei)

Page 8: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 8/59

 Variabile de clasă. O singură copie pentru toate instanţele clasei. Se foloseşte

modificatorul de acces static!.

Variabile locale. Variabile temporare declarate "n cadrul unei metode sau a unui

bloc. Sunt #i$ibile doar "n cadrul acelei metode.

Parametri) ariabilele prin care se trimit argumente la apelul metodelor)

!ariabile de $nstanta "atribute# . aceste !ariabile definesc !alorile unui obiect, deci,ele sunt create atunci cnd obiectul este creat; ele exista de cnd obiectul este creatsi pana cand acesta este distrus; doar obiectul si metodele sale au acces la!ariabilele de instanta;

!ariabilele statice . aceste !ariabile sunt parte dintr-o clasa; sunt create atunci cnd

clasa este incarcata de 4;

!ariabile locale ale unor metode . aceste !ariabile sunt definite pe sti!a metodei siele exista atta timp ct metoda este executata "exista in sti!a de apeluri#;!ariabilele locale nu pot fi accesate si din interiorul unor metode imbricate c%iardaca ele exista cand metoda imbricata este executata

!ariabile locale unui bloc de cod - aceste !ariabile sunt definite in interiorul blocurilor de cod "intre < si ?# si poate fi utilizate in timp ce blocul este executat;

 blocuri de cod sunt tipice pentru, for, +%ile si blocuri de initializare)Variablie membre% sunt declarate in cadrul unei clase& dar apartin unui obiect.

< Defineste pri*ate2 protected 2 pu#lic

Pri!ate: elementele pri!ate pot fi accesate doar de creatorul clasei in cadrulmetodelor acelei clase

- folosit in declararea unui camp sau a unei metode dintr-o clasa - specifica faptulca membrul sau metoda respecti!a poate fi accesata doar din cadrul clasei insesi,nu si din clasele deri!ate din aceasta clasa)

Public: elementele publice sunt disponibile oricaror alte clase

Page 9: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 9/59

Protected: similar cu pri!ate, utilizat in mostenire, clasele care mostenesc potaccesa elementele pri!ate din clasele de baza

-folosit in declararea unui camp sau a unei metode dintr-o clasa - specifica faptul

ca membrul sau metoda respecti!a poate fi accesata doar din cadrul clasei insesisau din clasele deri!ate din aceasta clasa)

= olul claselor de tip Filter

Un filtru este un obiect de a efectua sarcini de filtrare pe fiecare cerere, la o resursă"cu un con inut de ser!let sau statice#, sau pe răspunsul la o resursă, sau ambele)ț

6xemplele care au fost identificate pentru acest design suntI# *iltre de autentificare7# exploatarea forestieră i (udit filtreș  M# de con!ersie fotografie filtreN# *iltre de compresie a datelorO# *iltrele de criptareJ# *iltre oenizing# *iltre care declanseaza resurse de acces e!enimenteQ# R28 = filtre

S# ime-ip filtru lanț 

Clasele *ilter sunt radacina abstracta a claselor de decorator 

Descrieti modul de utilizare a Decoratorilor la realizarea i=o in a!a

 Biblioteca Java I/O are o structura stratificata care permite sporirea "responsabilitatilor" unor obiecte

individuale intr-un mod dinamic si transparent. De exemplu, am putea dori saimbogatim un input

stream de baza, care opereaza doar la nivel de octet sau sir de octeti, cu posibilitatea de a citi

tipuri primitive: input stream-ul nostru ar putea citi 4 octeti deodata, pe care sa-i intoarca sub formaunui int.

 Acest mod de a crea o structura de clase este cunoscuta sub numele de Decorator Pattern. Acest

pattern impune ca obiectele care adauga functionalitate (wrappers unui obiect anume sa aibe

aceeasi interfata. Astfel, folosirea decoratorilor poate fi transparenta, in sensul ca putem folosi un obiect

in aceeasi maniera, indiferent daca a fost decorat sau nu. !lasele filtru, de baza

(ca FilterInputStream, sunt punctul de plecare pentru clasele decorator din ava #$%.

Page 10: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 10/59

#n concluzie, clasele de baza in ierar&ia #$% octet devin:

  InputStream, OutputStream: pentru definirea de stream-uri de baza, corespunzatoare unor

entitati #$%

  FilterInputStream , FilterOutputStream : pentru definirea de stream-uri decorator , careisi vor baza intotdeauna functionalitatea pe un alt stream (underlying , care, la randul sau, poate

fi decorat sau nu.

'n exemplu de decorator , foarte des intalnit, este al claselor DataInputStream $DataOutputStream ,

care permit citirea de tipuri primitive din alte fluxuri octet, oferind metode

ca readByte,readInt, readFloat, readBoolean, si omoloagele lor, writeByte, writeInt etc.

> Care este diferenta intre o clasa a#stracta si o interfata

9 interfata defineste un set de metode, proprietati, e!enimente, indexatori)(cesti membri !or fi implementati de o clasa sau c%iar de o structura)

9 clasa abstracta este o clasa care nu poate fi instantiata si este folosita pentrumostenire)9 clasa care nu este abstracta si care deri!eaza dintr-o clasa abstracta, trebuie saincluda implementarile tuturor membrilor abstracti)

? Descrieti mecanismul try-catch-finally

try <

  == codul care este susceptibil sa genereze exceptie

? catc% "ypeI tpI# <

  == exceptii de tipul ypeI

? catc% "ype7 tp7# <

  == exceptii de tipul ype7

? …

finally <

Page 11: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 11/59

  == cod care se executa indiferent de tipul de exceptie aruncat "sau nu#?

ry . catc% functioneaza ca un s+itc% pe tipul de exceptie

7 modalitati de tratare a erorilor 

ermination: eroarea este aruncata 3esumption: se insereaza cod try . catc% pt rezol!area erorii

Elocul TtryT contine instructiunile de desc%idere a unui fisier si de citire dintr-unfisier ambele putnd produce exceptii) 6xceptiile pro!ocate de aceste instructiunisunt tratate Fn cele doua blocuri Tcatc%T, cte unul pentru fiecare tip de exceptie)

$nc%iderea fisierului se face Fn blocul TfinallyT, deoarece acesta este sigur ca se !aexecuta) *ara a folosi blocul TfinallyT Fnc%iderea fisierului ar fi trebuit facuta Fnfiecare situatie Fn care fisierul ar fi fost desc%is, ceea ce ar fi dus la scrierea de codredundant:

8@ Descrieti modulele de creare a o#iectelor din tipul claselor interioare

care nu sunt anonimie

Clasa interioar este necesar numai clasei exterioare) Pentru reducerea numrului

de clase de ni!el superior si pentru simplificarea comunicrii Fntre claseleasculttor la e!enimente putem defini clasele receptor ca niste clase interioare cunume, incluse Fn clasa cu fereastra aplicatiei:

class *rame extends 4*rame <4Eutton bI & ne+ 4Eutton "T A T#;4Eutton b7 & ne+ 4Eutton "T - T#;4ext*ield text & ne+ 4ext*ield "J#;int n& @;

 public *rame"# <Container c & getContentPane"#;

 bI)add(ction8istener "ne+ EI8"##; b7)add(ction8istener "ne+ E78"##;c)set8ayout "ne+ *lo+8ayout"##;c)add"bI#; c)add"b7#;text)setext"T TAn#;

Page 12: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 12/59

  c)add "text#;?

== clase incluse cu numeclass EI8 implements (ction8istener <

 public !oid actionPerformed "(ction6!ent e!# <text)setext"T TA AAn#;

??class E78 implements (ction8istener <

 public !oid actionPerformed "(ction6!ent e!# <text)setext"T TA --n#;

??Definirea de clase incluse anonime reduce si mai mult lungimea programelor, dar

ele sunt mai greu de citit si de extins

88 Descrieti modaliatea de reali)are a unui iterator si incercati sa furni)ati

un exemplu concret de utili)are a acestui sa#lon de programare

Un iterator este un obiect care permite tra!ersarea unei colectii simodificarea acesteia "ex: stergere de elemente# in mod selecti!) Puteti obtineun iterator pentru o colectie, apeland metoda sa iterator"#) $nterfata $teratoreste urmatoarea:

 public interface $teratorV6' <  boolean %as5ext"#;  6 next"#;  !oid remo!e"#; == optional?etodele au urmatorul comportament:

%as5ext -intoarce true daca mai exista elemente neparcurse inca de iteratorul

respecti!next -intoarce urmatorul elementremo!e -elimina din colectie ultimul element intors de next) $n mod e!ident,remo!e nu poate fi apelat decat o singura data dupa un apel next) Dacaaceasta regula nu este respectata, !om primi o eroare)

Page 13: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 13/59

 5e putem imagina ca un iterator se pozitioneaza intre elementele colectiei)$nitial, cursorul sau precede primul element, astfel ca primul apel next !aintoarce primul element)

(tentie: etoda remo!e este singura modalitate 2$/U3( de a inlatura unelement dintr-o colectie in timpul parcurgerii acesteia) 9rice alta metoda areun comportament neprecizat "nu putem garanta ca stergerea !a a!ea loc, sauca elementul sters !a fi cel pe care c%iar doream sa-l stergem#)

6ste util sa folosim iteratori cand dorim: stergerea elementului curent, intimpul iterariiCand dorim sa iteram mai multe colectii in paralel)

6xemplu de folosire a unui iterator:Collection c & ne+ (rray8ist"#;$terator it & c)iterator"#; +%ile "it)%as5ext"## <  ==!erificari asupra elementului curent: it)next"#;  it)remo!e"#;?

89 Ce inseamna upcast+ Descrieti mecanismul legarii intar)iate si cum

facilitea)a acest mecanism reali)area proprietatii de upcast.

Proprietatea de upcast presupune tratarea unui obiect dintr-o clasaderi!ata ca si cum ar fi din clasa de bază)

8egare "binding# & asocierea dintre numele metodei si corpul metodei)8ate binding necesita un mecanism pt identificarea tipului laexecutie"3$#, pt a se identifica in mod corect corpul metodei care trebuieapelat) $n cazul late binding, legarea se face la executie, exact inainte de

executia efecti!a a metodei) 2e utilizeaza late binding pt orice apel demetoda, cu exceptia metodelor static si final)

8 Care este rolul constructorului de copiere in ca)ul agregarii indirecte+

Constructorul este o metodă specială apelată automat la instan1ierea uneiclase 0i face opera1iile necesare pentru ini1ializarea fiecărui obiect al unei

Page 14: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 14/59

clase fie ea statică sau dinamică) Dacă se folose0te pentru a ini1ializa unobiect cu alt obiect atunci denumirea de constructor de copiere)(gregarea este relatia intre doua obiecte in care unul dintre obiecte apartineceluilalt obiect) (gregarea reda apartenta unui obiect la un alt obiect)

 Din punct de !edere conceptual, exista 7 tipuri de agregare:strong . la disparitia obiectelor continute prin agregare, existenta obiectuluicontainer inceteaza "de exemplu, o carte nu poate exista fara pagini#+ea . obiectul-container poate exista si in absenta obiectelor agregate "deexemplu, o biblioteca poate exista si fara carti#agregare indirect W

IN Care este diferenta intre colectiile generice, %eterogene si parametrizateWColectiile sunt un ansamblu de iterfete si clase ce realizeaza: colectareaimpreuna a obiectelor, stocarea, sortarea si accesarea obiectelor)Colectii generice . putem specifica tipul de data pe care il !a folosi colectia,

ex: 8istV2tring' stringsColectii eterogene . atunci cnd se crează o colec1ie pentru elemente deacela0i tip "necunoscut#, oricine poate insera elemente de alt tipColectii parametrizate -

IO 2erializarea

Pastrarea obiectelor dincolo de executia programului)& transformarea unui obiect intr-o sec!enta de octeti, din care sa poata firefacut ulterior obiectul original) 6ste un mec%anism utilizat pt sal!area sirestaurarea datelor)

IJ 6xternalizarea

Ce se intampla daca dorim ca parti din obiect sa nu fie serializateW

 2au dorim să recreem subobiecte de la zeroW

 $nterfata 6xternalizable: extinde interfata 2erializable 7 metode noi: +rite6xternal, read6xternal

  (ceste metode sunt apelate automat la serializare = deserializare si contincod suplimentar care se executa la aceste operatii

Page 15: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 15/59

  8a obiectele deserializate cu 6xternalizable, obiectele sunt construiteobisnuit "cu default constructor# si apoi se apeleaza metoda read6xternal

  8a obiectele 6xternalizable, subobiectele componente trebuie serializate

manual "in +rite6xternal# iar la deserializare, ele trebuie recuperate de pe disc  8a mostenire dintr-o clasa 6xternalizable, se apeleaza +rite6xternal siread6xternal a clasei de baza pentru a se asigura serializare = deserializare corecta

  6!itarea serializarii anumitor componente ale obiectelor 

  Prima metoda: utilizarea 6xternalizable

  etoda 7-a: cu!antul c%eie transient: indica faptul acel camp marcat cutransient nu !a fi serializat ca si parte a procesului automat de serializare

  etoda M-a: se adauga la clase metodele +rite9bect si read9bect in care sefurnizeaza codul programatorului pentru serializare

 (ceste metode sunt pri!ate si sunt apelate automat de catre +rite9bect siread9bect a claselor 9bect9utput2tream si 9bect$nput2tream

I 2upraFncărcarea

2upraFncărcarea unei metode "o+erloading# este procesul prin care Fn cadrulunei clase sunt adăugate două sau mai multe metode cu acela0i nume dar cunumăr diferit de parametri) Xn momentul apelării metodei, mediul de rulare !a0ti exact ce metodă să apeleze pe baza parametrilor specifica1i astfel Fnct nuexista posibilitate de confuzie si de apelare a unei metode gre0ite)

IQ Cu!ntul c%eie t%isCu!ntul c%eie t%is este folosit Fn cadrul metodelor atunci cnd se dore0te să seaibă acces la referin1a obiectului curent) Cu!ntul c%eie t%is este o referin1ăcătre obiectul curent) (cest cu!nt c%eie este folosit doar Fn cazurile specialecnd este ne!oie să se facă o referin1ă explicită la obiectul curent) De exempluFn cazul unei metode care trebuie să returneze obiectul curent)

Page 16: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 16/59

19Cuvântul cheie „static”

Cuvântul cheie „static” este folosit în java pentru a deni ovariabilă sau o metodă care poate accesata prin intermediul

numelui clasei, fără a nevoie să se construiască obiecte de tipulrespectiv. n construirea unei aplica!ii orientate pe obiecteutili"area atributelor sau metodelor statice trebuie să e evitată #iacestea să e folosite doar în ca"uri de strictă necesitate.

9@ Clase 'i metode a#stracte

  o metodă se nume0te abstractă dacă este doar declarată 0i nu definită)Declara1ia !a con1ine, obligatoriu, cu!ntul c%eie abstract : abstractnumemetoda "#;

   o clasă ce con1ine măcar o metodă abstractă de!ine clasă abstractă 0i !a

trebui calificată ca atare "Fn caz contrar se produce o eroare de compilare#) *iindo clasă incompletă, tentati!a de a crea un obiect de tip abstract, se soldează cueroare)

7I $nterfa1a$nterfa1a acoperă no1iunea de clasă abstractă pură) Xn această situa1ie defini1iatipului este precedată de cu!ntul c%eie interface, ce !a Fnlocui cu!ntulc%eie class)Prin interfa1ă se pune la dispozi1ie o formă 0i nu o implementare) 6a poate con1ine:  membri de tip primiti! "implicit statici 0i finali#;  nume de metode cărora li se ata0ează:

- lista de argumente de apel;- tipurile returnate

77 Design patternul Proxy

$ste sablonul care permite crearea unui inlocuitor pentru unobiect, inlocuitor care sa controle"e accesul la obiectulrespectiv. %cest sablon se mai numeste surogat.

2ablonul  Proxy se aplica in general in situatiile in care este necesara o referinta la unobiect mai complexa si mai flexibila decat un simplu pointer) Cate!a dintre cazurile incare sablonul Proxy poate fi utilizat sunt:

Page 17: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 17/59

necesitatea unui reprezentant local al unui obiect aflat in alt spatiu de adrese "pealta masina# decat clientul sau) $n acest caz obiectul proxy care oaca rolulreprezentantului local se mai numeste remote proxy sau ambasador;

crearea la comanda a obiectelor costisitoare "cum este cazul din exemplul prezentat in paragraful anterior#) $n acest caz obiectul proxy se mai numeste proxy!irtual, el dand iluzia existentei unui obiect ser!er inainte ca acesta sa fi fost creat;

daca se pune problema ca di!ersi clienti sa aibe drepturi de acces diferite la unanumit obiect ser!er, se poate folosi cate un obiect proxy care sa reprezinte ser!eruldin perspecti!a fiecarei categorii de clienti) $n acest caz, obiectul proxy se mainumeste proxy de protectie;

un obiect proxy poate uca rolul unui pointer inteligent, care poate efectua

operatii suplimentare la accesarea obiectului referit) (semenea operatii suplimentaretipice sunt:

o contorizarea referintelor la un anumit obiect, existente la unmoment dat) (cest lucru permite stergerea obiectului respecti!cand se constata ca nu mai exista nici o referinta la el) Deexemplu, un garbage collector ar putea utiliza acest principiu delucru;

o incarcarea in memorie a unui obiect persistent atunci cand el este

referit prima oara;o asigurarea blocarii obiectului referit, pe durata accesarii lui, astfel

incat sa nu poata fi modificat

Yablonul Proxy asigură un surogat sau un Fnlocuitor

 pentru alt obiect pentru a controla accesul la acesta

 Delegarea la distan1ă controlează accesul către un obiect nelocal

 Delegarea !irtuală controlează accesul la o resursă costisitor de creat

 Delegarea de protec1ie controlează accesul la o resursă pe baza unor drepturi de

acces

 3eferin1ă inteligentă: copierea la scriere "copy on +rite#, blocarea unui obiect,

numărarea referin1elor, cac%ing

Page 18: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 18/59

 7O)Design patternul $terator 

2ablonul $terator asigura o cale de accesare sec!entiala a elementelor unui

obiect agregat, fara a expune reprezentarea lui de baza)

 etodele $teratorului pot a!ea nume diferite

 4a!a $terator: next"#, %as5ext"#, remo!e"#

 CZ $6numerator: Current, o!e5ext"#, 3eset"#

 6xistă $teratori interni 0i externi

 $teratorul extern este controlat de client, ca Fn exemplul precedent "cu metoda

next#

 $teratorul intern este controlat de $teratorul Fnsu0i, căruia trebuie să i se spună ce

opera1ii să efectueze cu elementele pe care le parcurge

Yablonul se utilizează pentru:

 ( accesa con1inutul unui obiect agregat fără a expune reprezentarea internă

 ( asigura suport pentru mai multe tra!ersări ale obiectelor agregate

 ( furniza o interfa1ă uniformă pentru tra!ersarea structurilor agregate diferite

 Pentru a suporta o itera1ie polimorfică

2uportă !aria1ii Fn tra!ersarea unui agregat

 9biectele agregate pot fi tra!ersate Fn mai multe feluri 0i de mai multe ori

 9biectele $terator simplifică interfa1a (gregat

 (gregatul are ne!oie de o metodă unică pentru crearea $teratorului

 2cade cuplarea dintre client 0i obiectele agregate

Page 19: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 19/59

 Cre0te coeziunea obiectului agregat prin eliminarea necesită1ii de a asigura el

Fnsu0i tra!ersarea

 7J) Design patternul 2trategy2cop: 2e define0te o familie de algoritmi; se Fncapsulează fiecare mebru; algoritmiise facintersc%imbabili)(plicabilitate

 . ulte clase Fnrudite diferă doar prin comportament

 . 2e folosesc di!erse !ariante ale unui algoritm . (lgoritmii folosesc date irele!ante pentru client . 9 clasă define0te comportamente multiple, definite de conditii gardă la Fnceputulmetodelor) 

Page 20: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 20/59

&' Ce este o clasa java si cum se salvea"a pe dis()

Clasă* set de obiecte cu caracteristici #i funcţionalitate identice +termenulde clasa se substituite termenului de tip

- clasa repre"inta o modalitate de a descrie un nou tip dedate. Clasa este o descriere a unei multimi de obiecte caracteri"ate prinstructuri si comportamente similare. e aceea, o clasa va cuprindedenitiile datelor si operatiilor ce caracteri"ea"a obiectele claseirespective.

atele denite intr/o clasa se mai numesc atribute, iar operatiile se mainumesc metode sau functii/membru. %tributele si metodeleformea"a membrii unei clase.

0intaa folosita pentru a deni o clasa in 2ava este*class nume_clasa {

 // date si metode

}

0alvarea pe dis( se face in folderul built cu numele clasei si etensia.class

Page 21: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 21/59

&3 Ce este un pac(a4e)

5n pac(a4e 4rupea"a toate clasele , 5tili"ate pentru or4ani"area claselor .6ac(a4eurile pot si comprimate sub forma jar.

&7 eneste nal, nall8 nali"e.

inal/ o clasa declarata cu nal nu poate subclasata. - clasa declarata canal opreste linia de mostenire, nu se poate etinde o clasa nala. - metodadeclarata cu nal nu poate suprascrisa.- variabila declarata cu nal poate initiali"ata numai o sin4ura data. 5tili"ata in special pentru mostenire

inall8/ :locul declarat cu nall8 se eecuta mereu dupa tr8 and catch atuncicand apare o eceptie neasteptata sau fara a o eceptie.$ste utili"at

pentru a evita . %juta pro4ramatorul sa evite curatarea codului accidentalaprin return brea( sau continue.

inali"e/este o metoda care daca este pre"enta intr/o clasa este apelatainaintea 4arba4e collectorului. ;etoda nali"e+ este utili"ata pentrucuratarea codului inainte ca un obiesct sa e luat de 4arba4e colector

&< eneste variabila locala, variabila membra si variabila de clasa

 =ariabile de instan!ă. 0unt unice ecărei instan!e le clasei.

 Variabile de clasă. O singură copie pentru toate instanţele clasei. Se

foloseşte modicatorul de acces „static.

Variabile locale. Variabile temporare declarate !n cadrul unei metode sau a

unui bloc. Sunt "i#ibile doar !n cadrul acelei metode.

6arametri. =ariabilele prin care se trimit ar4umente la apelul metodelor.

variabile de >nstanta +atribute ? aceste variabile denesc valorile unuiobiect, deci, ele sunt create atunci când obiectul este creat@ ele eista decând obiectul este creat si pana cand acesta este distrus@ doar obiectul simetodele sale au acces la variabilele de instanta@

variabilele statice ? aceste variabile sunt parte dintr/o clasa@ sunt createatunci când clasa este incarcata de 2=;@

Page 22: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 22/59

variabile locale ale unor metode ? aceste variabile sunt denite pe stivametodei si ele eista atâta timp cât metoda este eecutata +eista in stiva deapeluri@ variabilele locale nu pot accesate si din interiorul unor metodeimbricate chiar daca ele eista cand metoda imbricata este eecutata

variabile locale unui bloc de cod / aceste variabile sunt denite in interiorulblocurilor de cod +intre A si B si poate utili"ate in timp ce blocul esteeecutat@ blocuri de cod sunt tipice pentru, for, hile si blocuri de initiali"are.

Variablie membre$ sunt declarate in cadrul unei clase% dar apartin unui

obiect.

&D eneste private, protected , public

6rivate* elementele private pot accesate doar de creatorul clasei in cadrulmetodelor acelei clase

/ folosit in declararea unui camp sau a unei metode dintr/o clasa / specicafaptul ca membrul sau metoda respectiva poate accesata doar din cadrulclasei insesi, nu si din clasele derivate din aceasta clasa.

6ublic* elementele publice sunt disponibile oricaror alte clase

6rotected* similar cu private, utili"at in mostenire, clasele care mostenescpot accesa elementele private din clasele de ba"a

/folosit in declararea unui camp sau a unei metode dintr/o clasa / specicafaptul ca membrul sau metoda respectiva poate accesata doar din cadrulclasei insesi sau din clasele derivate din aceasta clasa.

&E Folul claselor de tip ilter

5n ltru este un obiect de a efectua sarcini de ltrare pe ecare cerere, la oresursă +cu un conGinut de servlet sau statice, sau pe răspunsul la o resursă,sau ambele.

$emplele care au fost identicate pentru acest desi4n sunt1 iltre de autenticare& eploatarea forestieră Hi %udit ltre' de conversie foto4rae ltre3 iltre de compresie a datelor

Page 23: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 23/59

7 iltrele de criptare< iltre Io(eni"in4D iltre care declansea"a resurse de acces evenimenteE J0K L I ltre9 ;ime/Iip ltru lanG

Clasele ilter sunt radacina abstracta a claselor de decorator

&9 esi4n patternul >terator

'M escrieti modul de utili"are a ecoratorilor la reali"area iLo in java

'1 Care este diferenta intre o clasa abstracta si o interfata

- interfata deneste un set de metode, proprietati, evenimente,

indeatori. %cesti membri vor implementati de o clasa sau chiar de ostructura.

- clasa abstracta este o clasa care nu poate instantiata si este folositapentru mostenire.- clasa care nu este abstracta si care derivea"a dintr/o clasa abstracta,trebuie sa includa implementarile tuturor membrilor abstracti.

'& escrieti mecanismul tr8/catch/nall8

tr8 A

  LL codul care este susceptibil sa 4enere"e eceptie

B catch +I8pe1 tp1 A

  LL eceptii de tipul I8pe1

B catch +I8pe& tp& A

  LL eceptii de tipul I8pe&B N

nall8 A

  LL cod care se eecuta indiferent de tipul de eceptie aruncat +sau nuB

Page 24: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 24/59

 Ir8 ? catch functionea"a ca un sitch pe tipul de eceptie

& modalitati de tratare a erorilor

 Iermination* eroarea este aruncata

Fesumption* se inserea"a cod tr8 ? catch pt re"olvarea erorii:locul Otr8O contine instructiunile de deschidere a unui sier si de citire dintr/un sier ambele putând produce eceptii. $ceptiile provocate de acesteinstructiuni sunt tratate în cele doua blocuri OcatchO, câte unul pentru ecaretip de eceptie.

>nchiderea sierului se face în blocul Onall8O, deoarece acesta este si4ur case va eecuta. ara a folosi blocul Onall8O închiderea sierului ar trebuitfacuta în ecare situatie în care sierul ar fost deschis, ceea ce ar dus lascrierea de cod redundant*

'' escrieti modulele de creare a obiectelor din tipul claselor interioarecare nu sunt anonimie

Clasa interioarP este necesarP numai clasei eterioare. 6entru reducereanumPrului de clase de nivel superior si pentru simplicarea comunicPrii întreclasele ascultPtor la evenimente putem deni clasele receptor ca niste claseinterioare cu nume, incluse în clasa cu fereastra aplicatiei*

class ;rame etends 2rame A 2:utton b1 Q ne 2:utton +O R O@ 2:utton b& Q ne 2:utton +O / O@ 2Ietield tet Q ne 2Ietield +<@int nQ M@public ;rame+ A

Container c Q [email protected]%ctionKistener +ne :1K+@b&.add%ctionKistener +ne :&[email protected] +ne [email protected]+b1@ c.add+b&@tet.setIet+O [email protected] +tet@

BLL clase incluse cu numeclass :1K implements %ctionKistener A

public void action6erformed +%ction$vent ev Atet.setIet+O OR RRn@

B

Page 25: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 25/59

  Bclass :&K implements %ctionKistener A

public void action6erformed +%ction$vent ev Atet.setIet+O OR //n@

B

Benirea de clase incluse anonime reduce si mai mult lun4imeapro4ramelor, darele sunt mai 4reu de citit si de etins

'3 ie un s8stem formal denit pe alfabetul format din literele a sib.Kimbajul format accepta doar cuvinte care se incheie cu aab.0a sescrie automatul nit determinist pentru acest limbaj si repre"entarealimbajului in :S.

'7 escrieti modaliatea de reali"are a unui iterator si incercati sa furni"atiun eemplu concret de utili"are a acestui sablon de pro4ramare

5n iterator este un obiect care permite traversarea unei colectiisi modicarea acesteia +e* ster4ere de elemente in mod selectiv.6uteti obtine un iterator pentru o colectie, apeland metoda saiterator+. >nterfata >terator este urmatoarea*

public interface >teratorT$U A  boolean hasSet+@

  $ net+@  void remove+@ LL optionalB;etodele au urmatorul comportament*

hasSet /intoarce true daca mai eista elemente neparcurse inca deiteratorul respectivnet /intoarce urmatorul elementremove /elimina din colectie ultimul element intors de net. >n modevident, remove nu poate apelat decat o sin4ura data dupa un apelnet. aca aceasta re4ula nu este respectata, vom primi o eroare.Se putem ima4ina ca un iterator se po"itionea"a intre elementelecolectiei. >nitial, cursorul sau precede primul element, astfel ca primulapel net va intoarce primul element.

%tentie* ;etoda remove este sin4ura modalitate 0>V5F% de a inlaturaun element dintr/o colectie in timpul parcur4erii acesteia. -rice altametoda are un comportament nepreci"at +nu putem 4aranta ca

Page 26: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 26/59

ster4erea va avea loc, sau ca elementul sters va cel pe care chiardoream sa/l ster4em.

$ste util sa folosim iteratori cand dorim* ster4erea elementului curent,in timpul iterarii

Cand dorim sa iteram mai multe colectii in paralel.

$emplu de folosire a unui iterator*Collection c Q ne %rra8Kist+@>terator it Q c.iterator+@ hile +it.hasSet+ A  LLvericari asupra elementului curent* it.net+@  it.remove+@B

'< Ce inseamna upcast) escrieti mecanismul le4arii intar"iate si cumfacilitea"a acest mecanism reali"area proprietatii de upcast.

6roprietatea de upcast presupune tratarea unui obiect dintr/oclasa derivata ca si cum ar din clasa de ba"ă.

Ke4are +bindin4 Q asocierea dintre numele metodei si corpulmetodei. Kate bindin4 necesita un mecanism pt identicarea tipului laeecutie+FII>, pt a se identica in mod corect corpul metodei caretrebuie apelat. >n ca"ul late bindin4, le4area se face la eecutie, eactinainte de eecutia efectiva a metodei. 0e utili"ea"a late bindin4 pt

orice apel de metoda, cu eceptia metodelor static si nal.

'D Care este rolul constructorului de copiere in ca"ul a4re4arii indirecte)Constructorul este o metodă specială apelată automat la instan!iereaunei clase #i face opera!iile necesare pentru ini!iali"area ecărui obiectal unei clase e ea statică sau dinamică. acă se folose#te pentru aini!iali"a un obiect cu alt obiect atunci denumirea de constructor de

copiere.%4re4area este relatia intre doua obiecte in care unul dintre obiecteapartine celuilalt obiect. %4re4area reda apartenta unui obiect la un alt

obiect. in punct de vedere conceptual, eista & tipuri de a4re4are*stron4 ? la disparitia obiectelor continute prin a4re4are, eistentaobiectului container incetea"a +de eemplu, o carte nu poate eistafara pa4ini

Page 27: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 27/59

ea( ? obiectul/container poate eista si in absenta obiectelora4re4ate +de eemplu, o biblioteca poate eista si fara cartia4re4are indirect )

'E Care este diferenta intre colectiile 4enerice, hetero4ene siparametri"ate)Colectiile sunt un ansamblu de iterfete si clase ce reali"ea"a*colectarea impreuna a obiectelor, stocarea, sortarea si accesareaobiectelor.Colectii 4enerice ? putem specica tipul de data pe care il va folosicolectia,

e* KistT0trin4U strin4sColectii etero4ene ? atunci când se crea"ă o colec!ie pentru elementede acela#i tip +necunoscut, oricine poate insera elemente de alt tipColectii parametri"ate /

'9 0eriali"area6astrarea obiectelor dincolo de eecutia pro4ramului.Q transformarea unui obiect intr/o secventa de octeti, din care sapoata refacut ulterior obiectul ori4inal. $ste un mechanism utili"at ptsalvarea si restaurarea datelor.

3M $ternali"area

Ce se intampla daca dorim ca parti din obiect sa nu e seriali"ate)

 0au dorim să recreem subobiecte de la "ero) >nterfata $ternali"able* etinde interfata 0eriali"able

 & metode noi* rite$ternal, read$ternal

  %ceste metode sunt apelate automat la seriali"are L deseriali"are sicontin cod suplimentar care se eecuta la aceste operatii

  Ka obiectele deseriali"ate cu $ternali"able, obiectele sunt construiteobisnuit +cu default constructor si apoi se apelea"a metoda read$ternal

  Ka obiectele $ternali"able, subobiectele componente trebuieseriali"ate manual +in rite$ternal iar la deseriali"are, ele trebuierecuperate de pe disc

  Ka mostenire dintr/o clasa $ternali"able, se apelea"a rite$ternal siread$ternal a clasei de ba"a pentru a se asi4ura seriali"are L deseriali"arecorecta

Page 28: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 28/59

  $vitarea seriali"arii anumitor componente ale obiectelor

  6rima metoda* utili"area $ternali"able

  ;etoda &/a* cuvantul cheie transient* indica faptul acel camp marcat

cu transient nu va seriali"at ca si parte a procesului automat de seriali"are  ;etoda '/a* se adau4a la clase metodele rite-bject si read-bject incare se furni"ea"a codul pro4ramatorului pentru seriali"are

 %ceste metode sunt private si sunt apelate automat de catre rite-bject siread-bject a claselor -bject-utput0tream si -bject>nput0tream

31 0upraîncărcarea

0upraîncărcarea unei metode +oerloadin4 este procesul prin care încadrul unei clase sunt adău4ate două sau mai multe metode cu acela#inume dar cu număr diferit de parametri. n momentul apelării metodei,mediul de rulare va #ti eact ce metodă să apele"e pe ba"a parametrilorspecica!i astfel încât nu eista posibilitate de confu"ie si de apelare aunei metode 4re#ite.

3& Cuvântul cheie this

Cuvântul cheie this este folosit în cadrul metodelor atunci când se dore#tesă se aibă acces la referin!a obiectului curent. Cuvântul cheie this este oreferin!ă către obiectul curent. %cest cuvânt cheie este folosit doar înca"urile speciale când este nevoie să se facă o referin!ă eplicită laobiectul curent. e eemplu în ca"ul unei metode care trebuiesă returne"e obiectul curent.

Page 29: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 29/59

3' Cuvântul cheie „static”

Cuvântul cheie „static” este folosit în java pentru a deni o variabilă sau ometodă care poate accesata prin intermediul numelui clasei, fără a nevoie să se construiască obiecte de tipul respectiv. n construirea unei

aplica!ii orientate pe obiecte utili"area atributelor sau metodelor staticetrebuie să e evitată #i acestea să e folosite doar în ca"uri de strictănecesitate.

44Clase şi metode abstracte

[  o metodă se nume#te abstractă dacă este doar declarată #i nudenită. eclara!ia va con!ine, obli4atoriu, cuvântul cheie abstract *abstract numemetoda +@

 [  o clasă ce con!ine măcar o metodă abstractă devine clasă

abstractă #i va trebui calicată ca atare +în ca" contrar se produce oeroare de compilare. iind o clasă incompletă, tentativa de a crea unobiect de tip abstract, se soldea"ă cu eroare.

37 >nterfa!a>nterfa!a acoperă no!iunea de clasă abstractă pură. n această situa!iedeni!ia tipului este precedată de cuvântul cheie interface, ce va înlocuicuvântul cheie class.6rin interfa!ă se pune la dispo"i!ie o formă #i nu o implementare. $a poatecon!ine*[  membri de tip primitiv +implicit statici #i nali@

[  nume de metode cărora li se ata#ea"ă*/ lista de ar4umente de apel@/ tipurile returnate

 

Page 30: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 30/59

Compoziţie* o clasă nouă con!ine clase eistente

Fela!ie &as$a

0e reali"ea"a prin creare de obiecte membre

Compo"itia reali"ata dinamic se numeste agregare

Moştenire: o clasă nouă se aseamănă +etinde o clasă eistentă

Fela!ie is$a sau is$li'e$a

• Clasa de ba"a ? contine caracteristicile si comportamentele care vor partajate cu tipurile derivate

• Clasa derivata

• Clasa derivata va contine

toti membrii clasei de ba"a +inclusiv cei privati care sunt ascunsi

 Ioata interfata clasei de ba"a, care este duplicata

• Clasa derivata este in acelasi timp de tipul clasei de ba"a

Mostenire – cum se diferentia"a clasa derivata de clasa de ba"a

• 6rin adau4are de noi metode suplimentare

0chimbarea comportamentului unor metode eistente in clasa de ba"a+overridin4

• Felatia is/a* clasa derivata doar o"erride metode din clasa de ba"a +principiulsubstitutiei pure

Page 31: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 31/59

• Felatia is/li(e/a* clasa derivata adauga elemente noi interfetei clasei de ba"a+metodele noi nu sunt accesibile din clasa de ba"a ? substitutia nu mai estepura

Containere

• Secesare datorita faptului ca nu stim de la desi4n numarul de obiectenecesare pentru a re"olva o anumita problema

• Containerele sunt siruri de referinte catre alte obiecte

• $le se epandea"a automat pentru a salva noi obiecte, dupa necesitati

• & tipuri de liste* %rra8Kist, Kin(edKist

• Containerele in 2ava sunt create sa pastre"e obiecte de tipul -bject. /U elepot salva orice

• 6ot aparea eceptii la oncast la runtime, timp de eecutie crescut datorităoperaGiei de oncast

• Containere parametri"ate*

%rra8KistT0hapeU shape Q ne %rra8KistT0hapeU+@

Organizarea codului

• 6entru ecare clasa compilata se produce un sier .class

• 5n pro4ram este compus dintr/o colectie de siere .class

• %cestea pot arhivate* sier .jar

• iecare sier .java incepe cu mentiunea Wpac(a4e”* se indica numelepac(a4eului din care vor face parte clasele

• Clasele utili"ate care fac parte din alt pac(a4e se importa cu Wimport”

•  Ioate clasele dintr/un pac(a4e vor colectate intr/un sin4ur subdirector

• Conventie pentru denumirea pac(a4eurilor* utili"area domeniilor de internetin ordine inversa

• Calea root pentru directorare* variabila sistem CK%006%IX

• CK%006%IX poate include directoare sau siere .jar

Crearea obiectelor si ciclul de viata

Page 32: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 32/59

• iecare obiect necesita resurse +memorie, crearea si distru4erea obiectelordevin importante

•  2ava utili"ea"a in mod eclusiv alocarea dinamica a memoriei

6entru orice obiect, trebuie utili"at ne la creeere• -biectele sunt alocate in "ona de heap

• istru4erea obiectelor este reali"ata automat de catre garbage collector 

• () identică momentul in care un obiect nu mai este utili"at Hi il de"alocă

Cuvantul cheie static

• atele membre si metodele pot accesate doar sub calicarea unui obiecteistent in memoria pro4ramului +creat cu ne

• 5n camp sau o metoda statica nu este le4ata de vreun obiect anume dintr/oclasa

• class data sau class met&od

• 5n camp static eista o sin4ura data pentru o clasa, ind partajat de toateobiectele clasei respective

• Campurile statice pot referite prin numele clasei

;etodele statice sunt la nivel de clasa, pot referite prin numele clasei +faraa necesara eistenta unui obiect

• ;etoda main

• ;etodele statice nu pot accesa campuriLmetode ne/statice din clasa

Initializarea obiectelor

• >n ecare clasa se 4arantea"a initiali"area obiectelor prin scrierea unuiconstructor

• Ka crearea unui obiect, 2ava apelea"a automat constructorul clasei respective

• Sumele constructorului este identic cu numele clasei

• Constructorul default* nu are ar4umente

• Constructorul nu are tip de return

Page 33: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 33/59

• aca se crea"a o clasa fără nici un constructor, compilatorul crea"ă in modautomat constructorul default

Supraincarcarea metodelor

• 5tili"area unei variabile locale neinitiali"ate QU eroare de compilare

• -rice data membra a unei clase, daca este de tip primitiv, se 4arantea"ainitiali"are la valoarea implicita

• -biectele membre neinitiali"ate, vor avea valoarea null

• 0pecicarea valorii de initiali"are*

Ka momentul denirii variabilei primitive prin asi4nare cu o valoare

Ka momentul denirii variabilei non/primitive, prin ne

• >nitiali"area datelor membre prin constructor

• -rdinea de initiali"are a datelor membre* ordinea in care acestea suntdenite in clasa

• >nitiali"area datelor statice are loc doar daca acestea sunt necesar a utili"ate

• -biectele statice sunt initiali"ate inaintea celor non/statice, daca ele nu aufost utili"ate pana atunci

Cuvantul cheie this

• >n ecare metoda apelata, referinta obiectului sub care se apelea"a metodaeste transmisa in metoda sub forma referintei this

• this poate utili"at doar in interiorul metodelor ne/statice

• >n interiorul unei metode dinstr/o clasa, la apelul unei metode din clasacurenta, nu este nevoie sa se utili"e"e this

•  Ihis este frecvent utili"at in return, pentru a returna obiectul curent

Distrugerea obiectelor

• Varba4e collector/ul de"aloca memoria alocata prin ne, atunci candobiectele nu mai sunt folosite

• ;etoda nali"e+* permite operatii de ster4ere inainte ca obiectele sa esupuse 4arba4e collectorului

Page 34: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 34/59

• ;etoda nali"e+* 2ava nu 4arantea"a apelarea acestei metode,pro4ramatorul nu are control asupra momentului cand se apelea"a 4arba4ecollectorul

• aca obiectele noastre a4re4a alte obiecte, 4arba4e collectorul se ocupa de

de"alocarea obiectelor a4re4ate

• inali"e se utili"ea"a in 4eneral pentru a implementa termination conditionspentru un obiect +de eemplu inchiderea unui sier

Modul de unctionare a garbage collectorului

• VC colectea"a memoria ramasa alocata in obiectele care nu mai sunt utili"atesi compactea"a heap/ul, rearanjand obiectele alocate

• Feference coutin4* o modalitate de a implementa un VC*

e cate ori se asocia"a o referinta pentru un obiect, referencecounterul obiectului se incrementea"a

e cate ori se pierde o referinta pentru o obiect, reference counterulobiectului se decrementea"a

VC scanea"a sirul de variabile reference counters si cand intalnesteuna nula, de"aloca obiectul respectiv

• >mplementarea 2ava* pentru un obiect live se poate identica o referinta epe stac( e in static stora4e

• 0top/and/cop8* VC/ul opreste pro4ramul, scanea"a toate referintele de pestac( si copia"a obiectele identicate in noul heap. Ceea ce ramane e4arba4e/ul care trebuie de"alocat, iar noul heap e deja compactat

Initializarea datelor membre

• 5tili"area unei variabile locale neinitiali"ate QU eroare de compilare

• -rice data membra a unei clase, daca este de tip primitiv, se 4arantea"ainitiali"are la valoarea implicita

• -biectele membre neinitiali"ate, vor avea valoarea null

• 0pecicarea valorii de initiali"are*

Ka momentul denirii variabilei primitive prin asi4nare cu o valoare

Ka momentul denirii variabilei non/primitive, prin ne

Page 35: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 35/59

• >nitiali"area datelor membre prin constructor

• -rdinea de initiali"are a datelor membre* ordinea in care acestea suntdenite in clasa

>nitiali"area datelor statice are loc doar daca acestea sunt necesar a utili"ate

• -biectele statice sunt initiali"ate inaintea celor non/statice, daca ele nu aufost utili"ate pana atunci

Initializarea sirurilor

• 0irurile sunt denite prin operatorul de indeare* intYZ a@

• 6entru a se crea spatiu de memorie pentru sir, sirul trebuie initiali"at

• iecare sir are un membru intrinsec* len4th +lun4imea sirului

• $lementele sunt indeate de la M la len4th/1

• >nte4erYZ a Q ne >nte4erYrand.net>nt+&MZ@ LL se crea"a doar un sir dereferinte, ecare din ele trebuie apoi initiali"ate, de e*

• aYiZ Q rand.net>nt+7MM@

!eutilizarea codului

• nseamnă mult mai mult decât cop8/paste de cod

• -peraGii principale* compo#i*ie +i mostenire

• 0intaa compo"iGiei* se plasea"ă o referinGă către un obiect nou într/o clasănouă

• Feferintele nou create se initiali"ea"ă la valoarea null /U trebuie initiali"ateeplicit

• ;etoda to0trin4* mostenită de la clasa -bject* se permite convertireaobiectului intr/un obiect 0trin4 +necesar pentru tipărire

Initializarea reerintelor la realizarea compozitiei

• >nitiali"area se poate reali"a in 3 moduri*

Ka momentul denirii obiectului ? initiali"area se face inainte deapelarea constructorului

Page 36: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 36/59

>n constructor

Chiar inainte de utili"area obiectului +la"8 initiali"ation

>nstance initiali"ation ? in bloc non/static de initiali"are

Sinta"a mostenirii

• ;ostenirea se reali"ea"ă ori de câte ori se crea"ă o clasă* se moHteneHte din-bject

• ;ostenire* clasa nouă se aseamănă cu clasa veche* cuvântul cheie etends

• Clasa nouă va prelua automat toate campurile Hi metodele din clasa de ba"ă

• Fe4ulă nescrisă la mostenire* câmpurile din clasele de ba"ă se scriu privateiar metodele se lasă public +sau protected

• Clasa derivată poate să preia o metodă din clasa de ba"ă si să o rescrie

• in clasa derivată, pentru a se apela o metodă din clasa de ba"ă se poateutili"a super

• Feali"area mostenirii* la crearea obiectului din clasa derivată, se crea"ă unsubobiect din clasa de ba"ă +ca si cum ar reali"ată o compo"itie cătreacesta

• >nitiali"area subobiectului din clasa de ba"ă* doar prin constructor

• Constructorul clasei de ba"ă este apelat intotdeauna inaintea constructoruluiclasei derivate

• 6entru apel constructor al cl de ba"ă cu ar4umente* super + ar4umente

Operatia de delegare

• -peratie intermediară intre compo"itie si a4re4are

• >ntr/o clasă se plasea"ă un obiect membru din a &/a clasă, iar clasa nouă vaepune toate metodele furni"ate de obiectul din clasa &/a

• 6entru reali"area operatiilor de mostenire L compo"itie, este sucient ca să seimporte clasele reutili"ate +codul lor sursă nu este necesar

Stergerea corect# a obiectelor

•  2ava nu 4arantea"ă apelarea metodei nali"e la distru4erea obiectelor

Page 37: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 37/59

• Ce se intamplă atunci când este necesar ca obiectele să e sterse dacapro4ramele se termină cu eceptie)

• 0e pune codul de ster4ere intr/o metodă dispose

;etoda dispose se apelea"ă pe clau"a nall8 a unui tr8/catch 4lobal• Ka ster4erea obiectelor, aceasta trebuie să se reali"e"e in ordine inversă a

creerii obiectelor. /U pro4ramatorul trebuie să se asi4ure de acest lucru

$legerea intre compozitie si mostenire

• Compo"itia se ale4e atunci cand interfata clasei de ba"a nu se doreste a epusă in clasa derivata

Compo"itia se face, de obicei, prin a4re4are private

• ;ostenirea se foloseste atunci cand interfata clasei de ba"a se dorestepreluată Hi epusă de clasa derivata

• 6rotected* functionea"a ca si private din afara ierarhiei

• 5pcast* obiectele din tipul clasei derivate sunt in acelasi timp si din tipulclasei de ba"a

nal

• itemii nal* nu pot schimbate + de eemplu, intr/o clasă derivata

• atele nal*

Constante la compilare care nu se schimba ulterior

=alori initiali"ate la runtime care nu se doreste sa e schimbate

0tatic nal* au o sin4ură locatie de stocare a datei

• inal aplicat la o referinta* face referinta constantă, valoarea obiectului poate modicata

:lan( nal* campuri declarate nal care nu sunt initiali"ate /U ele trebuieinitiali"ate inainte de util"are

• %r4umente nal* în metodă nu se poate schimba valoarea către care aratăreferinta

• ;etode nal* nu pot schimbate prin mostenire

Page 38: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 38/59

• ;etodele nal sunt tratate inline de către compilator

• Clase nal* se inhibă mostenirea din clasa respectivă

Mecanismul upcast

• %socierea dintre numele metodei si corpul metodei ? le4are +bindin4

• $arl8 bindin4* atunci cand le4area se face la compilare

• Kate bindin4* atunci cand le4area se face la eecutie, eact inainte deeecutia efectiva a metodei

• Kate bindin4 Q d8namic bindin4 sau runtime bindin4

• Kate bindin4* necesită un mecanism pentru identicarea tipului la eecutie+FII> ? pentru a se identica in mod corect corpul metodei care trebuie

apelat

• >n 2ava se utili"ea"a late bindin4 pentru orice apel de metodă, cu eceptiametodelor static si nal +private e implicit nal pt ca o metoda private nupoate mostenita

• e ce e nevoie să declarăm o metodă nal) 6entru a inhiba late bindin4+creste ecienta la eecutie

• Campurile si elementele static sunt re"olvate la compilare

Ke4area constructorilor este reali"ata la compilare

• Felatie de mostenire de tip is/a* clasa derivată doar suprascrie interfaGa claseide ba"ă

• Felatie de mostenire de tip is/li(e/a* clasa derivată contine metodesuplimentare faGă de clasa de ba"ă

• FelaGia de substituGie*

Ka o relatie de tip is/a substitutia este pură* orice mesaj trimis clasei

derivate poate trimis si clasei de ba"ă +re"olvarea mesajului se faceprin upcast

Ka o relaGie de tip is/li(e/a* partea etinsă din clasa derivată nu maieste disponibilă prin upcast +prin adresarea clasei de ba"ă

• oncast* operaGia inversă upcast ? nu este o operaGie 4arantată, in sensul incare nu stim eact clasa derivată către care se face doncast

Page 39: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 39/59

Clase abstracte

• Folul clasei >nstrument +varful ierarhiei* să cree"e o interfaGă comunăclaselor derivate +metoda pla8 din >nstrument este Wdumm8”

• QU obiectele din clasa >nstrument nu au sens +dpdv lo4ic

• QU clasa >nstrument* clasă abstractă

• 6entru a evita astfel de erori la eecutie +crearea de obiecte dintr/un astfel detip eistă un mecanism prin care se declară clasele abstracte +si care severică la compilare* cuvantul cheie abstract 

• Clasă abstractă* are cel putin o metodă abstractă +metodă declarată abstractsi care nu are corp

• 0e 4enerea"ă eroare la compilare dacă se incearcă crearea unui obiect dintr/o

clasă abstractă

• Ka mostenire dintr/o clasă abstractă, metoda abstractă trebuie suprascrisă,altfel clasa derivată devine si ea abstractă

Conceptul de Interfață

• >n clasa abstractă* se furni"ea"ă o parte din interfaGă iar implementareaacesteia este lăsată pe seama claselor derivate

• Cuvantul cheie interface* produce o clasă abstractă fără nici o implementare

de metode

• -rice cod care utili"ea"a o anume interfaGă va sti ce metode se pot apela +sidoar atât

• >nterfetele permit reali"area WmoHtenirii multiple”

• >nterfetele pot contine campuri* acestea sunt implicit static si nal

• >mplementarea unei interfeGe* cuvântul cheie implements

Design patternul Strateg%

• Crearea unei metode care sa aibă comportament diferit in functie de tipular4umentului care se pre"inta la intrare.

;etoda contine o parte a care este apelata de ecare data si o partecare varia"ă +strate4ia

Page 40: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 40/59

• >n ca"ul in care nu se utili"ea"ă interfetele, dacă dorim să aplicăm metoda+strate4ia unui obiect dintr/o clasă care nu face parte din ierarhie, nu sepoate

• QU in eemplul %ppl8 si 6rocesor, eista o cuplare foarte puternica intre

metoda %ppl8.proces si clasa 6rocesor, astfel incat aceasta metoda nu poate aplicata decat obiectelor din ierarhia 6rocesor, si nicidecum altor obiectedin alte ierarhii

• 6rocesor se crea"a ca si o interfata, iar clasele care doresc sa faca parte dinstrate4ie vor implementa interfata scrisa

Design patternul $dapter

• Ce se intampla in ca"ul in care dorim sa utili"am in strate4ie o clasaimportata dintr/o bibliotecă)

• esi4n patternul %dapter* se scrie cod care preia la intrare interfata eistentasi care sa produca interfata de care este nevoie in pro4ram

• 6rin decuplarea interfetei de implementare se permite ca o interfata sa eaplicata mai multor implementari, deci codul devine mult mai facil dereutili"at

Mosternirea multipla

• >n 2ava se poate etinde o sin4ura clasă si se pot implementa oricate clase

• Folul interfetelor* sa se poata face upcast la mai mult decat o clasa de ba"a

• aca se poate crea o clasa de ba"a fara denitii de metode si variabilemembre, se recomanda sa se cree"e interfete in locul claselor abstracte

• >nterfetele se pot combina +se etinde interfetele la fel ca si clasele

• Coli"iunea numelor la implementarea mai multor interfete +daca interfetelede ba"a au acelasi nume de metoda cu semnaturi diferite* este o problemadaca metodele difera doar prin tip de return QU eroare la compilare

• Campurile care sunt inserate intr/o interfata devin in mod automat statis sinal QU repre"inta un mod convenabil pentru a deni constante +similar cuenum

• Campurile denite in interfete nu pot blan( nals, ele trebuie initiali"ate ladenire

Design patternul &actor%Method

Page 41: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 41/59

• Folul unei interfete* sa se permita implementari multiple pentru diverse clase

• esi4n patternul actor8* in loc sa se apele"e un constructor in mod direct,pentru crearea unui obiect se apelea"a o metoda de creere a obiectului dintr/o clasa actor8. Clasa actor8 implementea"a o interfata care specica

metoda de creere

• %stfel, se poate schimba la runtime o implementare a unei functionalitati cualta

Inner classes

• 0e plasea"a clase in interiorul altor clase

• >nner classes repre"inta un concept diferit de compo"itie

• e obicei, clasa eterioara are o metoda care returnea"a un obiect din clasainner

•  Iipul obiectului din clasa interioara se specica precum*-uterClass.>nnerClass

• -biectul clasei interioare are un lin( +referinta catre obiectul claseieterioare care l/a creat[[[

• -biectul clasei interioare poate accesa membrii obiectului clasei eterioare

fara ca sa e nevoie de calicare +dreptul de a accesa este asupra tuturorobiectelor membre ale clasei eterioare

• 6entru a se obtine referinta la obiectul clasei eterioare +din obiectul claseiinner se utili"ea"a* -uterI8pe.this

• 6entru a crea un obiect din clasa inner pornind de la un obiect din clasa outerse poate utili"a* obiect-uter.ne

• Clasele inner sunt potrivite pentru a implementa interfete* se reali"ea"aascunderea implementarii

Clase interioare anonime

• 0unt clase interioare fara nume +clase create direct la momentul utili"arii lor

• @ nali"ea"a constructia instructiunii care contine denitia clasei anonime

Page 42: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 42/59

• Campurile din clasele anonime pot initiali"ate cu valori din afara +dindomeniul unde se crea"a clasa

• aca intr/o clasa anonima se doreste a utili"at un ar4ument +sau o valoaredenita in afara acesteia, atunci referinta acesteia trebuie sa e nal

• Clasele anonime nu pot avea constructor, dar initiali"arile se pot reali"a inblocul non/static de initiali"are

• Clasele interioare pot create static +nested classes daca nu se doresteutili"area referintei obiectului eterior in interiorul clasei inner

• Clasele interioare parte a unei interfete devin automat static public. Fol*crearea de cod comun care sa e utili"at de toate implementarile interfetei

• -ricat de adanca este imbricarea claselor nested, acestea pot accesa

obiectele membre din clasele eterioare, indiferent de nivelul de imbricareClosures ' callbac(s

• Closure* un obiect apelabil care retine informatie despre domeniul devi"ibilitate in care a fost creat +are access la variabilele din domeniul devi"ibilitate unde a fost creat

• QU clasa interioara este un closure +deoarece are o referinta catre obiectuleterior si poate sa accese"e inclusiv membrii privati ai clasei eterioare

• Callbac(* un obiect primeste o informatie care va permite sa apelam obiectul

initial la un moment ulterior de timp

• Callbac( se implementea"a cu clase interioare

• Clasa de tip Closure furni"ea"a o poată în intriorul clasei eteriore +dar intr/unmod safe ? nu se necesită ca sa transformam accesul la metodele acesteiclase

• e ce callbac(s) Ka eecutie, se poate schimba metoda care este apelată, inmod dinamic

Control rame)or(s

• %pplication frameor(* un set de clase proiectate sa re"olve un tip anume deproblemă +desi4n patternul Iemplate ;ethod

• 6entru aplicarea application frameor( se mostenesc din clasele de ba"a sise schimba implementarea prin overridin4

Page 43: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 43/59

• Codul suprascris este cel care customi"ea"a solutia la ca"ul particular

•  Iemplate ;ethod* contine structura de ba"a a al4oritmului, iar partilespecice sunt apeluri la metode care pot override

%stfel, se separa partile neschimbate ale al4oritmului de cele \eibile• Control frameor(* un tip particular de application frameor( prin care

sistemul raspunde la evenimentele 4enerate +sistem event/driven ? deeemplu V5>s

• >n implementarea Control frameor(, inner class sunt utili"ate pentru aeprima diversele actiuni +metoda action

Mostenire din clase inner

• Ka mostenire dintr/o clasa inner, trebuie furni"at la constructia obiectului un

obiect din clasa inner, pentru a se permite construirea sub/obiectului cl. ba"a+ enclosin4ClassFeference.super+

• Clasele locale unui domeniu de vi"ibilitate au access la toate variabileledomeniului respectiv +inclusiv cele nal, insa aceste clase nu au specicatorde access

Containere generice

•  IipContainerTIipe:a"aU

• >n container se pot păstra doar obiecte din tipul de ba"ă

• 0e obtine o eroare la compilare daca se incearcă stocarea unui obiect dintr/unalt tip

• Su mai este necesară operatia de cast +conversie la re4asirea obiectelor

• -peratii de efectuat la utili"area containerelor

1. enirea obiectului de tip container

&. >nserarea de obiecte in container +de e. ;etoda add

'. Fe4asirea obiectelor +de e. ;etoda 4et

aca sunt containere 4enerice nu mai este nevoie de cast

Ka containere pre/2ava 0$7, trebuie conversie

Iteratori

Page 44: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 44/59

• $ste un desi4n pattern

• 5n obiect de tip iterator este asociat unei colectii si permite re4asireaordonata a obiectelor din colectia respectiva

;etoda iterator+ a unei colectii• ;etoda net+ a obiectului iterator* produce urmatorul element din colectie

• ;etoda hasSet+* intero4hea"a daca mai sunt elemente neiterate

• ;etoda remove+* ster4e ultimul element iterat din colectie

• >teratorii pot produce elementele colectiei doar intr/o sin4ura directie

• Kist>terator* furni"at doar de interfata Kist, poate parcur4e elementelecolectiei in ambele directii

*"ceptii +i,

• Su toate erorile pot prinse la scrierea pro4ramului +la compilare

• Festul problemelor trebuie re"olvate la eecuGie print/un mecanism prin caresa se ofere pro4ramului client informatia necesara re"olvarii situaGiei

• QU eception handlin4* sin4urul mecanism 2ava pentru tratarea erorilor

• Conceptul de eceptie* in domeniul de vi"ibilitate unde apare eroarea de

obicei nu stim cum sa tratam eroarea, insa stim ca nu putem să continuăm cueroarea, astfel că transmitem eroarea spre re"olvare la un domeniu devi"ibilitate eterior

• $ception condition* eroarea apărută +de eemplu impărGire la M

• Ka apariGia unei erori*

0e crea"ă un obiect de tip eceptie +pe heap, cu ne

irul de eecutie curent este intrerupt si referinta la obiectul eceptieeste transmisă in afara contetului curent

;ecanismul de eception handlin4 caută un contet potrivit pentrureluarea eecutiei pro4ramului

Xandlerul de eceptie* locul de unde se reia eecutia pro4ramului,recuperea"a pro4ramul de la eroarea aparuta

Speci-carea e"ceptiei

Page 45: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 45/59

• Ka o metoda, prin thros se indica tipul erorilor care pot sa e aruncate decătre metoda respectiva

• $rorile de tip Funtime$ception nu trebuiesc specicate prin thros

Compilatorul fortea"a pro4ramatorul să specice eceptiile aca intr/o functie este posibil să apara o eceptie si pro4ramatorul nu

o specica prin thros, atunci apare eroare la compilare

$rorile vericate si enforced la compilare* chec(ed eceptions

• 6rinderea oricarei eceptii*

catch +$ception e A.. B

• 0tac(Irace*

print0tac(Irace, 4et0tac(Irace

• Fearuncarea unei eceptii*

>n catch se face thro

Inlantuirea e"ceptiilor

• Ka prinderea unei eceptii si aruncarea unei alte eceptii, se dorestepastrarea lantului eceptiilor care apar

• 0ubclasele Ihroable pot sa utili"e"e cau"a erorii ca si ar4ument inconstructor

• 0e poate folosi clau"a la constructor doar la clasele de tip $rror, $ceptionsau Funtime$ception

• Ka celelalte tipuri de erori, se poate utili"a initCause

Ierarhia e"ceptiilor .ava

• Clasa Ihroable* orice este mostenit din throable poate aruncat cu thro

• & tipuri de obiecte Ihroable* $rror and $ception

• $ceptiile java mostenesc din clasa $ception

• Sumele eceptiei este su4estiv pentru cau"a aparitiei eceptiei

Page 46: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 46/59

• Funtime$ception* sunt aruncate in mod automat de catre java la momentulaparitiei lor ? unchec(ed eceptions

• e obicei, acestea indica bu4uri si nu trebuie prinse cu tr8/catch

!estrictii la e"ceptii:

• Cand se suprascrie o metoda, se pot arunca doar eceptiile de tipul specicatin metoda din clasa de ba"a

• %tentie la eceptii in constructori* constructorii trebuie sa isi incheie cusuccess eecutia pentru a aduce obiectele intr/o stare si4ura

• $ception matchin4* se face potrivire pe cea mai apropiata clau"a catch carepotriveste cu tipul eceptiei

FII>

• Fun/Iime I8pe >dentication

• escoperirea tipului la eecutie si utili"area acestuia

• & tipuri de FII>*

 Iraditional ? la compilare

Fe\ection* / la eecutie [[[

• 5pcast* necesită reali"area automata a FII> pentru invocarea automată+polimorcă a metodei suprascrise

• 6rin FII> se poate identica tipul eact al unui obiect la eecutie +limbajul depro4ramare are metode pentru a reali"a acest lucru

Obiectul Class

• ;etoda forSame+WN” * returnea"a o referinta catre obiectul Class aferentunui tip

0olicită incarcarea sierului .class daca acesta nu e deja incarcat de

class loader

• ;etoda -bject.4etClass+* returnea"a obiectul de tip Class aferent unui tipdeja incarcat

• ;etode ale obiectului Class* 4etSame, 4et0impleSame, 4etCanonicalSame,is>nterface, 4et>nterfaces, 4et0uperclass,

Page 47: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 47/59

class literal

• Feferinta la obiectul de tip class poate obtinut si astfel* SumeIip.class

• $ste safer* poate vericat la compile time

•  I]6$* pentru tipurile rapper de primitive

boolean.class QQQ :oolean.I]6$

• Crearea unei referinte prin .class nu initiali"ea"ă obiectul de tip Classcorespun"ator

• 6re4atirea unui obiect pentru utili"are* in ' moduri

>ncarcarea clasei, reali"ata de class loader, se 4aseste b8tecodul pedisc si se crea"ă obiectul Class corespun"ator tipului

Kin(in4* se aloca spatiu de stocare pentru membrii static si se re"olvatoate referintele reali"ate de clasă către alte clase

>nitiali"are* se eecutia intiali"atorii statici si blocurile statice deinitiali"are. >nitiali"area este intar"iată până la prima referinta la ometodă statică sau un camp non/static

• >nitiali"area obiectului Class este amanata atata timp cât este posibil

!e/ection

• Cum lucram cu obiecte a caror clase nu sunt disponibile la compilare)

•  2ava.lan4.re\ect

• Clasele ield, ;ethod, Constructor

• 4etields, 4et;ethods and 4etConstructors

Desing patternul 0ro"%

• 6ro8* 5n obiect substitut, transmis in locul unui obiect real, pentru a furni"aprelucrari aditionale inainte de a transmite operatiile catre obiectul real

• 8namic pro8* se crea"a obiectul pro8 dinamic si se tratea"a apelurile catremetodele proied in mod dinamic

Page 48: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 48/59

Sistemul de I1O intr2un limba3 de programare

• 0istemul de >L- intr/un limbaj de pro4ramare trebuie să e capabil să trate"e

0urse diferite de dispo"itive de >L- +siere, consola, coneiuni de reteaetc

 Iipuri diferite de access la surse +access secvential, access random,access bu^ered

 Iipuri diferite de lucru cu sursa +binar, la nivel de caracter, la nivel delinie, la nivel de cuvant

Clasa &ile

• Fepre"inta un nume a unui sier sau unui set de siere dintr/un director

;etoda list+ /U produce un sir de 0trin4 care repre"inta sierele referite deobiectul de tip ile

• Kist poate invocata utili"and un irector8 ilter, pentru a returna doar acelesiere pentru care numele respecta un pattern

• >nterfata ilenameilter* metoda accept primeste la intrare obiectul de tip ilesi strin4ul pentru comparare. ;etoda list din ile apelea"a metoda acceptpentru ecare sier din ile, iar acesta este inserat in lista doar daca acceptfurni"ea"a true

-biectul ile poate utili"at ca sa creemLster4emLredenumim undirectorLsier sau un directorLsier cu o intrea4a cale

• ile poate utili"at ca sa citim informatiile referitoare la un sierLdirector

Input si Output

• 6entru intrare* clasele >nput0tream si Feader cu metoda read

• 6entru iesire* clasele -utput0tream si _riter cu metoda rite

• Fead si rite lucrea"a pe octeti +sau siruri de octeti

•  Ioate clasele de >L- sunt derivate din acestea

• Ka reali"area efectiva de >L- pro4ramatorii crea"a insuruiri de obiecte dinclasele de >L- +desi4n patternul ecorator

Design patternul Decorator

Page 49: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 49/59

• ecoratorul trebuie sa aiba aceasi interfata cu obiectele decorate.

• ecoratorul poate să etinda interfata acestor obiecte.

• Clasele ilter sunt radacina abstracta a claselor de decorator

!eader si riter

• %dau4a functionalitate pentru >L- la nivel de caracter sau 5nicode

• Clasele sunt adau4ate in ierarhia >nput0tream si -utput0tream deci nu seinlocuieste aceasta ierarhie

• Clase adapter* >nput0treamFeader si -utput0tream_riter

• ;otivul pentru care au fost create* sa se permita internationali"area +5nicodelucrea"a cu caractere pe 1< biti

• Fecomandare* sa se utili"e"e clase de tip Feader si _riter ori de cate ori eposibil

• Ka citiri specice la nivel de octet, sa se utili"e"e >nput0tream si-utput0tream

Serializare

• 6astrarea obiectelor dincolo de eecutia pro4ramelor

• %stfel obiectele pot recuperate si eecutia restartata de la punctul unde afost oprita anterior

• -rice obiect dintr/o clasă care implementea"a 0eriali"able poate convertitin sir de octeti si apoi restaurat

• 6ersistentă* durata de viata a unui obiect eista dincolo de eecutia unuipro4ram

• 6entru reali"area persistentei, obiectele trebuie seriali"ate L deseriali"ate inmod eplicit +li4htei4ht persistence

• 6entru seriali"are, se crea"ă un obiect dintr/un tip -utput0tream, acesta esteWrap” in interiorul unui -bject-utput0tream si se utili"ea"a metodarite-bject

• 6entru deseriali"are avem -bject>nput0tream si read-bject /U serecuperea"a un -bject si trebuie facut doncast

• 0eriali"area salvea"a intre4 ebul de obiecte din spatele obiectului seriali"at

Page 50: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 50/59

•  Iipul unui obiect deseriali"at* 4etClass

*"ternalize

• Ce se intampla daca dorim ca parti din obiect sa nu e seriali"ate)

• 0au dorim să recreem subobiecte de la "ero)

• >nterfata $ternali"able* etinde interfata 0eriali"able

• & metode noi* rite$ternal, read$ternal

• %ceste metode sunt apelate automat la seriali"are L deseriali"are si contincod suplimentar care se eecuta la aceste operatii

Ka obiectele deseriali"ate cu $ternali"able, obiectele sunt construite obisnuit+cu default constructor si apoi se apelea"a metoda read$ternal

• Ka obiectele $ternali"able, subobiectele componente trebuie seriali"atemanual +in rite$ternal iar la deseriali"are, ele trebuie recuperate de pedisc

• Ka mostenire dintr/o clasa $ternali"able, se apelea"a rite$ternal siread$ternal a clasei de ba"a pentru a se asi4ura seriali"are L deseriali"arecorecta

Introducere in programarea concurenta

• 6ro4ramele scrise pana acuma* secventiale

• 6ro4ramare concurenta* mai multe re de eecutie care rulea"a in paralel

• $emple de utili"are a modelului concurent de eecutie in 2ava*

0istemul eb clasic

 206

0in4 si 0_I au mecanisme pentru suport concurenta

• ;otive pentru a reali"a pro4rame concurente

$ecutie mai rapida ? in conditiile pro4ramarii multiprocesor

>mbunatatirea code design

Page 51: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 51/59

• Concurenta induce un cost* compleitate sporita a pro4ramelor

5hreading in .ava

•  Ihread* un \u secvential de eecutie dintr/un proces

• >ntr/un sistem multi/threadin4, un proces poate contine mai multe threaduriconcurente

• 6ro4ramatorul proate pro4rama ecare dintre aceste threaduri ca si cum aravea intre4 procesorul la dispo"itie

• 6entru a deni un tas( trebuie implementara interfata ,unnable

• >n 4eneral, metoda run a aceste interfete are o bucla care se eecuta atatatimp cat este necesar

• ct main are alocat propriul thread. 6t un tas( nou, trebuie sa se cree"e unobiect dintr/o clasa care implementea"a Funnable

Clasa 5hread

• 6entru a crea un thread, trebuie furni"at un obiect de tip Funnable inconstructorul unui obiect de tip Ihread

• ;etoda start a clasei Ihread reali"ea"a toate initiali"arile necesare si apoiapelea"a metoda run a obiectului Funnable a4re4at. ;etoda run este apelataintr/un r nou de eecutie

• ;ecanismul pentru lansarea threadurilor in eecutie este non/deterministic+nu putem 4aranta ordinea in care schedulerul aloca procesorul diverselortas(uri

•  Ihread.8ield+ /U solicita 2=; sa dea controlul unui alt thread din pro4ramulcurent ? pentru a solicita invocarea schedulerului

• Varba4e collectorul nu va colecta un thread nereferit decat dupa ce acesta isitermina eecutia propriului run

6ariatii la crearea tas(urilor

• 1. se crea"a o clasa care implementea"a Funnable. 5n obiect din aceastaclasa e transmis in constructorul unui obiect de tip Ihread

• &. se mosteneste din clasa Ihread, si se suprascrie metoda run

Page 52: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 52/59

• '. se crea"a o clasa care implementea"a Funnable. %ceasta clasa a4re4a unobiect de tip Ihread construit prin ne Ihread+this

• %tentie* la metodele & si ' tas(urile sunt pornite din constructor +cu start. /Ue problematic, threadul isi poate incepe eecutia inainte ca constructorul sa

se termine

• QU se prefera varianta 1 si utili"area eecutorilor

• Clasele care implementea"a Funnable sau etin4 Ihread pot scrise si ca siclase inner +eventual anonime [[[

*"ecutors

•  2ava furni"ea"a un nivel intermediar intr/un client si tas(urile pe care acestale eecuta. >n loc ca clientul sa apele"e tas(urile in mod direct, un obiectintermediar +eecutor va apela aceste tas(uri indirect

• $ecutors 4estionea"a ciclul de via"a a tas(urilor asincrone fara sa e nevoiesa 4estionam eplicit ciclul de viata a unui obiect Ihread

• 0e crea"a un $ecutor0ervice prin apelarea unei metode specice a clasei$ecutors

;etoda shutdon* previne ca alte tas(uri sa e trimise catre eecutor0ervicespre eecutie

•  Iipuri de $ecutor0ervice*

&i"ed5hread0ool: ea"a de la inceput numarul de threaduri utili"atepentru eecutia tas(urilor. $ste o metoda deosebit de ecienta pt caoverheadul cu crearea threadurilor este reali"at la crearea obiectuluide tip $ecutor0ervice

Cached5hread0ool: permite un numar variabil de threaduri. =a opri

crearea de threaduri noi pe masura ce threadurile vechi sunt reciclate  Single5hread*"ecutor este un iedIhread6ool cu un sin4ur thread

+de obicei pentru lon4/lived thread ? e. Ireaduri care asculta unsoc(et

5hreaduri daemon

Page 53: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 53/59

• 5n thread daemon furni"ea"a un serviciu 4eneral pro4ramului care rulea"a inbac(4round pe durata eecutiei pro4ramului

• >ntr/un pro4ram, cand toate threadurile non/daemon isi termina eecutia,pro4ramul este terminat, 2=; omorand toate threadurile daemon

• aca eista threaduri non/daemon care se eecuta, pro4ramul nu se termina

• ;ain este eecutat intr/o instanta non/daemon

• 5n thread se marchea"a ca si daemon inainte ca sa se inceapa eecutiaacestuia cu start

•  Ihreadactor8* interfata pentru crearea de threaduri la cerere. Ihreadurilepot personali"ate +de eemplu, threaduri daemon ? metoda neIhread

• -biecte implementand Ihreadactor8 pot furni"ate ca si constructori pentru$ecutori@ eecutor service/ul re"ultat va utili"a acest threadactor8 pentrucrearea noilor threaduri +cu metoda neIhread

• aca un thread daemon crea"a alte threaduri, acestea devin daemon larandul lor

0rinderea e"ceptiilor

• aca apare o eceptie in metoda run, aceasta se va propa4a pana la consola,in ca"ul in care eceptia nu e re"olvata in run

• 6roblema e re"olvata cu $ecutors

• $ceptiile aruncate de metoda run nu pot prinse cu tr8/catch in jurulcomen"ii eec a eecutorului

• 6rinderea unei eceptii aruncate de metoda run a unui thread

0e implementea"a interfata Ihread.5ncau4ht$ceptionXandler,creandu/se o clasa handler de eceptie

6entru threadul care rulea"a tas(ul, se asi4nea"a handlerul de eceptie

cu metoda set5ncau4ht$ceptionXandler %ceasta operatie poate scrisa in medoa neIhread a unui

 Ihreadactor8, si apoi se pot utili"a eecutorii

0e poate asi4na handlerul de eceptii implicit a clasei Ihread cusetefault5ncau4ht$ception

0arta3area resurselor – mute"

Page 54: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 54/59

• oua sau mai multe threaduri pot interfera, coli"ionand pe aceasi resursa

• 6roblema apare cand threadurile consumatoare se interfera cu celeproducatoare pe aceasi resursa

$ste nevoie de un mecanism care sa previna doua tas(uri sa utili"e"e aceasiresursa sensibila in acelasi timp

• ;ecanism mute +mutual exclusion* se seriali"ea"a accesul tas(urilor laresursa partajata

$emplu de mecanism mute*

• 0e pune un lacat pe resursa care trebuie utili"ata partajat, primul tas( careare acces la resursa blochea"a accesul celorlalte tas(uri, pana cand acesta isitermina operatia pe resursa

0arta3area resurselor – s%nchronized

• Cuvantul cheie s8nchorni"ed* reali"ea"a mutual eclusion pentru o resursa

• Fesursa partajata se incapsulea"a intr/un obiect

•  Ioate metodele care utili"ea"a resursa sunt marcate ca si s8nchorni"ed

• ;ecanismul s8nchroni"ed* ecare obiect are un monitor +lacat. Cand unthread intra in "ona de cod s8nchroni"ed, threadul achi"itionea"a monitorul,si nici un alt thread nu va mai putea intra intr/o "ona s8nchorni"ed a aceluiasi

obiect.

• aca primul thread care a achi"itionat monitorul intra intr/o noua "onas8nchorni"ed a aceluiasi obiect, se tine un contor a numarului de monitoareachi"itionate de thread

• $ista si un monitor la nivel de clasa pt s8nchroni"ed la metode statice

Mecanism mute" e"plicit: 7oc( 

• sectiuni critice * "onele de cod unde poate sa apara coli"iunea intre

threaduri• 6entru un obiect de tip Koc(* metodele loc(+ si unloc(+

• >mediat dupa loc(+ trebuie sa e inserat un bloc( tr8/nall8 cu unloc(+ innall8

• :locul tr8 trebuie sa contina comanda return

Page 55: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 55/59

$vanta3ele mecanismului 7oc( 

• %vantajul Koc( asupra s8nchroni"ed* in metodele s8nchroni"ed pot apareaeceptii, si atunci nu eista nici o sansa sa se readuca sistemul in stare valida

• Cu Koc(, se utili"ea"a mecanismul tr8/nall8, si nall8 se eecuta in oricesituatie +chiar si la o eceptie

• 0ansa pt erori cu s8nchroni"ed este mai redusa, se vor utili"a Koc( doar inca"uri speciale

• $emplu de situatie speciala* este nevoie de un loc( pe o durata specicatade timp

• tr8Koc(+* metoda non/bloc(in4 prin care se incearca achi"itionarea loc(/ului

• tr8Koc(+ar4umente* metoda care asteapta un anumit timp pt achi"itionarea

loc(ului

Sectiuni critice

• %vem nevoie de sectiuni critice daca partea critica este o bucata de cod dintr/o metoda +spre deosebire de intrea4a metoda

• 0ectiunea critica poate sa e marcata de cuvantul cheie s8nchroni"ed+obiect

• ;onitorul se achi"itionea"a pt obiectul specicat

aca se sincroni"ea"a doar pe sectiuni critice +si nu pe toata metoda sepoate casti4a timp pretios la eecutia pro4ramului

• 6t sectiuni critice se pot folosi si obiecte de tip Koc(

• Ka sincroni"are pe sectiuni critice, trebuie sa se utili"e"e acelasi obiect ca sitinta a sincroni"arii

Stari ale unui thread

• Se* starea unui thread e ne imediat dupa ce aceasta a fost creat. Ihreaduldevine eli4ibil să e alocat către C65 spre eecutie

• Funnable* threadul poate să e rulat. 0chedulerul nu este impiedicat de nimicca sa puna threadul in eecutie

• :loc(ed* tas(ul poate si e eecutat, dar eista ceva ce previne aceasta

• ead* un thread dead sau terminat nu mai poate alocat de către scheduler

Page 56: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 56/59

• % reali"a return din metoda run pune threadul in starea dead

Cum se pune un thread in starea bloc(ed:

• ;etoda sleep

• ;etoda ait, threadul devine runnable dupa ce primeste un notif8 sau si4nal

•  Ihreadul asteapta o operatie de >L- sa e nali"ata

•  Ihreadul apelea"a o metoda s8nchorni"ed si se asteapta achi"itia monitorului

Intreruperea tas(urilor

• >esire din metoda run* vericarea unui \a4 si return

• % intrerupe eecutia unui tas( in mijlocul metodei run este similar cu a

arunca o eceptie

• %pelul metodei interrupt+ a clasei Ihread* se setea"a statusul interruptedpentru acel tas(

• 5n thread cu statusul interrupted va arunca o eceptie de tipul>nterrupted$ception daca acest tas( este deja blocat sau incearca reali"areaunei operatii blocante

• 0tatusul interrupted va resetat la momentul aruncarii eceptiei sau candtas(ul apelea"a Ihread.interrupted+

• ;etoda shutdonSo+ a unui eecutor apelea"a Ihread.interrupt+ la ecarethread pornit de eecutor

• %pelul cancel pe un obiect utureT)U 4enerea"a interrupt

•  Ias(urile blocate de >L- sau s8nchroni"ed nu se intrerup cu interrupt

• %tentie* interrupt+ apare la inchiderea +close unui soc(et dar nu la close peun >L- obisnuit

•  Ias(urile blocate datorita s8nchorni"ed nu sunt intrerupte cu interrupt

• 0ectiunile critice 4ardate de FeentrantKoc( pot intrerupte

Cooperare intre tas(uri

• 6roblema cooperarii intre tas(uri nu se refera la accesul la o resursa partajata

Page 57: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 57/59

• $ste vorba de modul in care tas(urilor pot lucra in comun pentru atin4ereaaceluiasi obiectiv* un tas( trebuie reali"at inaintea altuia

• Xandsha(in4

_ait+ permite sa se astepte reali"area unor conditii care sunt in afaracontrolului tas(ului curent

• _ait+ suspenda tas(ul pana cand apare un notif8 sau un notif8%ll

• 0leep si 8ield nu eliberea"a loc(/ul obiectului

• _ait+ suspenda eecutia threadului si eliberea"a loc(/ul obiectului

• ait+ poate avea ca si ar4ument un numar de milisecunde

• _ait+, notif8+ si notif8%ll+ sunt metode ale -bject, ele pot apelate doar din

metode s8nchorni"ed +ele eliberea"a loc(/ul

• _ait+ apelat dintr/o metoda ne/s8nchroni"ed 4enerea"a>lle4al;onitor0tate$ception

• _ait este in4lobat intr/un hile*

;ai multe tas(uri pot sa astepte dupa acelasi loc( pentru acelasi motiv

6ana ca tas(ul sa ajun4a la ait+ e posibil ca alt tas( sa schimbesituatia si tas(ul sa trebuiasca resuspendat prin ait+

$ste posibil ca tas(uri diferite sa ceara acelasi loc( pentru motivediferite

89 De-neste -nal -nall% -nalize9

inal/ o clasa declarata cu nal nu poate subclasata. - clasa declarata canal opreste linia de mostenire, nu se poate etinde o clasa nala. - metodadeclarata cu nal nu poate suprascrisa.- variabila declarata cu nal poate initiali"ata numai o sin4ura data. 5tili"ata in special pentru mostenire

inall8/ :locul declarat cu nall8 se eecuta mereu dupa tr8 and catch atuncicand apare o eceptie neasteptata sau fara a o eceptie.$ste utili"atpentru a evita . %juta pro4ramatorul sa evite curatarea codului accidentalaprin return brea( sau continue.

Page 58: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 58/59

inali"e/este o metoda care daca este pre"enta intr/o clasa este apelatainaintea 4arba4e collectorului. ;etoda nali"e+ este utili"ata pentrucuratarea codului inainte ca un obiesct sa e luat de 4arba4e colector

89 De-neste private protected public

6rivate* elementele private pot accesate doar de creatorul clasei in cadrulmetodelor acelei clase

/ folosit in declararea unui camp sau a unei metode dintr/o clasa / specicafaptul ca membrul sau metoda respectiva poate accesata doar din cadrulclasei insesi, nu si din clasele derivate din aceasta clasa.

6ublic* elementele publice sunt disponibile oricaror alte clase

6rotected* similar cu private, utili"at in mostenire, clasele care mostenesc

pot accesa elementele private din clasele de ba"a

/folosit in declararea unui camp sau a unei metode dintr/o clasa / specicafaptul ca membrul sau metoda respectiva poate accesata doar din cadrulclasei insesi sau din clasele derivate din aceasta clasa.

;9 Descrieti mecanismul tr%2catch2-nall%

tr8 A

  LL codul care este susceptibil sa 4enere"e eceptie

B catch +I8pe1 tp1 A

  LL eceptii de tipul I8pe1

B catch +I8pe& tp& A

  LL eceptii de tipul I8pe&

B N

nall8 A

  LL cod care se eecuta indiferent de tipul de eceptie aruncat +sau nuB

 Ir8 ? catch functionea"a ca un sitch pe tipul de eceptie

& modalitati de tratare a erorilor

Page 59: java teorie hatz

7/21/2019 java teorie hatz

http://slidepdf.com/reader/full/java-teorie-hatz 59/59

 Iermination* eroarea este aruncata Fesumption* se inserea"a cod tr8 ? catch pt re"olvarea erorii

:locul Otr8O contine instructiunile de deschidere a unui sier si de citire dintr/un sier ambele putând produce eceptii. $ceptiile provocate de aceste

instructiuni sunt tratate în cele doua blocuri OcatchO, câte unul pentru ecaretip de eceptie.

>nchiderea sierului se face în blocul Onall8O, deoarece acesta este si4ur case va eecuta. ara a folosi blocul Onall8O închiderea sierului ar trebuitfacuta în ecare situatie în care sierul ar fost deschis, ceea ce ar dus lascrierea de cod redundant*