Java Hatz Full

57
1 1 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; -Metoda contine o parte fixa care este apelata de fiecare data si o parte care variază (strategia); -In cazul in care nu se utilizează interfetele, dacă dorim să aplicăm metoda (strategia) unui obiect dintr-o clasă care nu face parte din ierarhie, nu se poate; - => in exemplul Apply si Procesor, exista o cuplare foarte puternica intre metoda Apply.proces si clasa Procesor, astfel incat aceasta metoda nu poate fi aplicata decat obiectelor din ierarhia Procesor, si nicidecum altor obiecte din alte ierarhii; Procesor se creaza ca si o interfata, iar clasele care doresc sa faca parte din strategie vor implementa interfata scrisa Design patternul Adapter: -se scrie cod care preia la intrare interfata existenta si care sa produca interfata de care este nevoie in program; - Prin decuplarea interfetei de implementare se permite ca o interfata sa fie aplicata mai multor implementari, deci codul devine 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 Factory. Clasa Factory implementeaza o interfata care specifica metoda de creere; - Astfel, se poate schimba la runtime o implementare a unei functionalitati cu alta Control frameworks: -Application framework: un set de clase proiectate sa rezolve un tip anume de problemă (design patternul Template Method); -Pentru aplicarea application framework se mostenesc din clasele de baza si se schimba implementarea prin overriding; -Codul suprascris este cel care customizeaza solutia la cazul particular; -Template Method: contine structura de baza a algoritmului, iar partile specifice sunt apeluri la metode care pot fi override; -Astfel, se separa partile neschimbate ale algoritmului de cele flexibile; -Control framework: un tip particular de application framework prin care sistemul raspunde la evenimentele generate (sistem event-driven) – de exemplu GUIs; -In implementarea Control framework, inner class sunt utilizate pentru a exprima diversele actiuni (metoda action) Design patternul Decorator: -Decoratorul trebuie sa aiba aceasi interfata cu obiectele decorate; -Decoratorul poate să extinda interfata acestor obiecte; -Clasele Filter sunt radacina abstracta a claselor de decorator Obiect: un obiect are o stare, un comportament si o identitate Clasă: set de obiecte cu caracteristici şi funcţionalitate identice (termenul de clasa se substituite termenului de tip) Intefaţa: metode (funcţionalitate): cererile care pot fi adresate unui obiect particular dintr-o clasa Implementarea: mod concret de realizare a funcţionalităţii Moştenire: o clasă nouă se aseamănă (extinde) o clasă existentă Mostenire – cum se diferentiaza clasa derivata de clasa de baza? -Prin adaugare de noi metode suplimentare; -Schimbarea comportamentului unor metode existente in clasa de baza (overriding); -Relatia is-a: clasa derivata doar override metode din clasa de baza (principiul substitutiei pure); -Relatia is-like-a: clasa derivata adauga elemente noi interfetei clasei de baza (metodele noi nu sunt accesibile din clasa de baza – substitutia nu mai este pura)

description

java hatz full

Transcript of Java Hatz Full

Page 1: Java Hatz Full

1

1

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; -Metoda contine o parte fixa care este apelata de fiecare data si o parte care variază (strategia); -In cazul in care nu se utilizează interfetele, dacă dorim să aplicăm metoda (strategia) unui obiect dintr-o clasă care nu face parte din ierarhie, nu se poate; - => in exemplul Apply si Procesor, exista o cuplare foarte puternica intre metoda Apply.proces si clasa Procesor, astfel incat aceasta metoda nu poate fi aplicata decat obiectelor din ierarhia Procesor, si nicidecum altor obiecte din alte ierarhii; Procesor se creaza ca si o interfata, iar clasele care doresc sa faca parte din strategie vor implementa interfata scrisa Design patternul Adapter: -se scrie cod care preia la intrare interfata existenta si care sa produca interfata de care este nevoie in program; -Prin decuplarea interfetei de implementare se permite ca o interfata sa fie aplicata mai multor implementari, deci codul devine 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 Factory. Clasa Factory implementeaza o interfata care specifica metoda de creere; -Astfel, se poate schimba la runtime o implementare a unei functionalitati cu alta Control frameworks: -Application framework: un set de clase proiectate sa rezolve un tip anume de problemă (design patternul Template Method); -Pentru aplicarea application framework se mostenesc din clasele de baza si se schimba implementarea prin overriding; -Codul suprascris este cel care customizeaza solutia la cazul particular; -Template Method: contine structura de baza a algoritmului, iar partile specifice sunt apeluri la metode care pot fi override; -Astfel, se separa partile neschimbate ale algoritmului de cele flexibile; -Control framework: un tip particular de application framework prin care sistemul raspunde la evenimentele generate (sistem event-driven) – de exemplu GUIs; -In implementarea Control framework, inner class sunt utilizate pentru a exprima diversele actiuni (metoda action) Design patternul Decorator: -Decoratorul trebuie sa aiba aceasi interfata cu obiectele decorate; -Decoratorul poate să extinda interfata acestor obiecte; -Clasele Filter sunt radacina abstracta a claselor de decorator Obiect: un obiect are o stare, un comportament si o identitate Clasă: set de obiecte cu caracteristici şi funcţionalitate identice (termenul de clasa se substituite termenului de tip) Intefaţa: metode (funcţionalitate): cererile care pot fi adresate unui obiect particular dintr-o clasa Implementarea: mod concret de realizare a funcţionalităţii Moştenire: o clasă nouă se aseamănă (extinde) o clasă existentă Mostenire – cum se diferentiaza clasa derivata de clasa de baza? -Prin adaugare de noi metode suplimentare; -Schimbarea comportamentului unor metode existente in clasa de baza (overriding); -Relatia is-a: clasa derivata doar override metode din clasa de baza (principiul substitutiei pure); -Relatia is-like-a: clasa derivata adauga elemente noi interfetei clasei de baza (metodele noi nu sunt accesibile din clasa de baza – substitutia nu mai este pura)

Page 2: Java Hatz Full

2

2

Mosternirea multipla: -In Java se poate extinde o singura clasă si se pot implementa oricate clase; -Rolul interfetelor: sa se poata face upcast la mai mult decat o clasa de baza; Daca se poate crea o clasa de baza fara definitii de metode si variabile membre, se recomanda sa se creeze interfete in locul claselor abstracte; -Interfetele se pot combina (se extinde interfetele la fel ca si clasele); -Coliziunea numelor la implementarea mai multor interfete (daca interfetele de baza au acelasi nume de metoda cu semnaturi diferite): este o problema daca metodele difera doar prin tip de return => eroare la compilare; -Campurile care sunt inserate intr-o interfata devin in mod automat statis si final => reprezinta un mod convenabil pentru a defini constante (similar cu enum); -Campurile definite in interfete nu pot fi blank finals, ele trebuie initializate la definire Containere: Necesare datorita faptului ca nu stim de la design numarul de obiecte necesare pentru a rezolva o anumita problema; -Containerele sunt siruri de referinte catre alte obiecte; -Ele se expandeaza automat pentru a salva noi obiecte, dupa necesitati; -2 tipuri de liste: ArrayList, LinkedList; -Containerele in Java sunt create sa pastreze obiecte de tipul Object. -> ele pot salva orice; -Pot aparea exceptii la Downcast la runtime, timp de executie crescut datorită operației de Downcast Crearea obiectelor si ciclul de viata: -Fiecare obiect necesita resurse (memorie), crearea si distrugerea obiectelor devin importante; -Java utilizeaza in mod exclusiv alocarea dinamica a memoriei; -Pentru orice obiect, trebuie utilizat new la creeere; -Obiectele sunt alocate in zona de heap; -Distrugerea obiectelor este realizata automat de catre garbage collector; -GC identifică momentul in care un obiect nu mai este utilizat și il dezalocă Organizarea memoriei in Java: -Zona Registru: registrele procesorului, nu avem access direct la ele; -Stiva: zona de stiva memoreaza referintele catre obiecte; -Heap: in aceasta zona sunt alocate toate obiectele (la apelul new); -Spatiu de stocare non-RAM: obiecte care exista in afara spatiului de memorie a programului (persistenta obiectelor) Siruri (Arrays) in Java; -limbaj de programare orientat safety; -La crearea unui Array se creaza un sir de referinte fiecare initializata la valoarea null; - => fiecare membru al sirului trebuie initializat; -Java nu permite utilizarea unui indice in afara range-ului array-ului (se arunca o exceptie) Clase:: class ATypeName { /* class body */}Clasele contin:-Campuri; -Metode Modul de accesare a unui camp/metoda objectReference.member Pentru datele din tipuri primitive se garanteaza initializarea la valori implicite (false si 0)Metode, argumente si tip de return ReturnType methodName(/* argument list */) { /* method body*/} Operatori: -Toti operatorii produc o valoare prin aplicarea lor; -Ei pot produce si side-effects (modificarea valorii operanzilor); -Aliasing: la transmiterea unui obiect ca si argument intr-o metoda, se transmite o referinta, deci modificarea valorii in metoda afecteaza valoarea obiectului din afara metodei; -Operatorii ++ si – au forma postfixata si prefixata; -Operatorii == si =! Aplicati pe referinte de obiecte, compara referintele, si nu continutul obiectelor Garbage collector-ul dezaloca memoria alocata prin new, atunci cand obiectele nu mai sunt folosite; -colecteaza memoria ramasa alocata in obiectele care nu mai sunt utilizate si compacteaza heap-ul, rearanjand obiectele alocate; -Stop-and-copy: GC-ul opreste programul, scaneaza toate referintele de pe stack si copiaza obiectele identificate in noul heap. Ceea ce ramane e garbage-ul care trebuie dezalocat, iar noul heap e deja compactat

Page 3: Java Hatz Full

3

3

Metoda finalize: -permite operatii de stergere inainte ca obiectele sa fie supuse garbage collectorului; -Java nu garanteaza apelarea acestei metode, programatorul nu are control asupra momentului cand se apeleaza garbage collectorul; -Finalize se utilizeaza in general pentru a implementa termination conditions pentru un obiect (de exemplu inchiderea unui fisier) Specificatorii de access public, private, protected: -Access la nivel de package: accesul implicit al membrilor care nu au nici un specificator; -Pentru clasele din afara package-ului, acesti membrii sunt considerati private; -Access public: orice clasa de oriunde poate accesa membrul respective; -Clasele mostenite: pot accesa membrii protected din clasa de baza, ca si cum acestia ar fi membrii public; -Membrii private: pot fi accesati doar in clasa in care au fost definite; -Interfata claselor: public; -Implementarea functionalitatilor: private Sintaxa mostenirii: -Mostenirea se realizează ori de câte ori se crează o clasă: se moștenește din Object; -Mostenire: clasa nouă se aseamănă cu clasa veche: cuvântul cheie extends; -Clasa nouă va prelua automat toate campurile și metodele din clasa de bază; -Regulă nescrisă la mostenire: câmpurile din clasele de bază se scriu private iar metodele se lasă public (sau protected)â; -Clasa derivată poate să preia o metodă din clasa de bază si să o rescrie; -Din clasa derivată, pentru a se apela o metodă din clasa de bază se poate utiliza super; -Realizarea mostenirii: la crearea obiectului din clasa derivată, se crează un subobiect din clasa de bază (ca si cum ar fi realizată o compozitie către acesta); -Initializarea subobiectului din clasa de bază: doar prin constructor; -Constructorul clasei de bază este apelat intotdeauna inaintea constructorului clasei derivate; -Pentru apel constructor al cl de bază cu argumente: super ( argumente) Final: itemii final: nu pot fi schimbate ( de exemplu, intr-o clasă derivata); -Datele final: Constante la compilare care nu se schimba ulteriorValori initializate la runtime care nu se doreste sa fie schimbateStatic final: au o singură locatie de stocare a datei; -Final aplicat la o referinta: face referinta constantă, valoarea obiectului poate fi modificata; -Blank final: campuri declarate final care nu sunt initializate -> ele trebuie initializate inainte de utilzare; -Argumente final: în metodă nu se poate schimba valoarea către care arată referinta; -Metode final: nu pot fi schimbate prin mostenire; -Metodele final sunt tratate inline de către compilator; -Clase final: se inhibă mostenirea din clasa respectivă Mecanismul upcast: -Asocierea dintre numele metodei si corpul metodei – legare (binding); -Early binding: atunci cand legarea se face la compilare; -Late binding: atunci cand legarea se face la executie, exact inainte de executia efectiva a metodei; -Late binding = dynamic binding sau runtime binding; -Late binding: necesită un mecanism pentru identificarea tipului la executie (RTTI) – pentru a se identifica in mod corect corpul metodei care trebuie apelat; -In Java se utilizeaza late binding pentru orice apel de metodă, cu exceptia metodelor static si final (private e implicit final pt ca o metoda private nu poate fi mostenita); -Campurile si elementele static sunt rezolvate la compilare; -Legarea constructorilor este realizata la compilare Is-a vs. Is-like-a: -Relatie de mostenire de tip is-a: clasa derivată doar suprascrie interfața clasei de bază; -Relatie de mostenire de tip is-like-a: clasa derivată contine metode suplimentare față de clasa de bază; -Relația de substituție: La o relatie de tip is-a substitutia este pură: orice mesaj trimis clasei derivate poate fi trimis si clasei de bază (rezolvarea mesajului se face prin upcast) La o relație de tip is-like-a: partea extinsă din clasa derivată nu mai este disponibilă prin upcast (prin adresarea clasei de bază); -Downcast: operația inversă upcast – nu este o operație garantată, in sensul in care nu stim exact clasa derivată către care se face downcast; -Java verifică orice conversie (cast), si daca nu se poate realiza se aruncă o exceptie de tipul ClassCastException Clase abstracte:

Page 4: Java Hatz Full

4

4

-Rolul clasei Instrument (varful ierarhiei): să creeze o interfață comună claselor derivate; - => obiectele din clasa Instrument nu au sens (dpdv logic); - => clasa Instrument: clasă abstractă; -Pentru a evita astfel de erori la executie există un mecanism prin care se declară clasele abstracte: cuvantul cheie abstract; -Clasă abstractă: are cel putin o metodă abstractă (metodă declarată abstract si care nu are corp); -Se generează eroare la compilare dacă se incearcă crearea unui obiect dintr-o clasă abstractă; -La mostenire dintr-o clasă abstractă, metoda abstractă trebuie suprascrisă, altfel clasa derivată devine si ea abstractă Inner classes: -Se plaseaza clase in interiorul altor clase; -Inner classes reprezinta un concept diferit de compozitie; -De obicei, clasa exterioara are o metoda care returneaza un obiect din clasa inner; -Tipul obiectului din clasa interioara se specifica precum: OuterClass.InnerClass; -Obiectul clasei interioare are un link (referinta) catre obiectul clasei exterioare care l-a creat; -Obiectul clasei interioare poate accesa membrii obiectului clasei exterioare fara ca sa fie nevoie de calificare (dreptul de a accesa este asupra tuturor obiectelor membre ale clasei exterioare; -Pentru a se obtine referinta la obiectul clasei exterioare (din obiectul clasei inner) se utilizeaza: OuterType.this ; -Pentru a crea un obiect din clasa inner pornind de la un obiect din clasa outer se poate utiliza: obiectOuter.new ;- Clasele inner sunt potrivite pentru a implementa interfete: se realizeaza ascunderea implementarii Closures & callbacks: Closure: un obiect apelabil care retine informatie despre domeniul de vizibilitate in care a fost creat (are access la variabilele din domeniul de vizibilitate unde a fost creat); -=> clasa interioara este un closure (deoarece are o referinta catre obiectul exterior si poate sa acceseze inclusiv membrii privati ai clasei exterioare) Callback: un obiect primeste o informatie care va permite sa apelam obiectul initial la un moment ulterior de timp. Se implementeaza cu clase interioare. Clasa de tip Closure furnizeaza o poată în intriorul clasei exteriore (dar intr-un mod safe – nu se necesită ca sa transformam accesul la metodele acestei clase) Iteratori:- Este un design pattern; -Un obiect de tip iterator este asociat unei colectii si permite regasirea ordonata a obiectelor din colectia respective; -Metoda iterator() a unei colectii; -Metoda next() a obiectului iterator: produce urmatorul element din colectie; -Metoda hasNext(): interogheaza daca mai sunt elemente neiterate; -Metoda remove(): sterge ultimul element iterat din colectie; -Iteratorii pot produce elementele colectiei doar intr-o singura directive; -ListIterator: furnizat doar de interfata List, poate parcurge elementele colectiei in ambele directii Conceptul de exceptie: in domeniul de vizibilitate unde apare eroarea de obicei nu stim cum sa tratam eroarea, insa stim ca nu putem să continuăm cu eroarea, astfel că transmitem eroarea spre rezolvare la un domeniu de vizibilitate exterior Obiectul Class: -Java realizează RTTI prin intermediul obiectului Class; -Acesta contine informatie referitoare la tip, informatie care poate fi interogată; -Pentru fiecare clasă pe care o avem in program, există un obiect Class asociat; La compilarea unei noi clase, acest obiect este creat si salvat in fisierul .class; -La crearea unui obiect dintr-o clasă, JVM utilizează un subsistem numit class loader; Toate clasele sunt incarcate in mod dinamic de către JVM la prima utilizare a acestora (anume cand se face prima referinta la un membru static al clasei); La incarcarea unei clase, se verifică daca obiectul Class al tipului respectiv este incarcat, daca nu, se identifică fisierul .class pe disc, si octetii acestuia sunt verificati inainte să fie incarcati Sistemul de I/O intr-un limbaj de programare: -Sistemul de I/O intr-un limbaj de programare trebuie să fie capabil să trateze:Surse diferite de dispozitive de I/O (fisiere, consola, conexiuni de retea etc),Tipuri diferite de access la surse (access secvential, access random, access buffered),Tipuri diferite de lucru cu sursa (binar, la nivel de caracter, la nivel de linie, la nivel de cuvant)

Page 5: Java Hatz Full

5

5

Clasa File:- Reprezinta un nume a unui fisier sau unui set de fisiere dintr-un director; -Metoda list() -> produce un sir de String care reprezinta fisierele referite de obiectul de tip File; -List poate fi invocata utilizand un Directory Filter, pentru a returna doar acele fisiere pentru care numele respecta un pattern; -Interfata FilenameFilter: metoda accept primeste la intrare obiectul de tip File si stringul pentru comparare. Metoda list din File apeleaza metoda accept pentru fiecare fisier din File, iar acesta este inserat in lista doar daca accept furnizeaza true; -Obiectul File poate fi utilizat ca sa creem/stergem/redenumim un director/fisier sau un director/fisier cu o intreaga cale; -File poate fi utilizat ca sa citim informatiile referitoare la un fisier/director Input si Output: -Pentru intrare: clasele InputStream si Reader cu metoda read; -Pentru iesire: clasele OutputStream si Writer cu metoda write; -Read si write lucreaza pe octeti (sau siruri de octeti); -Toate clasele de I/O sunt derivate din acestea; -La realizarea efectiva de I/O programatorii creaza insuruiri de obiecte din clasele de I/O (design patternul Decorator) Tipuri de InputStream:- ByteArrayInputStream: permite ca un buffer de memorie sa fie utilizat ca si un InputStream (din buffer se extrag octeti); -StringBufferInputStream: converteste un String intr-un InputStream; FileInputStream: sursa de intrare e un fisier. Se furnizeaza la construirea obiectului fie un String fie un File; -PipedInputStream: este asociat cu un PipedOutputStream (care este furnizat la construirea obiectului). Implementeaza conceptul de Pipe; -SequenceInputStream: converteste unul sau mai multe InputStream intr-un singur obiect de tip InputStream (la construire se furnizeaza fie un InputStream, fie un Enumerator de obiecte InputStream); -FilterInputStream: clasa abstracta, interfata pentru decoratorii care furnizeaza tipuri particulare de citire Tipuri de OutputStream: -ByteArrayOutputStream: creaza un buffer de memorie (octeti). Datele scrise sunt trimise in acest buffer; -FileOutputStream: iesire intr-un fisier. Se construieste obiectul pe baza unui String sau a unui File; -PipedOutputStream: in conjunctie cu PipedInputStream. Pentru conceptul de Pipe; -FilterOutputStream: pentru iesire formatata, se implementeaza functionalitati de scriere Reader si Writer:- Adauga functionalitate pentru I/O la nivel de caracter sau Unicode; -Clasele sunt adaugate in ierarhia InputStream si OutputStream deci nu se inlocuieste aceasta ierarhie; -Clase adapter: InputStreamReader si OutputStreamWriter; -Motivul pentru care au fost create: sa se permita internationalizarea (Unicode lucreaza cu caractere pe 16 biti); -Recomandare: sa se utilizeze clase de tip Reader si Writer ori de cate ori e posibil; -La citiri specifice la nivel de octet, sa se utilizeze InputStream si OutputStream Serializare:- Pastrarea obiectelor dincolo de executia programelor; -Astfel obiectele pot fi recuperate si executia restartata de la punctul unde a fost oprita anterior; -Orice obiect dintr-o clasă care implementeaza Serializable poate fi convertit in sir de octeti si apoi restaurat; -Persistentă: durata de viata a unui obiect exista dincolo de executia unui program; -Pentru realizarea persistentei, obiectele trebuie serializate / deserializate in mod explicit (lightweight persistence); -Pentru serializare, se crează un obiect dintr-un tip OutputStream, acesta este “wrap” in interiorul unui ObjectOutputStream si se utilizeaza metoda writeObject; -Serializarea salveaza intreg webul de obiecte din spatele obiectului serializat; -Tipul unui obiect deserializat: getClass Externalize: -extinde interfata Serializable; -La obiectele deserializate cu Externalizable, obiectele sunt construite obisnuit (cu default constructor) si apoi se apeleaza metoda readExternal; -La obiectele Externalizable, subobiectele componente trebuie serializate manual (in writeExternal) iar la deserializare, ele trebuie recuperate de pe disc; -La mostenire dintr-o clasa Externalizable, se apeleaza writeExternal si readExternal a clasei de baza pentru a se asigura serializare / deserializare corecta

Desing patternul Proxy:

1. Proxy: Un obiect substitut, transmis in locul unui obiect real, pentru a furniza prelucrari aditionale inainte

de a transmite operatiile catre obiectul real …

Page 6: Java Hatz Full

6

6

2. Dynamic proxy: se creaza obiectul proxy dinamic si se trateaza apelurile catre metodele proxied in mod

dinamic

Design patternul Strategy:

1. Crearea unei metode care sa aibă comportament diferit in functie de tipul argumentului care se prezinta la

intrare;

2. Metoda contine o parte fixa care este apelata de fiecare data si o parte care variază (strategia);

3. In cazul in care nu se utilizează interfetele, dacă dorim să aplicăm metoda (strategia) unui obiect dintr-o

clasă care nu face parte din ierarhie, nu se poate; - => in exemplul Apply si Procesor, exista o cuplare

foarte puternica intre metoda Apply.proces si clasa Procesor, astfel incat aceasta metoda nu poate fi

aplicata decat obiectelor din ierarhia Procesor, si nicidecum altor obiecte din alte ierarhii; Procesor se

creaza ca si o interfata, iar clasele care doresc sa faca parte din strategie vor implementa interfata scrisa

Design patternul Adapter:

1. Se scrie cod care preia la intrare interfata existenta si care sa produca interfata de care este nevoie in

program;

2. Prin decuplarea interfetei de implementare se permite ca o interfata sa fie aplicata mai multor

implementari, deci codul devine mult mai facil de reutilizat

Design patternul FactoryMethod:

1. 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 Factory. Clasa Factory implementeaza o interfata care specifica metoda

de creere;

2. Astfel, se poate schimba la runtime o implementare a unei functionalitati cu alta

Control frameworks:

1. Application framework: un set de clase proiectate sa rezolve un tip anume de problemă (design

patternul Template Method); -Pentru aplicarea application framework se mostenesc din clasele de baza

si se schimba implementarea prin overriding;

2. Codul suprascris este cel care customizeaza solutia la cazul particular;

3. Template Method: contine structura de baza a algoritmului, iar partile specifice sunt apeluri la metode

care pot fi override;

4. Astfel, se separa partile neschimbate ale algoritmului de cele flexibile;

Page 7: Java Hatz Full

7

7

5. Control framework: un tip particular de application framework prin care sistemul raspunde la

evenimentele generate (sistem event-driven) – de exemplu GUIs; -In implementarea Control framework,

inner class sunt utilizate pentru a exprima diversele actiuni (metoda action)

Design patternul Decorator:

1. Decoratorul trebuie sa aiba aceasi interfata cu obiectele decorate;

2. Decoratorul poate să extinda interfata acestor obiecte;

3. Clasele Filter sunt radacina abstracta a claselor de decorator

Mostenire – cum se diferentiaza clasa derivata de clasa de baza?

1. Prin adaugare de noi metode suplimentare;

2. Schimbarea comportamentului unor metode existente in clasa de baza (overriding);

3. Relatia is-a: clasa derivata doar override metode din clasa de baza (principiul substitutiei pure);

4. Relatia is-like-a: clasa derivata adauga elemente noi interfetei clasei de baza (metodele noi nu sunt

accesibile din clasa de baza – substitutia nu mai este pura)

Crearea obiectelor si ciclul de viata:

1. Fiecare obiect necesita resurse (memorie), crearea si distrugerea obiectelor devin importante;

2. Java utilizeaza in mod exclusiv alocarea dinamica a memoriei;

3. Pentru orice obiect, trebuie utilizat new la creeere;

4. Obiectele sunt alocate in zona de heap;

5. Distrugerea obiectelor este realizata automat de catre garbage collector;

6. GC identifică momentul in care un obiect nu mai este utilizat și il dezalocă

Static:

1. Datele membre si metodele pot fi accesate doar sub calificarea unui obiect cunoscut, existent in memonia

programului (creat cu new).

2. Un camp sau o metoda statica nu este legata de un obiect anume dintr-o clasa;

3. Un camp static exista o singura data pentru o clasa, fiind partajat de catre toate obiectele clasei

respective;

4. Campurile statice pot fi referite prin numele clasei;

Page 8: Java Hatz Full

8

8

5. Metodele statice sunt la nivel de clasa, pot fi referite prin numele clasei fara a fi necesara existenta unui

obiect;

6. Metoda main;

7. Metodele statice nu pot accesa campuri/ metode nestatice din clasa.

8. Blocul static este apelat o singura data, la prima creare a unui obiect din clasa respectiva sau la apelarea

unei membre statice din acea clasa si poate sa initializeze doar date statice.

Operatori:

1. Toti operatorii produc o valoare prin aplicarea lor;

2. Ei pot produce si side-effects (modificarea valorii operanzilor);

3. Aliasing: la transmiterea unui obiect ca si argument intr-o metoda, se transmite o referinta, deci

modificarea valorii in metoda afecteaza valoarea obiectului din afara metodei;

4. Operatorii ++ si – au forma postfixata si prefixata;

5. Operatorii == si =! Aplicati pe referinte de obiecte, compara referintele, si nu continutul obiectelor

Garbage collector-ul:

1. dezaloca memoria alocata prin new, atunci cand obiectele nu mai sunt folosite;

2. colecteaza memoria ramasa alocata in obiectele care nu mai sunt utilizate si compacteaza heap-ul,

rearanjand obiectele alocate; -Stop-and-copy:

3. GC-ul opreste programul, scaneaza toate referintele de pe stack si copiaza obiectele identificate in noul

heap. Ceea ce ramane e garbage-ul care trebuie dezalocat, iar noul heap e deja compactat

Sintaxa mostenirii:

1. Mostenirea se realizează ori de câte ori se crează o clasă: se moștenește din Object;

2. Mostenire: clasa nouă se aseamănă cu clasa veche: cuvântul cheie extends;

3. Clasa nouă va prelua automat toate campurile și metodele din clasa de bază;

4. Regulă nescrisă la mostenire: câmpurile din clasele de bază se scriu private iar metodele se lasă public

(sau protected)â;

5. Clasa derivată poate să preia o metodă din clasa de bază si să o rescrie;

6. Din clasa derivată, pentru a se apela o metodă din clasa de bază se poate utiliza super;

Page 9: Java Hatz Full

9

9

7. Realizarea mostenirii: la crearea obiectului din clasa derivată, se crează un subobiect din clasa de bază (ca

si cum ar fi realizată o compozitie către acesta);

8. Initializarea subobiectului din clasa de bază: doar prin constructor;

9. Constructorul clasei de bază este apelat intotdeauna inaintea constructorului clasei derivate;

10. Pentru apel constructor al cl de bază cu argumente: super ( argumente)

Sintaxa compoziției:

1. Se plasează o referință către un obiect nou într-o clasă nouă

2. Referintele nou create se initializează la valoarea null -> trebuie initializate explicit

Operatia de delegare:

1. Operatie intermediară intre compozitie si agregare

2. Intr-o clasă se plasează un obiect membru din a 2-a clasă, iar clasa nouă va expune toate metodele

furnizate de obiectul din clasa 2-a

3. Pentru realizarea operatiilor de mostenire / compozitie, este suficient ca să se importe clasele reutilizate

(codul lor sursă nu este necesar)

Mecanismul upcast:

1. Asocierea dintre numele metodei si corpul metodei – legare (binding);

2. Early binding: atunci cand legarea se face la compilare;

3. Late binding: atunci cand legarea se face la executie, exact inainte de executia efectiva a metodei;

4. Late binding = dynamic binding sau runtime binding;

5. Late binding: necesită un mecanism pentru identificarea tipului la executie (RTTI) – pentru a se identifica

in mod corect corpul metodei care trebuie apelat;

6. In Java se utilizeaza late binding pentru orice apel de metodă, cu exceptia metodelor static si final

(private e implicit final pt ca o metoda private nu poate fi mostenita);

7. Campurile si elementele static sunt rezolvate la compilare;

8. Legarea constructorilor este realizata la compilare

Is-a vs. Is-like-a:

1. Relatie de mostenire de tip is-a: clasa derivată doar suprascrie interfața clasei de bază;

2. Relatie de mostenire de tip is-like-a: clasa derivată contine metode suplimentare față de clasa de bază;

Page 10: Java Hatz Full

10

10

3. Relația de substituție: La o relatie de tip is-a substitutia este pură: orice mesaj trimis clasei derivate poate

fi trimis si clasei de bază (rezolvarea mesajului se face prin upcast) La o relație de tip is-like-a: partea

extinsă din clasa derivată nu mai este disponibilă prin upcast (prin adresarea clasei de bază);

4. Downcast: operația inversă upcast – nu este o operație garantată, in sensul in care nu stim exact clasa

derivată către care se face downcast;

5. Java verifică orice conversie (cast), si daca nu se poate realiza se aruncă o exceptie de tipul

ClassCastException

Containere:

1. Necesare datorita faptului ca nu stim de la design numarul de obiecte necesare pentru a rezolva o anumita

problema;

2. Containerele sunt siruri de referinte catre alte obiecte;

3. Ele se expandeaza automat pentru a salva noi obiecte, dupa necesitati;

4. 2 tipuri de liste: ArrayList, LinkedList;

5. Containerele in Java sunt create sa pastreze obiecte de tipul Object. -> ele pot salva orice;

6. Pot aparea exceptii la Downcast la runtime, timp de executie crescut datorită operației de Downcast

Cuvantul cheie this:

1. In fiecare metoda apelata, referinta obiectului sub care se apeleaza metoda este transmisa in metoda sub

forma referintei this

2. this poate fi utilizat doar in interiorul metodelor ne-statice

3. In interiorul unei metode dinstr-o clasa, la apelul unei metode din clasa curenta, nu este nevoie sa se

utilizeze this

4. This este frecvent utilizat in return, pentru a returna obiectul curent

Clase abstracte:

1. Dintr-o clasa abstracta nu se poate instantia nu se poate instantia si foloseste doar la dezvoltarea

ulterioara a unor clase ce descriu obiecte concrete;

2. Pot contine obiecte fara nici o implementare;

3. Este definita prin cuvantul cheie abstract;

4. Pune la dispozitia subclaselor un model complet pe care sa-l implementeze;

5. Nu se pot crea obiecte din clasa abstract = > eroare la compilare;

Page 11: Java Hatz Full

11

11

6. Are cel putin o metoda abstracta, care se implementeaza in toate subclasele.

Interfete:

1. Se implementeaza si metodele nu au bloc;

2. O clasa care implementeaza o interfata trebuie obligatoriu sa specifice implementari pentru toate

metodele interfetei;

3. O clasa poate implementa mai multe interfete = superinterfete separate prin virgula – mostenire multipla;

4. Corpul unei interfete contine variabile constante, implicit static si final care trebuie initializate;

5. Metodele sunt implicit public si nu pot fi declarate cu nici un identificator pblic, private sau protected;

Mosternirea multipla:

1. In Java se poate extinde o singura clasă si se pot implementa oricate clase;

2. Rolul interfetelor: sa se poata face upcast la mai mult decat o clasa de baza

3. Daca se poate crea o clasa de baza fara definitii de metode si variabile membre, se recomanda sa se

creeze interfete in locul claselor abstracte; -Interfetele se pot combina (se extinde interfetele la fel ca si

clasele);

4. Coliziunea numelor la implementarea mai multor interfete (daca interfetele de baza au acelasi nume de

metoda cu semnaturi diferite): este o problema daca metodele difera doar prin tip de return => eroare la

compilare;

5. Campurile care sunt inserate intr-o interfata devin in mod automat statis si final => reprezinta un mod

convenabil pentru a defini constante (similar cu enum);

6. Campurile definite in interfete nu pot fi blank finals, ele trebuie initializate la definire.

Inner classes:

1. Se plaseaza clase in interiorul altor clase;

2. Inner classes reprezinta un concept diferit de compozitie;

3. De obicei, clasa exterioara are o metoda care returneaza un obiect din clasa inner;

4. Tipul obiectului din clasa interioara se specifica precum: OuterClass.InnerClass;

5. Obiectul clasei interioare are un link (referinta) catre obiectul clasei exterioare care l-a creat;

6. Obiectul clasei interioare poate accesa membrii obiectului clasei exterioare fara ca sa fie nevoie de

calificare (dreptul de a accesa este asupra tuturor obiectelor membre ale clasei exterioare;

Page 12: Java Hatz Full

12

12

7. Pentru a se obtine referinta la obiectul clasei exterioare (din obiectul clasei inner) se utilizeaza:

OuterType.this ;

8. Pentru a crea un obiect din clasa inner pornind de la un obiect din clasa outer se poate utiliza:

obiectOuter.new ;

9. Clasele inner sunt potrivite pentru a implementa interfete: se realizeaza ascunderea implementarii

Clase interioare anonime:

1. Sunt clase interioare fara nume (clase create direct la momentul utilizarii lor)

2. finalizeaza constructia instructiunii care contine definitia clasei anonime

3. Campurile din clasele anonime pot fi initializate cu valori din afara (din domeniul unde se creaza clasa)

4. Daca intr-o clasa anonima se doreste a fi utilizat un argument (sau o valoare) definita in afara acesteia,

atunci referinta acesteia trebuie sa fie final

5. Clasele anonime nu pot avea constructor, dar initializarile se pot realiza in blocul non-static de initializare

6. Clasele interioare pot fi create static (nested classes) daca nu se doreste utilizarea referintei obiectului

exterior in interiorul clasei inner

7. Clasele interioare parte a unei interfete devin automat static public. Rol: crearea de cod comun care sa fie

utilizat de toate implementarile interfetei

8. Oricat de adanca este imbricarea claselor nested, acestea pot accesa obiectele membre din clasele

exterioare, indiferent de nivelul de imbricare

9. La mostenire dintr-o clasa inner, trebuie furnizat la constructia obiectului un obiect din clasa inner, pentru

a se permite construirea sub-obiectului cl. baza ( enclosingClassReference.super() )

10. Clasele locale unui domeniu de vizibilitate au access la toate variabilele domeniului respectiv (inclusiv

cele final), insa aceste clase nu au specificator de access

Closure:

• un obiect apelabil care retine informatie despre domeniul de vizibilitate in care a fost creat (are access la

variabilele din domeniul de vizibilitate unde a fost creat); -=> clasa interioara este un closure (deoarece

are o referinta catre obiectul exterior si poate sa acceseze inclusiv membrii privati ai clasei exterioare)

Callback:

• un obiect primeste o informatie care va permite sa apelam obiectul initial la un moment ulterior de timp.

Se implementeaza cu clase interioare. Clasa de tip Closure furnizeaza o poată în intriorul clasei exteriore

(dar intr-un mod safe – nu se necesită ca sa transformam accesul la metodele acestei clase)

Page 13: Java Hatz Full

13

13

Iteratori:

1. Este un design pattern;

2. Un obiect de tip iterator este asociat unei colectii si permite regasirea ordonata a obiectelor din colectia

respective;

3. Metoda iterator() a unei colectii;

4. Metoda next() a obiectului iterator: produce urmatorul element din colectie;

5. Metoda hasNext(): interogheaza daca mai sunt elemente neiterate;

6. Metoda remove(): sterge ultimul element iterat din colectie;

7. Iteratorii pot produce elementele colectiei doar intr-o singura directive;

8. ListIterator: furnizat doar de interfata List, poate parcurge elementele colectiei in ambele directii

Obiectul Class:

1. Java realizează RTTI prin intermediul obiectului Class;

2. Acesta contine informatie referitoare la tip, informatie care poate fi interogată;

3. Pentru fiecare clasă pe care o avem in program, există un obiect Class asociat; La compilarea unei noi

clase, acest obiect este creat si salvat in fisierul .class;

4. La crearea unui obiect dintr-o clasă, JVM utilizează un subsistem numit class loader;

5. Toate clasele sunt incarcate in mod dinamic de către JVM la prima utilizare a acestora (anume cand se

face prima referinta la un membru static al clasei);

6. La incarcarea unei clase, se verifică daca obiectul Class al tipului respectiv este incarcat, daca nu, se

identifică fisierul .class pe disc, si octetii acestuia sunt verificati inainte să fie incarcati

Sistemul de I/O intr-un limbaj de programare:

• Sistemul de I/O intr-un limbaj de programare trebuie să fie capabil să trateze:Surse diferite de dispozitive

de I/O (fisiere, consola, conexiuni de retea etc),Tipuri diferite de access la surse (access secvential, access

random, access buffered),Tipuri diferite de lucru cu sursa (binar, la nivel de caracter, la nivel de linie, la

nivel de cuvant)

Clasa File:

1. Reprezinta un nume a unui fisier sau unui set de fisiere dintr-un director;

2. Metoda list() -> produce un sir de String care reprezinta fisierele referite de obiectul de tip File;

Page 14: Java Hatz Full

14

14

3. List poate fi invocata utilizand un Directory Filter, pentru a returna doar acele fisiere pentru care numele

respecta un pattern;

4. Interfata FilenameFilter: metoda accept primeste la intrare obiectul de tip File si stringul pentru

comparare. Metoda list din File apeleaza metoda accept pentru fiecare fisier din File, iar acesta este

inserat in lista doar daca accept furnizeaza true;

5. Obiectul File poate fi utilizat ca sa creem/stergem/redenumim un director/fisier sau un director/fisier cu o

intreaga cale;

6. -File poate fi utilizat ca sa citim informatiile referitoare la un fisier/director

Input si Output:

1. Pentru intrare: clasele InputStream si Reader cu metoda read;

2. Pentru iesire: clasele OutputStream si Writer cu metoda write;

3. Read si write lucreaza pe octeti (sau siruri de octeti);

4. Toate clasele de I/O sunt derivate din acestea; -La realizarea efectiva de I/O programatorii creaza

insuruiri de obiecte din clasele de I/O (design patternul Decorator)

Tipuri de InputStream:

1. ByteArrayInputStream: permite ca un buffer de memorie sa fie utilizat ca si un InputStream (din buffer

se extrag octeti);

2. StringBufferInputStream: converteste un String intr-un InputStream;

3. FileInputStream: sursa de intrare e un fisier. Se furnizeaza la construirea obiectului fie un String fie un

File;

4. PipedInputStream: este asociat cu un PipedOutputStream (care este furnizat la construirea obiectului).

Implementeaza conceptul de Pipe;

5. SequenceInputStream: converteste unul sau mai multe InputStream intr-un singur obiect de tip

InputStream (la construire se furnizeaza fie un InputStream, fie un Enumerator de obiecte InputStream);

6. FilterInputStream: clasa abstracta, interfata pentru decoratorii care furnizeaza tipuri particulare de citire

Tipuri de OutputStream:

1. ByteArrayOutputStream: creaza un buffer de memorie (octeti). Datele scrise sunt trimise in acest buffer;

2. FileOutputStream: iesire intr-un fisier. Se construieste obiectul pe baza unui String sau a unui File;

Page 15: Java Hatz Full

15

15

3. PipedOutputStream: in conjunctie cu PipedInputStream. Pentru conceptul de Pipe;

4. FilterOutputStream: pentru iesire formatata, se implementeaza functionalitati de scriere

Reader si Writer:

1. Adauga functionalitate pentru I/O la nivel de caracter sau Unicode;

2. Clasele sunt adaugate in ierarhia InputStream si OutputStream deci nu se inlocuieste aceasta ierarhie;

3. Clase adapter: InputStreamReader si OutputStreamWriter;

4. Motivul pentru care au fost create: sa se permita internationalizarea (Unicode lucreaza cu caractere pe 16

biti);

5. Recomandare: sa se utilizeze clase de tip Reader si Writer ori de cate ori e posibil;

6. La citiri specifice la nivel de octet, sa se utilizeze InputStream si OutputStream

Serializare:

1. Pastrarea obiectelor dincolo de executia programelor;

2. Astfel obiectele pot fi recuperate si executia restartata de la punctul unde a fost oprita anterior;

3. Orice obiect dintr-o clasă care implementeaza Serializable poate fi convertit in sir de octeti si apoi

restaurat;

4. Persistentă: durata de viata a unui obiect exista dincolo de executia unui program;

5. Pentru realizarea persistentei, obiectele trebuie serializate / deserializate in mod explicit (lightweight

persistence);

6. Pentru serializare, se crează un obiect dintr-un tip OutputStream, acesta este “wrap” in interiorul unui

ObjectOutputStream si se utilizeaza metoda writeObject;

7. Serializarea salveaza intreg webul de obiecte din spatele obiectului serializat; -Tipul unui obiect

deserializat: getClass

Externalize:

1. extinde interfata Serializable;

2. La obiectele deserializate cu Externalizable, obiectele sunt construite obisnuit (cu default constructor) si

apoi se apeleaza metoda readExternal;

Page 16: Java Hatz Full

16

16

3. La obiectele Externalizable, subobiectele componente trebuie serializate manual (in writeExternal) iar la

deserializare, ele trebuie recuperate de pe disc;

4. La mostenire dintr-o clasa Externalizable, se apeleaza writeExternal si readExternal a clasei de baza

pentru a se asigura serializare / deserializare corecta

RTTI:

1. Run-Time Type Identification

2. Descoperirea tipului la executie si utilizarea acestuia

3. 2 tipuri de RTTI:

-Traditional – la compilare

-Reflection: - la executie !!!

4. Upcast: necesită realizarea automata a RTTI pentru invocarea automată (polimorfică) a metodei

suprascrise

5. Prin RTTI se poate identifica tipul exact al unui obiect la executie (limbajul de programare are metode

pentru a realiza acest lucru)

Final:

1. declara ca o clasa nu poate accesa subclase

2. declararea are 2 scopuri:

• securitate : unele metode pot astepta ca parametru un obiect al unei clase si nu al unei sublcase, dar tipul

exact al unui obiect nu poate fi aflat cu exactitate decat in momentul executiei

• programare in spirit orientat obiect: o clasa perfecta nu trebuie sa aiba subclase

Finalize:

• Este o metoda ce se implementeaza in vederea oricarui tip ce incapsuleaza o resursa negestionata, care

trebuie sa suporte finalizarea, adica GC determina ca un obiect trebuie eliminate din memorie si apeleaza

metoda Finalize care ofera resursei eliberarea corecta, colectarea acesteia

Executia unui bloc Try-Catch-Finally:

Page 17: Java Hatz Full

17

17

1. Un bloc try este urmat de mai multe blocuri catch si optional de un bloc finally

2. Blocul try-catch sta la baza sistemului de tratare a erorilor, o portiune de cod nu poate fi

monitrizata pentru tratarea exceptiilor, fara a fi inclusa intr-un astfel de bloc

3. Daca o exceptie este aruncata in blocul try, aceasta este prinsa in blocul catch corespunzator, dupa

care blocul acelui catch se executa

4. Finally este folosit atunci cand dorim ca anumite portiuni de cod sa se execute indifferent daca

blocul try s-a executat normal sau a generat o exceptie => blocul finally se executa indifferent de

modul in care blocul try si-a terminat executia

Clauza throws:

1. Daca o metoda contine cod care ar putea genera o exceptie, si totusi, in cadrul metodei nu exista un

cod try-catch care sa prinda acea exceptie => metoda trebuie sa specifice prin clauza throws ca poate

genera acea exceptie

2. Nu se supun acestei reguli exceptiile care sunt subclase ale claselor Error si RunTimeException

Clauza throw:

• Pentru a genera manual o exceptie in urma unei stari pe care o consideram eronata, folosim cuvantul

cheie throw;

Polimorfism:

1. Acelasi nume se poate referi la 2 metode diferite.

2. Este de 2 feluri:

• Overriding – metoda cu acceasi semnatura cu o alta din clasa parinte;

• Overriding – doua sau mai multe metode in acelasi clasa cu acelasi nume, dar semnaturi diferite.

Organizarea codului:

1. Pentru fiecare clasa compilata se produce un fisier .class

2. Un program este compus dintr-o colectie de fisiere .class

3. Acestea pot fi arhivate: fisier .jar

4. Fiecare fisier .java incepe cu mentiunea “package”: se indica numele packageului din care vor face parte

clasele

5. Clasele utilizate care fac parte din alt package se importa cu “import”

Page 18: Java Hatz Full

18

18

6. Toate clasele dintr-un package vor fi colectate intr-un singur subdirector

7. Conventie pentru denumirea packageurilor: utilizarea domeniilor de internet in ordine inversa

8. Calea root pentru directorare: variabila sistem CLASSPATH

9. CLASSPATH poate include directoare sau fisiere .jar

1. Ceesteoclasajavasicumsesalveazapedisk?

Clasă:setdeobiectecucaracteristicişifuncţionalitateidentice(termenuldeclasasesubstituitetermenuluidetip)

Oclasareprezintaomodalitatedeadescrieunnoutipdedate.Clasaesteodescriereauneimultimideobiectecaracterizateprinstructurisicomportamentesimilare.Deaceea,oclasavacuprindedefinitiiledatelorsioperatiilorcecaracterizeazaobiecteleclaseirespective.

Dateledefiniteintr-oclasasemainumescatribute,iaroperatiilesemainumescmetodesaufunctii-membru.Atributelesimetodeleformeazamembriiuneiclase.

SintaxafolositapentruadefinioclasainJavaeste:

classnume_clasa{//datesimetode}

Salvareapedisksefaceinfolderulbuiltcunumeleclaseisiextensia.class

2. Ceesteunpackage?

Unpackagegrupeazatoateclasele,Utilizatepentruorganizareaclaselor.Packageurilepotsicomprimatesubformajar.

3. Definestefinal,finallyfinalize.

Final-oclasadeclaratacufinalnupoatefisubclasata.Oclasadeclaratacafinalopresteliniademostenire,nusepoateextindeoclasafinala.Ometodadeclaratacufinalnupoatefisuprascrisa.Ovariabiladeclaratacufinalpoatefiinitializatanumaiosinguradata.Utilizatainspecialpentrumostenire

Finally-Bloculdeclaratcufinallyseexecutamereudupatryandcatchatuncicandapareoexceptieneasteptatasaufaraafioexceptie.Esteutilizatpentruaevita.Ajutaprogramatorulsaevitecuratareacoduluiaccidentalaprinreturnbreaksaucontinue.

Finalize-esteometodacaredacaesteprezentaintr-oclasaesteapelatainainteagarbagecollectorului.Metodafinalize()esteutilizatapentrucuratareacoduluiinaintecaunobiesctsafieluatdegarbagecolector

Page 19: Java Hatz Full

19

19

4. Definestevariabilalocala,variabilamembrasivariabiladeclasa

Variabiledeinstanţă.Suntunicefiecăreiinstanţeleclasei.

Variabiledeclasă.Osingurăcopiepentrutoateinstanţeleclasei.Sefoloseştemodificatoruldeacces„static”.

Variabilelocale.Variabiletemporaredeclarateîncadruluneimetodesauaunuibloc.Suntvizibiledoarîncadrulaceleimetode.

Parametri.Variabileleprincaresetrimitargumentelaapelulmetodelor.

variabiledeInstanta(atribute)–acestevariabiledefinescvalorileunuiobiect,deci,elesuntcreateatuncicândobiectulestecreat;eleexistadecândobiectulestecreatsipanacandacestaestedistrus;doarobiectulsimetodelesaleauacceslavariabileledeinstanta;

variabilelestatice–acestevariabilesuntpartedintr-oclasa;suntcreateatuncicândclasaesteincarcatadeJVM;

variabilelocalealeunormetode–acestevariabilesuntdefinitepestivametodeisieleexistaatâtatimpcâtmetodaesteexecutata(existainstivadeapeluri);variabilelelocalenupotfiaccesatesidininteriorulunormetodeimbricatechiardacaeleexistacandmetodaimbricataesteexecutata

variabilelocaleunuiblocdecod-acestevariabilesuntdefiniteininteriorulblocurilordecod(intre{si})sipoatefiutilizateintimpcebloculesteexecutat;blocuridecodsunttipicepentru,for,whilesiblocurideinitializare.

Variabliemembre-suntdeclarateincadruluneiclase,darapartinunuiobiect.

5. Definesteprivate,protected,public

Private:elementeleprivatepotfiaccesatedoardecreatorulclaseiincadrulmetodeloraceleiclase

-folositindeclarareaunuicampsauauneimetodedintr-oclasa-specificafaptulcamembrulsaumetodarespectivapoatefiaccesatadoardincadrulclaseiinsesi,nusidinclaselederivatedinaceastaclasa.

Public:elementelepublicesuntdisponibileoricaroralteclase

Protected:similarcuprivate,utilizatinmostenire,claselecaremostenescpotaccesaelementeleprivatedinclaseledebaza

-folositindeclarareaunuicampsauauneimetodedintr-oclasa-specificafaptulcamembrulsaumetodarespectivapoatefiaccesatadoardincadrulclaseiinsesisaudinclaselederivatedinaceastaclasa.

Page 20: Java Hatz Full

20

20

6. RolulclaselordetipFilter

Unfiltruesteunobiectdeaefectuasarcinidefiltrarepefiecarecerere,laoresursă(cuunconținutdeservletsaustatice),sauperăspunsullaoresursă,sauambele.

Exemplelecareaufostidentificatepentruacestdesignsunt1)Filtredeautentificare2)exploatareaforestierășiAuditfiltre3)deconversiefotografiefiltre4)Filtredecompresieadatelor5)Filtreledecriptare6)FiltreTokenizing7)Filtrecaredeclanseazaresursedeaccesevenimente8)XSL/Tfiltre9)Mime-Tipfiltrulanț

ClaseleFiltersuntradacinaabstractaaclaselordedecorator

7. DesignpatternulIterator

8. DescrietimoduldeutilizareaDecoratorilorlarealizareai/oinjava

9. Careestediferentaintreoclasaabstractasiointerfata

Ointerfatadefinesteunsetdemetode,proprietati,evenimente,indexatori.Acestimembrivorfiimplementatideoclasasauchiardeostructura.

Oclasaabstractaesteoclasacarenupoatefiinstantiatasiestefolositapentrumostenire.Oclasacarenuesteabstractasicarederiveazadintr-oclasaabstracta,trebuiesaincludaimplementariletuturormembrilorabstracti.

10. Descrietimecanismultry-catch-finally

try{

//codulcareestesusceptibilsagenerezeexceptie

}catch(Type1tp1){

//exceptiidetipulType1

Page 21: Java Hatz Full

21

21

}catch(Type2tp2){

//exceptiidetipulType2

}…finally{

//codcareseexecutaindiferentdetipuldeexceptiearuncat(saunu)}

Try–catchfunctioneazacaunswitchpetipuldeexceptie

2modalitatidetratareaerorilor

n Termination:eroareaestearuncatan Resumption:seinsereazacodtry–catchptrezolvareaerorii

Blocul"try"contineinstructiunilededeschidereaunuifisiersidecitiredintr-unfisierambeleputândproduceexceptii.Exceptiileprovocatedeacesteinstructiunisunttratateînceledouablocuri"catch",câteunulpentrufiecaretipdeexceptie.

Inchidereafisieruluisefaceînblocul"finally",deoareceacestaestesigurcasevaexecuta.Faraafolosiblocul"finally"închidereafisieruluiarfitrebuitfacutaînfiecaresituatieîncarefisierularfifostdeschis,ceeacearfiduslascriereadecodredundant:

11. Descrietimoduleledecreareaobiectelordintipulclaselorinterioarecarenusuntanonimie

Clasainterioarãestenecesarãnumaiclaseiexterioare.Pentrureducereanumãruluideclasedenivelsuperiorsipentrusimplificareacomunicãriiîntreclaseleascultãtorlaevenimenteputemdefiniclaselereceptorcanisteclaseinterioarecunume,incluseînclasacufereastraaplicatiei:classMFrameextendsJFrame{JButtonb1=newJButton("+");JButtonb2=newJButton("-");JTextFieldtext=newJTextField(6);intn=0;publicMFrame(){Containerc=getContentPane();b1.addActionListener(newB1L());b2.addActionListener(newB2L());c.setLayout(newFlowLayout());c.add(b1);c.add(b2);text.setText(""+n);c.add(text);}//claseinclusecunume

Page 22: Java Hatz Full

22

22

classB1LimplementsActionListener{publicvoidactionPerformed(ActionEventev){text.setText(""+++n);}}classB2LimplementsActionListener{publicvoidactionPerformed(ActionEventev){text.setText(""+--n);}}Definireadeclaseincluseanonimereducesimaimultlungimeaprogramelor,darelesuntmaigreudecititsideextins

12. Fieunsystemformaldefinitpealfabetulformatdinlitereleasib.Limbajulformatacceptadoarcuvinte

careseincheiecuaab.SasescrieautomatulfinitdeterministpentruacestlimbajsireprezentarealimbajuluiinBNF.

13. Descrietimodaliateaderealizareaunuiiteratorsiincercatisafurnizatiunexempluconcretdeutilizareaacestuisablondeprogramare Uniteratoresteunobiectcarepermitetraversareauneicolectiisimodificareaacesteia(ex:stergeredeelemente)inmodselectiv.Putetiobtineuniteratorpentruocolectie,apelandmetodasaiterator().InterfataIteratoresteurmatoarea:publicinterfaceIterator<E>{booleanhasNext();Enext();voidremove();//optional}Metodeleauurmatorulcomportament:hasNext-intoarcetruedacamaiexistaelementeneparcurseincadeiteratorulrespectivnext-intoarceurmatorulelementremove-eliminadincolectieultimulelementintorsdenext.Inmodevident,removenupoatefiapelatdecatosinguradatadupaunapelnext.Dacaaceastaregulanuesterespectata,vomprimioeroare.Neputemimaginacauniteratorsepozitioneazaintreelementelecolectiei.Initial,cursorulsauprecedeprimulelement,astfelcaprimulapelnextvaintoarceprimulelement.Atentie:MetodaremoveestesinguramodalitateSIGURAdeainlaturaunelementdintr-ocolectieintimpulparcurgeriiacesteia.Oricealtametodaareuncomportamentneprecizat(nuputemgarantacastergereavaavealoc,saucaelementulstersvaficelpecarechiardoreamsa-lstergem).Esteutilsafolosimiteratoricanddorim:stergereaelementuluicurent,intimpuliterariiCanddorimsaiterammaimultecolectiiinparalel.

Page 23: Java Hatz Full

23

23

Exempludefolosireaunuiiterator:Collectionc=newArrayList();Iteratorit=c.iterator();while(it.hasNext()){//verificariasupraelementuluicurent:it.next();it.remove();}

14. Ceinseamnaupcast?Descrietimecanismullegariiintarziatesicumfaciliteazaacestmecanismrealizareaproprietatiideupcast. Proprietateadeupcastpresupunetratareaunuiobiectdintr-oclasaderivatacasicumarfidinclasadebază. Legare(binding)=asociereadintrenumelemetodeisicorpulmetodei.Latebindingnecesitaunmecanismptidentificareatipuluilaexecutie(RTTI),ptaseidentificainmodcorectcorpulmetodeicaretrebuieapelat.Incazullatebinding,legareasefacelaexecutie,exactinaintedeexecutiaefectivaametodei.Seutilizeazalatebindingptoriceapeldemetoda,cuexceptiametodelorstaticsifinal.

15. Careesterolulconstructoruluidecopiereincazulagregariiindirecte?Constructorulesteometodăspecialăapelatăautomatlainstanţiereauneiclaseşifaceoperaţiilenecesarepentruiniţializareafiecăruiobiectaluneiclasefieeastaticăsaudinamică.Dacăsefoloseştepentruainiţializaunobiectcualtobiectatuncidenumireadeconstructordecopiere.Agregareaesterelatiaintredouaobiecteincareunuldintreobiecteapartineceluilaltobiect.Agregarearedaapartentaunuiobiectlaunaltobiect.Dinpunctdevedereconceptual,exista2tipurideagregare:strong–ladisparitiaobiectelorcontinuteprinagregare,existentaobiectuluicontainerinceteaza(deexemplu,ocartenupoateexistafarapagini)weak–obiectul-containerpoateexistasiinabsentaobiecteloragregate(deexemplu,obibliotecapoateexistasifaracarti)agregareindirect?

16. Careestediferentaintrecolectiilegenerice,heterogenesiparametrizate?Colectiilesuntunansambludeiterfetesiclasecerealizeaza:colectareaimpreunaaobiectelor,stocarea,sortareasiaccesareaobiectelor.Colectiigenerice–putemspecificatipuldedatapecareilvafolosicolectia, ex:List<String>stringsColectiieterogene–atuncicândsecreazăocolecţiepentruelementedeacelaşitip(necunoscut),oricinepoateinseraelementedealttipColectiiparametrizate-

17. SerializareaPastrareaobiectelordincolodeexecutiaprogramului.

Page 24: Java Hatz Full

24

24

=transformareaunuiobiectintr-osecventadeocteti,dincaresapoatafirefacutulteriorobiectuloriginal.Esteunmechanismutilizatptsalvareasirestaurareadatelor.

18. Externalizarea

Ceseintampladacadorimcapartidinobiectsanufieserializate?

Saudorimsărecreemsubobiectedelazero?

InterfataExternalizable:extindeinterfataSerializable

2metodenoi:writeExternal,readExternal

Acestemetodesuntapelateautomatlaserializare/deserializaresicontincodsuplimentarcareseexecutalaacesteoperatii

LaobiecteledeserializatecuExternalizable,obiectelesuntconstruiteobisnuit(cudefaultconstructor)siapoiseapeleazametodareadExternal

LaobiecteleExternalizable,subobiectelecomponentetrebuieserializatemanual(inwriteExternal)iarladeserializare,eletrebuierecuperatedepedisc

Lamosteniredintr-oclasaExternalizable,seapeleazawriteExternalsireadExternalaclaseidebazapentruaseasiguraserializare/deserializarecorecta

Evitareaserializariianumitorcomponentealeobiectelor

Primametoda:utilizareaExternalizable

Metoda2-a:cuvantulcheietransient:indicafaptulacelcampmarcatcutransientnuvafiserializatcasiparteaprocesuluiautomatdeserializare

Metoda3-a:seadaugalaclasemetodelewriteObjectsireadObjectincaresefurnizeazacodulprogramatoruluipentruserializare

AcestemetodesuntprivatesisuntapelateautomatdecatrewriteObjectsireadObjectaclaselorObjectOutputStreamsiObjectInputStream

19. Supraîncărcarea

Supraîncărcareauneimetode(owerloading)esteprocesulprincareîncadruluneiclasesuntadăugatedouăsaumaimultemetodecuacelaşinumedarcunumărdiferitdeparametri. Înmomentulapelăriimetodei,mediulde rulareva ştiexact cemetodăsăapelezepebazaparametrilor specificaţiastfel încâtnuexistaposibilitatedeconfuziesideapelareauneimetodegreşite.

Page 25: Java Hatz Full

25

25

20. CuvântulcheiethisCuvântulcheiethisestefolositîncadrulmetodeloratuncicândsedoreştesăseaibăacceslareferinţaobiectuluicurent.Cuvântulcheiethisesteoreferinţăcătreobiectulcurent.Acestcuvântcheieestefolositdoarîncazurilespecialecândestenevoiesăsefacăoreferinţăexplicitălaobiectulcurent.Deexempluîncazuluneimetodecaretrebuiesăreturnezeobiectulcurent.

21. Cuvântulcheie„static”

Cuvântulcheie„static”estefolositînjavapentruadefiniovariabilăsauometodăcarepoatefiaccesataprinintermediulnumeluiclasei,fărăafinevoiesăseconstruiascăobiectedetipulrespectiv.Înconstruireauneiaplicaţiiorientatepeobiecteutilizareaatributelorsaumetodelorstaticetrebuiesăfieevitatăşiacesteasăfiefolositedoarîncazuridestrictănecesitate.

22. Claseşimetodeabstracte·ometodăsenumeşteabstractădacăestedoardeclaratăşinudefinită.Declaraţiavaconţine,obligatoriu,

cuvântulcheieabstract:abstractnumemetoda();·oclasăceconţinemăcarometodăabstractădevineclasăabstractăşivatrebuicalificatăcaatare(încaz

contrarseproduceoeroaredecompilare).Fiindoclasă incompletă, tentativadeacreaunobiectdetipabstract,sesoldeazăcueroare.

23. InterfaţaInterfaţa acoperă noţiunea de clasă abstractă pură. În această situaţie definiţia tipului este precedată decuvântulcheieinterface,cevaînlocuicuvântulcheieclass.Prininterfaţăsepuneladispoziţieoformăşinuoimplementare.Eapoateconţine:·membridetipprimitiv(implicitstaticişifinali);·numedemetodecăroraliseataşează:

-listadeargumentedeapel;-tipurilereturnate

DesingpatternulProxy.Proxy:Unobiectsubstitut,transmisinloculunuiobiectreal,pentruafurnizaprelucrariaditionaleinaintedeatransmiteoperatiilecatreobiectulreal…Dynamicproxy:secreazaobiectulproxydinamicsisetrateazaapelurilecatremetodeleproxiedinmoddinamicDesignpatternulStrategy:-Creareauneimetodecaresaaibăcomportamentdiferitinfunctiedetipulargumentuluicareseprezintalaintrare;-Metodacontineopartefixacareesteapelatadefiecaredatasiopartecarevariază(strategia);-Incazulincarenuseutilizeazăinterfetele,dacădorimsăaplicămmetoda(strategia)unuiobiectdintr-oclasăcarenufacepartedinierarhie,nusepoate;-=>inexemplulApplysiProcesor,existaocuplarefoarteputernicaintremetodaApply.processiclasaProcesor,astfelincataceastametodanupoatefiaplicatadecatobiectelordinierarhiaProcesor,sinicidecumaltorobiectedinalteierarhii;Procesorsecreazacasiointerfata,iarclaselecaredorescsafacapartedinstrategievorimplementainterfatascrisaDesignpatternulAdapter:

Page 26: Java Hatz Full

26

26

-sescriecodcarepreialaintrareinterfataexistentasicaresaproducainterfatadecareestenevoieinprogram;-Prindecuplareainterfeteideimplementaresepermitecaointerfatasafieaplicatamaimultorimplementari,decicoduldevinemultmaifacildereutilizatDesignpatternulFactoryMethod:-inlocsaseapelezeunconstructorinmoddirect,pentrucreareaunuiobiectseapeleazaometodadecreereaobiectuluidintr-oclasaFactory.ClasaFactoryimplementeazaointerfatacarespecificametodadecreere;-Astfel,sepoateschimbalaruntimeoimplementareauneifunctionalitaticualtaControlframeworks:-Applicationframework:unsetdeclaseproiectatesarezolveuntipanumedeproblemă(designpatternulTemplateMethod);-Pentruaplicareaapplicationframeworksemostenescdinclaseledebazasiseschimbaimplementareaprinoverriding;-Codulsuprascrisestecelcarecustomizeazasolutialacazulparticular;-TemplateMethod:continestructuradebazaaalgoritmului,iarpartilespecificesuntapelurilametodecarepotfioverride;-Astfel,seseparapartileneschimbatealealgoritmuluideceleflexibile;-Controlframework:untipparticulardeapplicationframeworkprincaresistemulraspundelaevenimentelegenerate(sistemevent-driven)–deexempluGUIs;-InimplementareaControlframework,innerclasssuntutilizatepentruaexprimadiverseleactiuni(metodaaction)DesignpatternulDecorator:-Decoratorultrebuiesaaibaaceasiinterfatacuobiecteledecorate;-Decoratorulpoatesăextindainterfataacestorobiecte;-ClaseleFiltersuntradacinaabstractaaclaselordedecoratorObiect:unobiectareostare,uncomportamentsioidentitateClasă:setdeobiectecucaracteristicişifuncţionalitateidentice(termenuldeclasasesubstituitetermenuluidetip)Intefaţa:metode(funcţionalitate):cererilecarepotfiadresateunuiobiectparticulardintr-oclasaImplementarea:modconcretderealizareafuncţionalităţiiMoştenire:oclasănouăseaseamănă(extinde)oclasăexistentăMostenire–cumsediferentiazaclasaderivatadeclasadebaza?-Prinadaugaredenoimetodesuplimentare;-Schimbareacomportamentuluiunormetodeexistenteinclasadebaza(overriding);-Relatiais-a:clasaderivatadoaroverridemetodedinclasadebaza(principiulsubstitutieipure);-Relatiais-like-a:clasaderivataadaugaelementenoiinterfeteiclaseidebaza(metodelenoinusuntaccesibiledinclasadebaza–substitutianumaiestepura)Mosternireamultipla:-InJavasepoateextindeosinguraclasăsisepotimplementaoricateclase;-Rolulinterfetelor:sasepoatafaceupcastlamaimultdecatoclasadebaza;Dacasepoatecreaoclasadebazafaradefinitiidemetodesivariabilemembre,serecomandasasecreezeinterfeteinloculclaselorabstracte;-Interfetelesepotcombina(seextindeinterfetelelafelcasiclasele);-Coliziuneanumelorlaimplementareamaimultorinterfete(dacainterfeteledebazaauacelasinumedemetodacusemnaturidiferite):esteoproblemadacametodelediferadoarprintipdereturn=>eroarelacompilare;-Campurilecaresuntinserateintr-ointerfatadevininmodautomatstatissifinal=>reprezintaunmodconvenabilpentruadefiniconstante(similarcuenum);-Campuriledefiniteininterfetenupotfiblankfinals,eletrebuieinitializateladefinire

Page 27: Java Hatz Full

27

27

Containere:Necesaredatoritafaptuluicanustimdeladesignnumaruldeobiectenecesarepentruarezolvaoanumitaproblema;-Containerelesuntsiruridereferintecatrealteobiecte;-Eleseexpandeazaautomatpentruasalvanoiobiecte,dupanecesitati;-2tipurideliste:ArrayList,LinkedList;-ContainereleinJavasuntcreatesapastrezeobiectedetipulObject.->elepotsalvaorice;-PotapareaexceptiilaDowncastlaruntime,timpdeexecutiecrescutdatorităoperațieideDowncastCreareaobiectelorsicicluldeviata:-Fiecareobiectnecesitaresurse(memorie),creareasidistrugereaobiectelordevinimportante;-Javautilizeazainmodexclusivalocareadinamicaamemoriei;-Pentruoriceobiect,trebuieutilizatnewlacreeere;-Obiectelesuntalocateinzonadeheap;-Distrugereaobiecteloresterealizataautomatdecatregarbagecollector;-GCidentificămomentulincareunobiectnumaiesteutilizatșiildezalocăOrganizareamemorieiinJava:-ZonaRegistru:registreleprocesorului,nuavemaccessdirectlaele;-Stiva:zonadestivamemoreazareferintelecatreobiecte;-Heap:inaceastazonasuntalocatetoateobiectele(laapelulnew);-Spatiudestocarenon-RAM:obiectecareexistainafaraspatiuluidememorieaprogramului(persistentaobiectelor)Siruri(Arrays)inJava;-limbajdeprogramareorientatsafety;-LacreareaunuiArraysecreazaunsirdereferintefiecareinitializatalavaloareanull;-=>fiecaremembrualsiruluitrebuieinitializat;-Javanupermiteutilizareaunuiindiceinafararange-uluiarray-ului(searuncaoexceptie)Clase::classATypeName{/*classbody*/}Claselecontin:-Campuri;-MetodeModuldeaccesareaunuicamp/metodaobjectReference.memberPentrudateledintipuriprimitivesegaranteazainitializarealavaloriimplicite(falsesi0)Metode,argumentesitipdereturnReturnTypemethodName(/*argumentlist*/){/*methodbody*/}Operatori:-Totioperatoriiproducovaloareprinaplicarealor;-Eipotproducesiside-effects(modificareavaloriioperanzilor);-Aliasing:latransmitereaunuiobiectcasiargumentintr-ometoda,setransmiteoreferinta,decimodificareavaloriiinmetodaafecteazavaloareaobiectuluidinafarametodei;-Operatorii++si–auformapostfixatasiprefixata;-Operatorii==si=!Aplicatipereferintedeobiecte,comparareferintele,sinucontinutulobiectelorGarbagecollector-uldezalocamemoriaalocataprinnew,atuncicandobiectelenumaisuntfolosite;-colecteazamemoriaramasaalocatainobiectelecarenumaisuntutilizatesicompacteazaheap-ul,rearanjandobiectelealocate;-Stop-and-copy:GC-ulopresteprogramul,scaneazatoatereferinteledepestacksicopiazaobiecteleidentificateinnoulheap.Ceeaceramaneegarbage-ulcaretrebuiedezalocat,iarnoulheapedejacompactatMetodafinalize:-permiteoperatiidestergereinaintecaobiectelesafiesupusegarbagecollectorului;-Javanugaranteazaapelareaacesteimetode,programatorulnuarecontrolasupramomentuluicandseapeleazagarbagecollectorul;-Finalizeseutilizeazaingeneralpentruaimplementaterminationconditionspentruunobiect(deexempluinchidereaunuifisier)Specificatoriideaccesspublic,private,protected:-Accesslaniveldepackage:accesulimplicitalmembrilorcarenuauniciunspecificator;-Pentruclaseledinafarapackage-ului,acestimembriisuntconsideratiprivate;-Accesspublic:oriceclasadeoriundepoateaccesamembrulrespective;-Claselemostenite:potaccesamembriiprotecteddinclasadebaza,casicumacestiaarfi

Page 28: Java Hatz Full

28

28

membriipublic;-Membriiprivate:potfiaccesatidoarinclasaincareaufostdefinite;-Interfataclaselor:public;-Implementareafunctionalitatilor:privateSintaxamostenirii:-Mostenireaserealizeazăoridecâteorisecreazăoclasă:semoșteneștedinObject;-Mostenire:clasanouăseaseamănăcuclasaveche:cuvântulcheieextends;-Clasanouăvapreluaautomattoatecampurileșimetodeledinclasadebază;-Regulănescrisălamostenire:câmpuriledinclaseledebazăsescriuprivateiarmetodeleselasăpublic(sauprotected)â;-Clasaderivatăpoatesăpreiaometodădinclasadebazăsisăorescrie;-Dinclasaderivată,pentruaseapelaometodădinclasadebazăsepoateutilizasuper;-Realizareamostenirii:lacreareaobiectuluidinclasaderivată,secreazăunsubobiectdinclasadebază(casicumarfirealizatăocompozitiecătreacesta);-Initializareasubobiectuluidinclasadebază:doarprinconstructor;-Constructorulclaseidebazăesteapelatintotdeaunainainteaconstructoruluiclaseiderivate;-Pentruapelconstructoralcldebazăcuargumente:super(argumente)Final:itemiifinal:nupotfischimbate(deexemplu,intr-oclasăderivata);-Datelefinal:ConstantelacompilarecarenuseschimbaulteriorValoriinitializatelaruntimecarenusedorestesafieschimbateStaticfinal:auosingurălocatiedestocareadatei;-Finalaplicatlaoreferinta:facereferintaconstantă,valoareaobiectuluipoatefimodificata;-Blankfinal:campurideclaratefinalcarenusuntinitializate->eletrebuieinitializateinaintedeutilzare;-Argumentefinal:înmetodănusepoateschimbavaloareacătrecarearatăreferinta;-Metodefinal:nupotfischimbateprinmostenire;-Metodelefinalsunttratateinlinedecătrecompilator;-Clasefinal:seinhibămostenireadinclasarespectivăMecanismulupcast:-Asociereadintrenumelemetodeisicorpulmetodei–legare(binding);-Earlybinding:atuncicandlegareasefacelacompilare;-Latebinding:atuncicandlegareasefacelaexecutie,exactinaintedeexecutiaefectivaametodei;-Latebinding=dynamicbindingsauruntimebinding;-Latebinding:necesităunmecanismpentruidentificareatipuluilaexecutie(RTTI)–pentruaseidentificainmodcorectcorpulmetodeicaretrebuieapelat;-InJavaseutilizeazalatebindingpentruoriceapeldemetodă,cuexceptiametodelorstaticsifinal(privateeimplicitfinalptcaometodaprivatenupoatefimostenita);-Campurilesielementelestaticsuntrezolvatelacompilare;-LegareaconstructoriloresterealizatalacompilareIs-avs.Is-like-a:-Relatiedemosteniredetipis-a:clasaderivatădoarsuprascrieinterfațaclaseidebază;-Relatiedemosteniredetipis-like-a:clasaderivatăcontinemetodesuplimentarefațădeclasadebază;-Relațiadesubstituție:Laorelatiedetipis-asubstitutiaestepură:oricemesajtrimisclaseiderivatepoatefitrimissiclaseidebază(rezolvareamesajuluisefaceprinupcast)Laorelațiedetipis-like-a:parteaextinsădinclasaderivatănumaiestedisponibilăprinupcast(prinadresareaclaseidebază);-Downcast:operațiainversăupcast–nuesteooperațiegarantată,insensulincarenustimexactclasaderivatăcătrecaresefacedowncast;-Javaverificăoriceconversie(cast),sidacanusepoaterealizasearuncăoexceptiedetipulClassCastExceptionClaseabstracte:-RolulclaseiInstrument(varfulierarhiei):săcreezeointerfațăcomunăclaselorderivate;-=>obiecteledinclasaInstrumentnuausens(dpdvlogic);-=>clasaInstrument:clasăabstractă;-Pentruaevitaastfeldeerorilaexecutieexistăunmecanismprincaresedeclarăclaseleabstracte:cuvantulcheieabstract;-Clasăabstractă:arecelputinometodăabstractă(metodădeclaratăabstractsicarenuarecorp);-Segenereazăeroarelacompilaredacăseincearcăcreareaunuiobiectdintr-oclasăabstractă;-Lamosteniredintr-oclasăabstractă,metodaabstractătrebuiesuprascrisă,altfelclasaderivatădevinesieaabstractăInnerclasses:

Page 29: Java Hatz Full

29

29

-Seplaseazaclaseininteriorulaltorclase;-Innerclassesreprezintaunconceptdiferitdecompozitie;-Deobicei,clasaexterioaraareometodacarereturneazaunobiectdinclasainner;-Tipulobiectuluidinclasainterioarasespecificaprecum:OuterClass.InnerClass;-Obiectulclaseiinterioareareunlink(referinta)catreobiectulclaseiexterioarecarel-acreat;-Obiectulclaseiinterioarepoateaccesamembriiobiectuluiclaseiexterioarefaracasafienevoiedecalificare(dreptuldeaaccesaesteasupratuturorobiectelormembrealeclaseiexterioare;-Pentruaseobtinereferintalaobiectulclaseiexterioare(dinobiectulclaseiinner)seutilizeaza:OuterType.this;-Pentruacreaunobiectdinclasainnerporninddelaunobiectdinclasaoutersepoateutiliza:obiectOuter.new;-Claseleinnersuntpotrivitepentruaimplementainterfete:serealizeazaascundereaimplementariiClosures&callbacks:Closure:unobiectapelabilcareretineinformatiedespredomeniuldevizibilitateincareafostcreat(areaccesslavariabileledindomeniuldevizibilitateundeafostcreat);-=>clasainterioaraesteunclosure(deoareceareoreferintacatreobiectulexteriorsipoatesaaccesezeinclusivmembriiprivatiaiclaseiexterioare)Callback:unobiectprimesteoinformatiecarevapermitesaapelamobiectulinitiallaunmomentulteriordetimp.Seimplementeazacuclaseinterioare.ClasadetipClosurefurnizeazaopoatăînintriorulclaseiexteriore(darintr-unmodsafe–nusenecesităcasatransformamaccesullametodeleacesteiclase)Iteratori:-Esteundesignpattern;-Unobiectdetipiteratoresteasociatuneicolectiisipermiteregasireaordonataaobiectelordincolectiarespective;-Metodaiterator()auneicolectii;-Metodanext()aobiectuluiiterator:produceurmatorulelementdincolectie;-MetodahasNext():interogheazadacamaisuntelementeneiterate;-Metodaremove():stergeultimulelementiteratdincolectie;-Iteratoriipotproduceelementelecolectieidoarintr-osinguradirective;-ListIterator:furnizatdoardeinterfataList,poateparcurgeelementelecolectieiinambeledirectiiConceptuldeexceptie:indomeniuldevizibilitateundeapareeroareadeobiceinustimcumsatratameroarea,insastimcanuputemsăcontinuămcueroarea,astfelcătransmitemeroareasprerezolvarelaundomeniudevizibilitateexteriorObiectulClass:-JavarealizeazăRTTIprinintermediulobiectuluiClass;-Acestacontineinformatiereferitoarelatip,informatiecarepoatefiinterogată;-Pentrufiecareclasăpecareoaveminprogram,existăunobiectClassasociat;Lacompilareauneinoiclase,acestobiectestecreatsisalvatinfisierul.class;-Lacreareaunuiobiectdintr-oclasă,JVMutilizeazăunsubsistemnumitclassloader;ToateclaselesuntincarcateinmoddinamicdecătreJVMlaprimautilizareaacestora(anumecandsefaceprimareferintalaunmembrustaticalclasei);Laincarcareauneiclase,severificădacaobiectulClassaltipuluirespectivesteincarcat,dacanu,seidentificăfisierul.classpedisc,sioctetiiacestuiasuntverificatiinaintesăfieincarcatiSistemuldeI/Ointr-unlimbajdeprogramare:-SistemuldeI/Ointr-unlimbajdeprogramaretrebuiesăfiecapabilsătrateze:SursediferitededispozitivedeI/O(fisiere,consola,conexiunidereteaetc),Tipuridiferitedeaccesslasurse(accesssecvential,accessrandom,accessbuffered),Tipuridiferitedelucrucusursa(binar,laniveldecaracter,laniveldelinie,laniveldecuvant)ClasaFile:-Reprezintaunnumeaunuifisiersauunuisetdefisieredintr-undirector;-Metodalist()->produceunsirdeStringcarereprezintafisierelereferitedeobiectuldetipFile;-ListpoatefiinvocatautilizandunDirectoryFilter,pentruareturnadoaracelefisierepentrucarenumelerespectaunpattern;-InterfataFilenameFilter:metodaacceptprimestelaintrareobiectuldetipFilesistringulpentrucomparare.Metodalist

Page 30: Java Hatz Full

30

30

dinFileapeleazametodaacceptpentrufiecarefisierdinFile,iaracestaesteinseratinlistadoardacaacceptfurnizeazatrue;-ObiectulFilepoatefiutilizatcasacreem/stergem/redenumimundirector/fisiersauundirector/fisiercuointreagacale;-Filepoatefiutilizatcasacitiminformatiilereferitoarelaunfisier/directorInputsiOutput:-Pentruintrare:claseleInputStreamsiReadercumetodaread;-Pentruiesire:claseleOutputStreamsiWritercumetodawrite;-Readsiwritelucreazapeocteti(sausirurideocteti);-ToateclaseledeI/Osuntderivatedinacestea;-LarealizareaefectivadeI/OprogramatoriicreazainsuruirideobiectedinclaseledeI/O(designpatternulDecorator)TipurideInputStream:-ByteArrayInputStream:permitecaunbufferdememoriesafieutilizatcasiunInputStream(dinbufferseextragocteti);-StringBufferInputStream:convertesteunStringintr-unInputStream;FileInputStream:sursadeintrareeunfisier.SefurnizeazalaconstruireaobiectuluifieunStringfieunFile;-PipedInputStream:esteasociatcuunPipedOutputStream(careestefurnizatlaconstruireaobiectului).ImplementeazaconceptuldePipe;-SequenceInputStream:convertesteunulsaumaimulteInputStreamintr-unsingurobiectdetipInputStream(laconstruiresefurnizeazafieunInputStream,fieunEnumeratordeobiecteInputStream);-FilterInputStream:clasaabstracta,interfatapentrudecoratoriicarefurnizeazatipuriparticularedecitireTipurideOutputStream:-ByteArrayOutputStream:creazaunbufferdememorie(octeti).Datelescrisesunttrimiseinacestbuffer;-FileOutputStream:iesireintr-unfisier.SeconstruiesteobiectulpebazaunuiStringsauaunuiFile;-PipedOutputStream:inconjunctiecuPipedInputStream.PentruconceptuldePipe;-FilterOutputStream:pentruiesireformatata,seimplementeazafunctionalitatidescriereReadersiWriter:-AdaugafunctionalitatepentruI/OlaniveldecaractersauUnicode;-ClaselesuntadaugateinierarhiaInputStreamsiOutputStreamdecinuseinlocuiesteaceastaierarhie;-Claseadapter:InputStreamReadersiOutputStreamWriter;-Motivulpentrucareaufostcreate:sasepermitainternationalizarea(Unicodelucreazacucaracterepe16biti);-Recomandare:saseutilizezeclasedetipReadersiWriteroridecateorieposibil;-Lacitirispecificelaniveldeoctet,saseutilizezeInputStreamsiOutputStreamSerializare:-Pastrareaobiectelordincolodeexecutiaprogramelor;-Astfelobiectelepotfirecuperatesiexecutiarestartatadelapunctulundeafostopritaanterior;-Oriceobiectdintr-oclasăcareimplementeazaSerializablepoateficonvertitinsirdeoctetisiapoirestaurat;-Persistentă:duratadeviataaunuiobiectexistadincolodeexecutiaunuiprogram;-Pentrurealizareapersistentei,obiecteletrebuieserializate/deserializateinmodexplicit(lightweightpersistence);-Pentruserializare,secreazăunobiectdintr-untipOutputStream,acestaeste“wrap”ininteriorulunuiObjectOutputStreamsiseutilizeazametodawriteObject;-Serializareasalveazaintregwebuldeobiectedinspateleobiectuluiserializat;-Tipulunuiobiectdeserializat:getClass

Externalize:-extindeinterfataSerializable;-LaobiecteledeserializatecuExternalizable,obiectelesuntconstruiteobisnuit(cudefaultconstructor)siapoiseapeleazametodareadExternal;-LaobiecteleExternalizable,subobiectelecomponentetrebuieserializatemanual(inwriteExternal)iarladeserializare,eletrebuierecuperatedepedisc;-Lamosteniredintr-oclasaExternalizable,seapeleazawriteExternalsireadExternalaclaseidebazapentruaseasiguraserializare/deserializarecorecta

DesingpatternulProxy:

1. Proxy: Un obiect substitut, transmis in locul unui obiect real, pentru a furniza prelucrari aditionale

inaintedeatransmiteoperatiilecatreobiectulreal…

Page 31: Java Hatz Full

31

31

2. Dynamicproxy:secreazaobiectulproxydinamicsisetrateazaapelurilecatremetodeleproxiedinmod

dinamic

DesignpatternulStrategy:

1. Crearea unei metode care sa aibă comportament diferit in functie de tipul argumentului care se

prezintalaintrare;

2. Metodacontineopartefixacareesteapelatadefiecaredatasiopartecarevariază(strategia);

3. Incazulincarenuseutilizeazăinterfetele,dacădorimsăaplicămmetoda(strategia)unuiobiectdintr-o

clasăcarenufacepartedin ierarhie,nusepoate;-=> inexemplulApplysiProcesor,existaocuplare

foarteputernica intremetodaApply.proces si clasaProcesor,astfel incataceastametodanupoate fi

aplicatadecatobiectelordin ierarhiaProcesor,sinicidecumaltorobiectedinalte ierarhii;Procesorse

creazacasiointerfata,iarclaselecaredorescsafacapartedinstrategievorimplementainterfatascrisa

DesignpatternulAdapter:

1. Sescriecodcarepreialaintrareinterfataexistentasicaresaproducainterfatadecareestenevoiein

program;

2. Prin decuplarea interfetei de implementare se permite ca o interfata sa fie aplicata mai multor

implementari,decicoduldevinemultmaifacildereutilizat

DesignpatternulFactoryMethod:

1. Inlocsaseapelezeunconstructorinmoddirect,pentrucreareaunuiobiectseapeleazaometodade

creereaobiectuluidintr-oclasaFactory.ClasaFactoryimplementeazaointerfatacarespecificametoda

decreere;

2. Astfel,sepoateschimbalaruntimeoimplementareauneifunctionalitaticualta

Controlframeworks:

1. Application framework: un set de clase proiectate sa rezolve un tip anume de problemă (design

patternul Template Method); -Pentru aplicarea application framework se mostenesc din clasele de

bazasiseschimbaimplementareaprinoverriding;

2. Codulsuprascrisestecelcarecustomizeazasolutialacazulparticular;

Page 32: Java Hatz Full

32

32

3. TemplateMethod:continestructuradebazaaalgoritmului,iarpartilespecificesuntapelurilametode

carepotfioverride;

4. Astfel,seseparapartileneschimbatealealgoritmuluideceleflexibile;

5. Control framework: un tip particular de application framework prin care sistemul raspunde la

evenimentele generate (sistem event-driven) – de exemplu GUIs; -In implementarea Control

framework,innerclasssuntutilizatepentruaexprimadiverseleactiuni(metodaaction)

DesignpatternulDecorator:

1. Decoratorultrebuiesaaibaaceasiinterfatacuobiecteledecorate;

2. Decoratorulpoatesăextindainterfataacestorobiecte;

3. ClaseleFiltersuntradacinaabstractaaclaselordedecorator

Mostenire–cumsediferentiazaclasaderivatadeclasadebaza?

1. Prinadaugaredenoimetodesuplimentare;

2. Schimbareacomportamentuluiunormetodeexistenteinclasadebaza(overriding);

3. Relatiais-a:clasaderivatadoaroverridemetodedinclasadebaza(principiulsubstitutieipure);

4. Relatia is-like-a: clasa derivata adauga elemente noi interfetei clasei de baza (metodele noi nu sunt

accesibiledinclasadebaza–substitutianumaiestepura)

Creareaobiectelorsicicluldeviata:

1. Fiecareobiectnecesitaresurse(memorie),creareasidistrugereaobiectelordevinimportante;

2. Javautilizeazainmodexclusivalocareadinamicaamemoriei;

3. Pentruoriceobiect,trebuieutilizatnewlacreeere;

4. Obiectelesuntalocateinzonadeheap;

5. Distrugereaobiecteloresterealizataautomatdecatregarbagecollector;

6. GCidentificămomentulincareunobiectnumaiesteutilizatșiildezalocă

Static:

1. Datele membre si metodele pot fi accesate doar sub calificarea unui obiect cunoscut, existent in

memoniaprogramului(creatcunew).

Page 33: Java Hatz Full

33

33

2. Uncampsauometodastaticanuestelegatadeunobiectanumedintr-oclasa;

3. Un camp static exista o singura data pentru o clasa, fiind partajat de catre toate obiectele clasei

respective;

4. Campurilestaticepotfireferiteprinnumeleclasei;

5. Metodelestaticesuntlaniveldeclasa,potfireferiteprinnumeleclaseifaraafinecesaraexistentaunui

obiect;

6. Metodamain;

7. Metodelestaticenupotaccesacampuri/metodenestaticedinclasa.

8. Bloculstaticesteapelatosinguradata,laprimacreareaunuiobiectdinclasarespectivasaulaapelarea

uneimembrestaticedinaceaclasasipoatesainitializezedoardatestatice.

Operatori:

1. Totioperatoriiproducovaloareprinaplicarealor;

2. Eipotproducesiside-effects(modificareavaloriioperanzilor);

3. Aliasing: la transmiterea unui obiect ca si argument intr-o metoda, se transmite o referinta, deci

modificareavaloriiinmetodaafecteazavaloareaobiectuluidinafarametodei;

4. Operatorii++si–auformapostfixatasiprefixata;

5. Operatorii==si=!Aplicatipereferintedeobiecte,comparareferintele,sinucontinutulobiectelor

Garbagecollector-ul:

1. dezalocamemoriaalocataprinnew,atuncicandobiectelenumaisuntfolosite;

2. colecteaza memoria ramasa alocata in obiectele care nu mai sunt utilizate si compacteaza heap-ul,

rearanjandobiectelealocate;-Stop-and-copy:

3. GC-ulopresteprogramul,scaneazatoatereferinteledepestacksicopiazaobiecteleidentificateinnoul

heap.Ceeaceramaneegarbage-ulcaretrebuiedezalocat,iarnoulheapedejacompactat

Sintaxamostenirii:

1. Mostenireaserealizeazăoridecâteorisecreazăoclasă:semoșteneștedinObject;

2. Mostenire:clasanouăseaseamănăcuclasaveche:cuvântulcheieextends;

Page 34: Java Hatz Full

34

34

3. Clasanouăvapreluaautomattoatecampurileșimetodeledinclasadebază;

4. Regulănescrisă lamostenire:câmpuriledinclaseledebazăsescriuprivate iarmetodelese lasăpublic

(sauprotected)â;

5. Clasaderivatăpoatesăpreiaometodădinclasadebazăsisăorescrie;

6. Dinclasaderivată,pentruaseapelaometodădinclasadebazăsepoateutilizasuper;

7. Realizareamostenirii: lacreareaobiectuluidinclasaderivată,secreazăunsubobiectdinclasadebază

(casicumarfirealizatăocompozitiecătreacesta);

8. Initializareasubobiectuluidinclasadebază:doarprinconstructor;

9. Constructorulclaseidebazăesteapelatintotdeaunainainteaconstructoruluiclaseiderivate;

10. Pentruapelconstructoralcldebazăcuargumente:super(argumente)

Sintaxacompoziției:

1. Seplaseazăoreferințăcătreunobiectnouîntr-oclasănouă

2. Referintelenoucreateseinitializeazălavaloareanull->trebuieinitializateexplicit

Operatiadedelegare:

1. Operatieintermediarăintrecompozitiesiagregare

2. Intr-o clasă se plasează un obiectmembru din a 2-a clasă, iar clasa nouă va expune toatemetodele

furnizatedeobiectuldinclasa2-a

3. Pentru realizarea operatiilor de mostenire / compozitie, este suficient ca să se importe clasele

reutilizate(codullorsursănuestenecesar)

Mecanismulupcast:

1. Asociereadintrenumelemetodeisicorpulmetodei–legare(binding);

2. Earlybinding:atuncicandlegareasefacelacompilare;

3. Latebinding:atuncicandlegareasefacelaexecutie,exactinaintedeexecutiaefectivaametodei;

4. Latebinding=dynamicbindingsauruntimebinding;

5. Late binding: necesită un mecanism pentru identificarea tipului la executie (RTTI) – pentru a se

identificainmodcorectcorpulmetodeicaretrebuieapelat;

6. In Java se utilizeaza late binding pentru orice apel de metodă, cu exceptia metodelor static si final

(privateeimplicitfinalptcaometodaprivatenupoatefimostenita);

Page 35: Java Hatz Full

35

35

7. Campurilesielementelestaticsuntrezolvatelacompilare;

8. Legareaconstructoriloresterealizatalacompilare

Is-avs.Is-like-a:

1. Relatiedemosteniredetipis-a:clasaderivatădoarsuprascrieinterfațaclaseidebază;

2. Relatiedemosteniredetipis-like-a:clasaderivatăcontinemetodesuplimentarefațădeclasadebază;

3. Relația de substituție: La o relatie de tip is-a substitutia este pură: oricemesaj trimis clasei derivate

poate fi trimis si claseidebază (rezolvareamesajului se faceprinupcast) Lao relațiede tip is-like-a:

parteaextinsădinclasaderivatănumaiestedisponibilăprinupcast(prinadresareaclaseidebază);

4. Downcast:operațiainversăupcast–nuesteooperațiegarantată,insensulincarenustimexactclasa

derivatăcătrecaresefacedowncast;

5. Java verifică orice conversie (cast), si daca nu se poate realiza se aruncă o exceptie de tipul

ClassCastException

Containere:

1. Necesare datorita faptului ca nu stim de la design numarul de obiecte necesare pentru a rezolva o

anumitaproblema;

2. Containerelesuntsiruridereferintecatrealteobiecte;

3. Eleseexpandeazaautomatpentruasalvanoiobiecte,dupanecesitati;

4. 2tipurideliste:ArrayList,LinkedList;

5. ContainereleinJavasuntcreatesapastrezeobiectedetipulObject.->elepotsalvaorice;

6. PotapareaexceptiilaDowncastlaruntime,timpdeexecutiecrescutdatorităoperațieideDowncast

Cuvantulcheiethis:

1. Infiecaremetodaapelata,referintaobiectuluisubcareseapeleazametodaestetransmisainmetoda

subformareferinteithis

2. thispoatefiutilizatdoarininteriorulmetodelorne-statice

3. In interioruluneimetodedinstr-oclasa, laapeluluneimetodedinclasacurenta,nuestenevoiesase

utilizezethis

4. Thisestefrecventutilizatinreturn,pentruareturnaobiectulcurent

Page 36: Java Hatz Full

36

36

Claseabstracte:

1. Dintr-o clasa abstracta nu se poate instantia nu se poate instantia si foloseste doar la dezvoltarea

ulterioaraaunorclasecedescriuobiecteconcrete;

2. Potcontineobiectefaranicioimplementare;

3. Estedefinitaprincuvantulcheieabstract;

4. Puneladispozitiasubclaselorunmodelcompletpecaresa-limplementeze;

5. Nusepotcreaobiectedinclasaabstract=>eroarelacompilare;

6. Arecelputinometodaabstracta,careseimplementeazaintoatesubclasele.

Interfete:

1. Seimplementeazasimetodelenuaubloc;

2. O clasa care implementeaza o interfata trebuie obligatoriu sa specifice implementari pentru toate

metodeleinterfetei;

3. O clasa poate implementa mai multe interfete = superinterfete separate prin virgula – mostenire

multipla;

4. Corpuluneiinterfetecontinevariabileconstante,implicitstaticsifinalcaretrebuieinitializate;

5. Metodelesuntimplicitpublicsinupotfideclaratecuniciunidentificatorpblic,privatesauprotected;

Mosternireamultipla:

1. InJavasepoateextindeosinguraclasăsisepotimplementaoricateclase;

2. Rolulinterfetelor:sasepoatafaceupcastlamaimultdecatoclasadebaza

3. Dacasepoatecreaoclasadebaza faradefinitiidemetodesivariabilemembre, se recomandasase

creezeinterfeteinloculclaselorabstracte;-Interfetelesepotcombina(seextindeinterfetelelafelcasi

clasele);

4. Coliziuneanumelorlaimplementareamaimultorinterfete(dacainterfeteledebazaauacelasinumede

metodacusemnaturidiferite):esteoproblemadacametodelediferadoarprintipdereturn=>eroare

lacompilare;

5. Campurilecaresuntinserateintr-ointerfatadevininmodautomatstatissifinal=>reprezintaunmod

convenabilpentruadefiniconstante(similarcuenum);

Page 37: Java Hatz Full

37

37

6. Campuriledefiniteininterfetenupotfiblankfinals,eletrebuieinitializateladefinire.

Innerclasses:

1. Seplaseazaclaseininteriorulaltorclase;

2. Innerclassesreprezintaunconceptdiferitdecompozitie;

3. Deobicei,clasaexterioaraareometodacarereturneazaunobiectdinclasainner;

4. Tipulobiectuluidinclasainterioarasespecificaprecum:OuterClass.InnerClass;

5. Obiectulclaseiinterioareareunlink(referinta)catreobiectulclaseiexterioarecarel-acreat;

6. Obiectul clasei interioare poate accesamembrii obiectului clasei exterioare fara ca sa fie nevoie de

calificare(dreptuldeaaccesaesteasupratuturorobiectelormembrealeclaseiexterioare;

7. Pentru a se obtine referinta la obiectul clasei exterioare (din obiectul clasei inner) se utilizeaza:

OuterType.this;

8. Pentru a crea un obiect din clasa inner pornind de la un obiect din clasa outer se poate utiliza:

obiectOuter.new;

9. Claseleinnersuntpotrivitepentruaimplementainterfete:serealizeazaascundereaimplementarii

Claseinterioareanonime:

1. Suntclaseinterioarefaranume(clasecreatedirectlamomentulutilizariilor)

2. finalizeazaconstructiainstructiuniicarecontinedefinitiaclaseianonime

3. Campuriledinclaseleanonimepotfiinitializatecuvaloridinafara(dindomeniulundesecreazaclasa)

4. Dacaintr-oclasaanonimasedoresteafiutilizatunargument(sauovaloare)definitainafaraacesteia,

atuncireferintaacesteiatrebuiesafiefinal

5. Clasele anonime nu pot avea constructor, dar initializarile se pot realiza in blocul non-static de

initializare

6. Claseleinterioarepotficreatestatic(nestedclasses)dacanusedoresteutilizareareferinteiobiectului

exteriorininteriorulclaseiinner

7. Claseleinterioareparteauneiinterfetedevinautomatstaticpublic.Rol:creareadecodcomuncaresa

fieutilizatdetoateimplementarileinterfetei

8. Oricat de adanca este imbricarea claselor nested, acestea pot accesa obiectele membre din clasele

exterioare,indiferentdeniveluldeimbricare

Page 38: Java Hatz Full

38

38

9. Lamostenire dintr-o clasa inner, trebuie furnizat la constructia obiectului un obiect din clasa inner,

pentruasepermiteconstruireasub-obiectuluicl.baza(enclosingClassReference.super())

10. Clasele localeunuidomeniudevizibilitateauaccess la toatevariabileledomeniului respectiv (inclusiv

celefinal),insaacesteclasenuauspecificatordeaccess

Closure:

• unobiectapelabilcareretineinformatiedespredomeniuldevizibilitateincareafostcreat(areaccess

la variabilele din domeniul de vizibilitate unde a fost creat); -=> clasa interioara este un closure

(deoareceareoreferintacatreobiectulexteriorsipoatesaacceseze inclusivmembriiprivatiaiclasei

exterioare)

Callback:

• unobiect primeste o informatie care va permite sa apelamobiectul initial la unmoment ulterior de

timp.Se implementeaza cu clase interioare.Clasade tipClosure furnizeazaopoată în intriorul clasei

exteriore(darintr-unmodsafe–nusenecesităcasatransformamaccesullametodeleacesteiclase)

Iteratori:

1. Esteundesignpattern;

2. Unobiectdetipiteratoresteasociatuneicolectiisipermiteregasireaordonataaobiectelordincolectia

respective;

3. Metodaiterator()auneicolectii;

4. Metodanext()aobiectuluiiterator:produceurmatorulelementdincolectie;

5. MetodahasNext():interogheazadacamaisuntelementeneiterate;

6. Metodaremove():stergeultimulelementiteratdincolectie;

7. Iteratoriipotproduceelementelecolectieidoarintr-osinguradirective;

8. ListIterator:furnizatdoardeinterfataList,poateparcurgeelementelecolectieiinambeledirectii

ObiectulClass:

1. JavarealizeazăRTTIprinintermediulobiectuluiClass;

2. Acestacontineinformatiereferitoarelatip,informatiecarepoatefiinterogată;

Page 39: Java Hatz Full

39

39

3. Pentrufiecareclasăpecareoaveminprogram,existăunobiectClassasociat;Lacompilareauneinoi

clase,acestobiectestecreatsisalvatinfisierul.class;

4. Lacreareaunuiobiectdintr-oclasă,JVMutilizeazăunsubsistemnumitclassloader;

5. ToateclaselesuntincarcateinmoddinamicdecătreJVMlaprimautilizareaacestora(anumecandse

faceprimareferintalaunmembrustaticalclasei);

6. La incarcarea unei clase, se verifică daca obiectul Class al tipului respectiv este incarcat, daca nu, se

identificăfisierul.classpedisc,sioctetiiacestuiasuntverificatiinaintesăfieincarcati

SistemuldeI/Ointr-unlimbajdeprogramare:

• Sistemul de I/O intr-un limbaj de programare trebuie să fie capabil să trateze:Surse diferite de

dispozitive de I/O (fisiere, consola, conexiuni de retea etc),Tipuri diferite de access la surse (access

secvential,accessrandom,accessbuffered),Tipuridiferitedelucrucusursa(binar,laniveldecaracter,

laniveldelinie,laniveldecuvant)

ClasaFile:

1. Reprezintaunnumeaunuifisiersauunuisetdefisieredintr-undirector;

2. Metodalist()->produceunsirdeStringcarereprezintafisierelereferitedeobiectuldetipFile;

3. ListpoatefiinvocatautilizandunDirectoryFilter,pentruareturnadoaracelefisierepentrucarenumele

respectaunpattern;

4. Interfata FilenameFilter: metoda accept primeste la intrare obiectul de tip File si stringul pentru

comparare.Metoda list din File apeleazametoda accept pentru fiecare fisier din File, iar acesta este

inseratinlistadoardacaacceptfurnizeazatrue;

5. ObiectulFilepoatefiutilizatcasacreem/stergem/redenumimundirector/fisiersauundirector/fisiercu

ointreagacale;

6. -Filepoatefiutilizatcasacitiminformatiilereferitoarelaunfisier/director

InputsiOutput:

1. Pentruintrare:claseleInputStreamsiReadercumetodaread;

2. Pentruiesire:claseleOutputStreamsiWritercumetodawrite;

3. Readsiwritelucreazapeocteti(sausirurideocteti);

Page 40: Java Hatz Full

40

40

4. Toate clasele de I/O sunt derivate din acestea; -La realizarea efectiva de I/O programatorii creaza

insuruirideobiectedinclaseledeI/O(designpatternulDecorator)

TipurideInputStream:

1. ByteArrayInputStream:permitecaunbufferdememoriesafieutilizatcasiunInputStream(dinbuffer

seextragocteti);

2. StringBufferInputStream:convertesteunStringintr-unInputStream;

3. FileInputStream:sursadeintrareeunfisier.SefurnizeazalaconstruireaobiectuluifieunStringfieun

File;

4. PipedInputStream:esteasociatcuunPipedOutputStream(careestefurnizatlaconstruireaobiectului).

ImplementeazaconceptuldePipe;

5. SequenceInputStream: converteste unul sau mai multe InputStream intr-un singur obiect de tip

InputStream(laconstruiresefurnizeazafieunInputStream,fieunEnumeratordeobiecteInputStream);

6. FilterInputStream:clasaabstracta,interfatapentrudecoratoriicarefurnizeazatipuriparticularedecitire

TipurideOutputStream:

1. ByteArrayOutputStream:creazaunbufferdememorie(octeti).Datelescrisesunttrimiseinacestbuffer;

2. FileOutputStream:iesireintr-unfisier.SeconstruiesteobiectulpebazaunuiStringsauaunuiFile;

3. PipedOutputStream:inconjunctiecuPipedInputStream.PentruconceptuldePipe;

4. FilterOutputStream:pentruiesireformatata,seimplementeazafunctionalitatidescriere

ReadersiWriter:

1. AdaugafunctionalitatepentruI/OlaniveldecaractersauUnicode;

2. ClaselesuntadaugateinierarhiaInputStreamsiOutputStreamdecinuseinlocuiesteaceastaierarhie;

3. Claseadapter:InputStreamReadersiOutputStreamWriter;

4. Motivulpentrucareaufostcreate:sasepermitainternationalizarea(Unicodelucreazacucaracterepe

16biti);

5. Recomandare:saseutilizezeclasedetipReadersiWriteroridecateorieposibil;

Page 41: Java Hatz Full

41

41

6. Lacitirispecificelaniveldeoctet,saseutilizezeInputStreamsiOutputStream

Serializare:

1. Pastrareaobiectelordincolodeexecutiaprogramelor;

2. Astfelobiectelepotfirecuperatesiexecutiarestartatadelapunctulundeafostopritaanterior;

3. Orice obiect dintr-o clasă care implementeaza Serializable poate fi convertit in sir de octeti si apoi

restaurat;

4. Persistentă:duratadeviataaunuiobiectexistadincolodeexecutiaunuiprogram;

5. Pentru realizareapersistentei, obiectele trebuie serializate / deserializate inmodexplicit (lightweight

persistence);

6. Pentruserializare,secreazăunobiectdintr-untipOutputStream,acestaeste“wrap”ininteriorulunui

ObjectOutputStreamsiseutilizeazametodawriteObject;

7. Serializarea salveaza intreg webul de obiecte din spatele obiectului serializat; -Tipul unui obiect

deserializat:getClass

Externalize:

1. extindeinterfataSerializable;

2. LaobiecteledeserializatecuExternalizable,obiectelesuntconstruiteobisnuit(cudefaultconstructor)si

apoiseapeleazametodareadExternal;

3. LaobiecteleExternalizable,subobiectelecomponentetrebuieserializatemanual(inwriteExternal)iarla

deserializare,eletrebuierecuperatedepedisc;

4. La mostenire dintr-o clasa Externalizable, se apeleaza writeExternal si readExternal a clasei de baza

pentruaseasiguraserializare/deserializarecorecta

RTTI:

1. Run-TimeTypeIdentification

2. Descoperireatipuluilaexecutiesiutilizareaacestuia

3. 2tipurideRTTI:

-Traditional–lacompilare

Page 42: Java Hatz Full

42

42

-Reflection:-laexecutie!!!

4. Upcast: necesită realizarea automata a RTTI pentru invocarea automată (polimorfică) a metodei

suprascrise

5. PrinRTTIsepoateidentificatipulexactalunuiobiectlaexecutie(limbajuldeprogramarearemetode

pentruarealizaacestlucru)

Final:

1. declaracaoclasanupoateaccesasubclase

2. declarareaare2scopuri:

• securitate:unelemetodepotasteptacaparametruunobiectaluneiclasesinualuneisublcase,dar

tipulexactalunuiobiectnupoatefiaflatcuexactitatedecatinmomentulexecutiei

• programareinspiritorientatobiect:oclasaperfectanutrebuiesaaibasubclase

Finalize:

• Esteometodaceseimplementeazainvedereaoricaruitipceincapsuleazaoresursanegestionata,care

trebuiesasuportefinalizarea,adicaGCdeterminacaunobiecttrebuieeliminatedinmemoriesi

apeleazametodaFinalizecareoferaresurseieliberareacorecta,colectareaacesteia

ExecutiaunuiblocTry-Catch-Finally:

1. Unbloctryesteurmatdemaimulteblocuricatchsioptionaldeunblocfinally

2. Blocultry-catchstalabazasistemuluidetratareaerorilor,oportiunedecodnupoatefi

monitrizatapentrutratareaexceptiilor,faraafiinclusaintr-unastfeldebloc

3. Dacaoexceptieestearuncatainblocultry,aceastaesteprinsainbloculcatchcorespunzator,

dupacarebloculaceluicatchseexecuta

4. Finallyestefolositatuncicanddorimcaanumiteportiunidecodsaseexecuteindifferentdaca

blocultrys-aexecutatnormalsauageneratoexceptie=>bloculfinallyseexecutaindifferent

demodulincareblocultrysi-aterminatexecutia

Page 43: Java Hatz Full

43

43

Clauzathrows:

1. Dacaometodacontinecodcarearputeageneraoexceptie,sitotusi,incadrulmetodeinuexistaun

codtry-catchcaresaprindaaceaexceptie=>metodatrebuiesaspecificeprinclauzathrowsca

poategeneraaceaexceptie

2. NusesupunacesteireguliexceptiilecaresuntsubclasealeclaselorErrorsiRunTimeException

Clauzathrow:

• Pentruageneramanualoexceptieinurmauneistaripecareoconsiderameronata,folosimcuvantul

cheiethrow;

Polimorfism:

1. Acelasinumesepoatereferila2metodediferite.

2. Estede2feluri:

• Overriding–metodacuacceasisemnaturacuoaltadinclasaparinte;

• Overriding–douasaumaimultemetodeinacelasiclasacuacelasinume,darsemnaturidiferite.

Organizareacodului:

1. Pentrufiecareclasacompilataseproduceunfisier.class

2. Unprogramestecompusdintr-ocolectiedefisiere.class

3. Acesteapotfiarhivate:fisier.jar

4. Fiecarefisier.javaincepecumentiunea“package”:seindicanumelepackageuluidincarevorfaceparte

clasele

5. Claseleutilizatecarefacpartedinaltpackageseimportacu“import”

6. Toateclaseledintr-unpackagevorficolectateintr-unsingursubdirector

7. Conventiepentrudenumireapackageurilor:utilizareadomeniilordeinternetinordineinversa

8. Calearootpentrudirectorare:variabilasistemCLASSPATH

9. CLASSPATHpoateincludedirectoaresaufisiere.jar

1. DesignpatternulProxy

Page 44: Java Hatz Full

44

44

Este sablonul care permite crearea unui inlocuitor pentru un obiect, inlocuitor care sa controlezeaccesullaobiectulrespectiv.Acestsablonsemainumestesurogat.

SablonulProxyseaplicaingeneralinsituatiileincareestenecesaraoreferintalaunobiectmaicomplexasimaiflexibiladecatunsimplupointer.CatevadintrecazurileincaresablonulProxypoatefiutilizatsunt:

necesitateaunuireprezentantlocalalunuiobiectaflatinaltspatiudeadrese(pealtamasina)decatclientulsau.Inacestcazobiectulproxycarejoacarolulreprezentantuluilocalsemainumesteremoteproxysauambasador;

crearealacomandaaobiectelorcostisitoare(cumestecazuldinexemplulprezentatinparagrafulanterior).Inacestcazobiectulproxysemainumesteproxyvirtual,eldandiluziaexistenteiunuiobiectserverinaintecaacestasafifostcreat;

dacasepuneproblemacadiversiclientisaaibedrepturideaccesdiferitelaunanumitobiectserver,sepoatefolosicateunobiectproxycaresareprezinteserveruldinperspectivafiecareicategoriideclienti.Inacestcaz,obiectulproxysemainumesteproxydeprotectie;

unobiectproxypoatejucarolulunuipointerinteligent,carepoateefectuaoperatiisuplimentarelaaccesareaobiectuluireferit.Asemeneaoperatiisuplimentaretipicesunt:

o contorizareareferintelorlaunanumitobiect,existentelaunmomentdat.Acestlucrupermitestergereaobiectuluirespectivcandseconstatacanumaiexistanicioreferintalael.Deexemplu,ungarbagecollectorarputeautilizaacestprincipiudelucru;

o incarcareainmemorieaunuiobiectpersistentatuncicandelestereferitprimaoara;o asigurareablocariiobiectuluireferit,pedurataaccesariilui,astfelincatsanupoatafi

modificat

ŞablonulProxyasigurăunsurogatsauunînlocuitor

pentrualtobiectpentruacontrolaaccesullaacesta

lDelegarealadistanţăcontroleazăaccesulcătreunobiectnelocal

lDelegareavirtualăcontroleazăaccesullaoresursăcostisitordecreat

lDelegareadeprotecţiecontroleazăaccesullaoresursăpebazaunordrepturideacces

lReferinţăinteligentă:copierealascriere(copyonwrite),blocareaunuiobiect,numărareareferinţelor,caching

25.DesignpatternulIterator

Page 45: Java Hatz Full

45

45

¢ SablonulIteratorasiguraocaledeaccesaresecventialaaelementelorunuiobiectagregat,faraaexpunereprezentarealuidebaza.

lMetodeleIteratoruluipotaveanumediferite

lJavaIterator:next(),hasNext(),remove()

lC#IEnumerator:Current,MoveNext(),Reset()

lExistăIteratoriinternişiexterni

lIteratorulexternestecontrolatdeclient,caînexemplulprecedent(cumetodanext)

lIteratorulinternestecontrolatdeIteratorulînsuşi,căruiatrebuiesăisespunăceoperaţiisăefectuezecuelementelepecareleparcurge

Şablonulseutilizeazăpentru:

lAaccesaconţinutulunuiobiectagregatfărăaexpunereprezentareainternă

lAasigurasuportpentrumaimultetraversărialeobiecteloragregate

lAfurnizaointerfaţăuniformăpentrutraversareastructuriloragregatediferite

lPentruasuportaoiteraţiepolimorfică

Suportăvariaţiiîntraversareaunuiagregat

lObiecteleagregatepotfitraversateînmaimultefelurişidemaimulteori

lObiecteleIteratorsimplificăinterfaţaAgregat

lAgregatularenevoiedeometodăunicăpentrucreareaIteratorului

lScadecuplareadintreclientşiobiecteleagregate

lCreştecoeziuneaobiectuluiagregatprineliminareanecesităţiideaasiguraelînsuşitraversarea

26.DesignpatternulStrategyScop:Sedefineşteofamiliedealgoritmi;seîncapsuleazăfiecaremebru;algoritmiisefacinterschimbabili.Aplicabilitate–Multeclaseînruditediferădoarprincomportament

Page 46: Java Hatz Full

46

46

–Sefolosescdiversevariantealeunuialgoritm–Algoritmiifolosescdateirelevantepentruclient–Oclasădefineştecomportamentemultiple,definitedeconditiigardălaînceputulmetodelor.

2. Ce este o clasa java si cum se salveaza pe disk?

Clasă: set de obiecte cu caracteristici şi funcţionalitate identice (termenul de clasa se substituite termenului de tip)

O clasa reprezinta o modalitate de a descrie un nou tip de date. Clasa este o descriere a unei multimi de obiecte caracterizate prin structuri si comportamente similare. De aceea, o clasa va cuprinde definitiile datelor si operatiilor ce caracterizeaza obiectele clasei respective.

Datele definite intr-o clasa se mai numesc atribute, iar operatiile se mai numesc metode sau functii-membru. Atributele si metodele formeaza membrii unei clase.

Sintaxa folosita pentru a defini o clasa in Java este:

class nume_clasa { // date si metode }

Salvarea pe disk se face in folderul built cu numele clasei si extensia .class

3. Ce este un package?

Un package grupeaza toate clasele , Utilizate pentru organizarea claselor . Packageurile pot si comprimate sub forma jar.

4. Defineste final, finally finalize.

Final- o clasa declarata cu final nu poate fi subclasata. O clasa declarata ca final opreste linia de mostenire, nu se poate extinde o clasa finala. O metoda declarata cu final nu poate fi suprascrisa.O variabila declarata cu final poate fi initializata numai o singura data. Utilizata in special pentru mostenire

Finally- Blocul declarat cu finally se executa mereu dupa try and catch atunci cand apare o exceptie neasteptata sau fara a fi o exceptie.Este utilizat pentru a evita . Ajuta programatorul sa evite curatarea codului accidentala prin return break sau continue.

Page 47: Java Hatz Full

47

47

Finalize-este o metoda care daca este prezenta intr-o clasa este apelata inaintea garbage collectorului. Metoda finalize() este utilizata pentru curatarea codului inainte ca un obiesct sa fie luat de garbage colector

5. Defineste variabila locala, variabila membra si variabila de clasa

Variabile de instanţă. Sunt unice fiecărei instanţe le clasei.

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 vizibile doar în cadrul acelei metode.

Parametri. Variabilele prin care se trimit argumente la apelul metodelor.

variabile de Instanta (atribute) – aceste variabile definesc valorile unui obiect, deci, ele sunt create atunci când obiectul este creat; ele exista de când obiectul este creat si pana cand acesta este distrus; doar obiectul si metodele sale au acces la variabilele de instanta;

variabilele statice – aceste variabile sunt parte dintr-o clasa; sunt create atunci când clasa este incarcata de JVM;

variabile locale ale unor metode – aceste variabile sunt definite pe stiva metodei si ele exista atâta timp cât metoda este executata (exista in stiva de apeluri); variabilele locale nu pot fi accesate si din interiorul unor metode imbricate chiar daca ele exista cand metoda imbricata este executata

variabile locale unui bloc de cod - aceste variabile 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, while si blocuri de initializare.

Variablie membre- sunt declarate in cadrul unei clase, dar apartin unui obiect.

6. Defineste private, protected , public

Private: elementele private pot fi accesate doar de creatorul clasei in cadrul metodelor acelei clase

Page 48: Java Hatz Full

48

48

- folosit in declararea unui camp sau a unei metode dintr-o clasa - specifica faptul ca membrul sau metoda respectiva poate fi accesata doar din cadrul clasei insesi, nu si din clasele derivate din aceasta clasa.

Public: elementele publice sunt disponibile oricaror alte clase

Protected: similar cu private, utilizat in mostenire, clasele care mostenesc pot accesa elementele private din clasele de baza

-folosit in declararea unui camp sau a unei metode dintr-o clasa - specifica faptul ca membrul sau metoda respectiva poate fi accesata doar din cadrul clasei insesi sau din clasele derivate din aceasta clasa.

7. Rolul 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 servlet sau statice), sau pe răspunsul la o resursă, sau ambele.

Exemplele care au fost identificate pentru acest design sunt 1) Filtre de autentificare 2) exploatarea forestieră și Audit filtre 3) de conversie fotografie filtre 4) Filtre de compresie a datelor 5) Filtrele de criptare 6) Filtre Tokenizing 7) Filtre care declanseaza resurse de acces evenimente 8) XSL / T filtre 9) Mime-Tip filtru lanț

Clasele Filter sunt radacina abstracta a claselor de decorator

8. Descrieti modul de utilizare a Decoratorilor la realizarea i/o in java

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 forma unui int.

Page 49: Java Hatz Full

49

49

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. Clasele filtru, de baza (ca FilterInputStream), sunt punctul de plecare pentru clasele decorator din Java I/O.

In concluzie, clasele de baza in ierarhia I/O octet devin:

§ InputStream, OutputStream: pentru definirea de stream-uri de baza, corespunzatoare unor entitati I/O § FilterInputStream, FilterOutputStream: pentru definirea de stream-uri decorator, care isi vor baza

intotdeauna functionalitatea pe un alt stream (underlying), care, la randul sau, poate fi decorat sau nu.

Un 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.

9. Care este diferenta intre o clasa abstracta si o interfata

O interfata defineste un set de metode, proprietati, evenimente, indexatori. Acesti membri vor fi implementati de o clasa sau chiar de o structura.

O clasa abstracta este o clasa care nu poate fi instantiata si este folosita pentru mostenire. O clasa care nu este abstracta si care deriveaza dintr-o clasa abstracta, trebuie sa includa implementarile tuturor membrilor abstracti.

10. Descrieti mecanismul try-catch-finally

try {

// codul care este susceptibil sa genereze exceptie

} catch (Type1 tp1) {

// exceptii de tipul Type1

} catch (Type2 tp2) {

// exceptii de tipul Type2

} … finally {

// cod care se executa indiferent de tipul de exceptie aruncat (sau nu) }

Page 50: Java Hatz Full

50

50

Try – catch functioneaza ca un switch pe tipul de exceptie

2 modalitati de tratare a erorilor

n Termination: eroarea este aruncata n Resumption: se insereaza cod try – catch pt rezolvarea erorii

Blocul "try" contine instructiunile de deschidere a unui fisier si de citire dintr-un fisier ambele putând produce exceptii. Exceptiile provocate de aceste instructiuni sunt tratate în cele doua blocuri "catch", câte unul pentru fiecare tip de exceptie.

Inchiderea fisierului se face în blocul "finally", deoarece acesta este sigur ca se va executa. Fara a folosi blocul "finally" închiderea fisierului ar fi trebuit facuta în fiecare situatie în care fisierul ar fi fost deschis, ceea ce ar fi dus la scrierea de cod redundant:

11. Descrieti modulele de creare a obiectelor din tipul claselor interioare care nu sunt

anonimie

Clasa interioarã este necesarã numai clasei exterioare. Pentru reducerea numãrului de clase de nivel superior si pentru simplificarea comunicãrii între clasele ascultãtor la evenimente putem defini clasele receptor ca niste clase interioare cu nume, incluse în clasa cu fereastra aplicatiei: class MFrame extends JFrame { JButton b1 = new JButton (" + "); JButton b2 = new JButton (" - "); JTextField text = new JTextField (6); int n= 0; public MFrame() { Container c = getContentPane(); b1.addActionListener (new B1L()); b2.addActionListener (new B2L()); c.setLayout (new FlowLayout()); c.add(b1); c.add(b2); text.setText(" "+n); c.add (text); } // clase incluse cu nume class B1L implements ActionListener { public void actionPerformed (ActionEvent ev) { text.setText(" "+ ++n);

Page 51: Java Hatz Full

51

51

} } class B2L implements ActionListener { public void actionPerformed (ActionEvent ev) { text.setText(" "+ --n); } } Definirea de clase incluse anonime reduce si mai mult lungimea programelor, dar ele sunt mai greu de citit si de extins

12. Descrieti modaliatea de realizare a unui iterator si incercati sa furnizati un exemplu concret de utilizare a acestui sablon de programare Un iterator este un obiect care permite traversarea unei colectii si modificarea acesteia (ex: stergere de elemente) in mod selectiv. Puteti obtine un iterator pentru o colectie, apeland metoda sa iterator(). Interfata Iterator este urmatoarea: public interface Iterator<E> { boolean hasNext(); E next(); void remove(); // optional } Metodele au urmatorul comportament: hasNext -intoarce true daca mai exista elemente neparcurse inca de iteratorul respectiv next -intoarce urmatorul element remove -elimina din colectie ultimul element intors de next. In mod evident, remove nu poate fi apelat decat o singura data dupa un apel next. Daca aceasta regula nu este respectata, vom primi o eroare. Ne putem imagina ca un iterator se pozitioneaza intre elementele colectiei. Initial, cursorul sau precede primul element, astfel ca primul apel next va intoarce primul element. Atentie: Metoda remove este singura modalitate SIGURA de a inlatura un element dintr-o colectie in timpul parcurgerii acesteia. Orice alta metoda are un comportament neprecizat (nu putem garanta ca stergerea va avea loc, sau ca elementul sters va fi cel pe care chiar doream sa-l stergem). Este util sa folosim iteratori cand dorim: stergerea elementului curent, in timpul iterarii Cand dorim sa iteram mai multe colectii in paralel.

Page 52: Java Hatz Full

52

52

Exemplu de folosire a unui iterator: Collection c = new ArrayList(); Iterator it = c.iterator(); while (it.hasNext()) { //verificari asupra elementului curent: it.next(); it.remove(); }

13. Ce inseamna upcast? Descrieti mecanismul legarii intarziate si cum faciliteaza acest mecanism realizarea proprietatii de upcast. Proprietatea de upcast presupune tratarea unui obiect dintr-o clasa derivata ca si cum ar fi din clasa de bază. Legare (binding) = asocierea dintre numele metodei si corpul metodei. Late binding necesita un mecanism pt identificarea tipului la executie(RTTI), pt a se identifica in mod corect corpul metodei care trebuie apelat. In cazul late binding, legarea se face la executie, exact inainte de executia efectiva a metodei. Se utilizeaza late binding pt orice apel de metoda, cu exceptia metodelor static si final.

14. Care este rolul constructorului de copiere in cazul agregarii indirecte? Constructorul este o metodă specială apelată automat la instanţierea unei clase şi face operaţiile necesare pentru iniţializarea fiecărui obiect al unei clase fie ea statică sau dinamică. Dacă se foloseşte pentru a iniţializa un obiect cu alt obiect atunci denumirea de constructor de copiere. Agregarea este relatia intre doua obiecte in care unul dintre obiecte apartine celuilalt obiect. Agregarea reda apartenta unui obiect la un alt obiect. Din punct de vedere conceptual, exista 2 tipuri de agregare: strong – la disparitia obiectelor continute prin agregare, existenta obiectului container inceteaza (de exemplu, o carte nu poate exista fara pagini) weak – obiectul-container poate exista si in absenta obiectelor agregate (de exemplu, o biblioteca poate exista si fara carti) agregare indirect ?

15. Care este diferenta intre colectiile generice, heterogene si parametrizate? Colectiile sunt un ansamblu de iterfete si clase ce realizeaza: colectarea impreuna a obiectelor, stocarea, sortarea si accesarea obiectelor. Colectii generice – putem specifica tipul de data pe care il va folosi colectia, ex: List<String> strings

Page 53: Java Hatz Full

53

53

Colectii eterogene – atunci când se crează o colecţie pentru elemente de acelaşi tip (necunoscut), oricine poate insera elemente de alt tip Colectii parametrizate -

16. Serializarea Pastrarea obiectelor dincolo de executia programului. = transformarea unui obiect intr-o secventa de octeti, din care sa poata fi refacut ulterior obiectul original. Este un mechanism utilizat pt salvarea si restaurarea datelor.

17. Externalizarea

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

Sau dorim să recreem subobiecte de la zero?

Interfata Externalizable: extinde interfata Serializable

2 metode noi: writeExternal, readExternal

Aceste metode sunt apelate automat la serializare / deserializare si contin cod suplimentar care se executa la aceste operatii

La obiectele deserializate cu Externalizable, obiectele sunt construite obisnuit (cu default constructor) si apoi se apeleaza metoda readExternal

La obiectele Externalizable, subobiectele componente trebuie serializate manual (in writeExternal) iar la deserializare, ele trebuie recuperate de pe disc

La mostenire dintr-o clasa Externalizable, se apeleaza writeExternal si readExternal a clasei de baza pentru a se asigura serializare / deserializare corecta

Evitarea serializarii anumitor componente ale obiectelor

Prima metoda: utilizarea Externalizable

Metoda 2-a: cuvantul cheie transient: indica faptul acel camp marcat cu transient nu va fi serializat ca si parte a procesului automat de serializare

Metoda 3-a: se adauga la clase metodele writeObject si readObject in care se furnizeaza codul programatorului pentru serializare

Aceste metode sunt private si sunt apelate automat de catre writeObject si readObject a claselor ObjectOutputStream si ObjectInputStream

Page 54: Java Hatz Full

54

54

18. Supraîncărcarea

Supraîncărcarea unei metode (owerloading) este procesul prin care în cadrul unei clase sunt adăugate două sau mai multe metode cu acelaşi nume dar cu număr diferit de parametri. În momentul apelării metodei, mediul de rulare va şti exact ce metodă să apeleze pe baza parametrilor specificaţi astfel încât nu exista posibilitate de confuzie si de apelare a unei metode greşite.

19. Cuvântul cheie this Cuvântul cheie this este folosit în cadrul metodelor atunci când se doreşte să se aibă acces la referinţa obiectului curent. Cuvântul cheie this este o referinţă către obiectul curent. Acest cuvânt cheie este folosit doar în cazurile speciale când este nevoie să se facă o referinţă explicită la obiectul curent. De exemplu în cazul unei metode care trebuie să returneze obiectul curent.

20. Cuvântul cheie „static”

Cuvântul cheie „static” este folosit în java pentru a defini o variabilă sau o metodă care poate fi accesata prin intermediul numelui clasei, fără a fi nevoie să se construiască obiecte de tipul respectiv. În construirea unei aplicaţii orientate pe obiecte utilizarea atributelor sau metodelor statice trebuie să fie evitată şi acestea să fie folosite doar în cazuri de strictă necesitate.

21. Clase şi metode abstracte · o metodă se numeşte abstractă dacă este doar declarată şi nu definită. Declaraţia va

conţine, obligatoriu, cuvântul cheie abstract: abstract numemetoda (); · o clasă ce conţine măcar o metodă abstractă devine clasă abstractă şi va trebui calificată

ca atare (în caz contrar se produce o eroare de compilare). Fiind o clasă incompletă, tentativa de a crea un obiect de tip abstract, se soldează cu eroare.

22. Interfaţa Interfaţa acoperă noţiunea de clasă abstractă pură. În această situaţie definiţia tipului este precedată de cuvântul cheie interface, ce va înlocui cuvântul cheie class. Prin interfaţă se pune la dispoziţie o formă şi nu o implementare. Ea poate conţine: · membri de tip primitiv (implicit statici şi finali); · nume de metode cărora li se ataşează:

- lista de argumente de apel; - tipurile returnate

Page 55: Java Hatz Full

55

55

23. Design patternul Proxy Este sablonul care permite crearea unui inlocuitor pentru un obiect, inlocuitor care sa controleze accesul la obiectul respectiv. Acest sablon se mai numeste surogat.

Sablonul Proxy se aplica in general in situatiile in care este necesara o referinta la un obiect mai complexa si mai flexibila decat un simplu pointer. Cateva dintre cazurile in care sablonul Proxy poate fi utilizat sunt:

necesitatea unui reprezentant local al unui obiect aflat in alt spatiu de adrese (pe alta masina) decat clientul sau. In acest caz obiectul proxy care joaca rolul reprezentantului local se mai numeste remote proxy sau ambasador;

crearea la comanda a obiectelor costisitoare (cum este cazul din exemplul prezentat in paragraful anterior). In acest caz obiectul proxy se mai numeste proxy virtual, el dand iluzia existentei unui obiect server inainte ca acesta sa fi fost creat;

daca se pune problema ca diversi clienti sa aibe drepturi de acces diferite la un anumit obiect server, se poate folosi cate un obiect proxy care sa reprezinte serverul din perspectiva fiecarei categorii de clienti. In acest caz, obiectul proxy se mai numeste proxy de protectie;

un obiect proxy poate juca rolul unui pointer inteligent, care poate efectua operatii suplimentare la accesarea obiectului referit. Asemenea operatii suplimentare tipice sunt:

o contorizarea referintelor la un anumit obiect, existente la un moment dat. Acest lucru permite stergerea obiectului respectiv cand se constata ca nu mai exista nici o referinta la el. De exemplu, un garbage collector ar putea utiliza acest principiu de lucru;

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

Şablonul Proxy asigură un surogat sau un înlocuitor

pentru alt obiect pentru a controla accesul la acesta

l Delegarea la distanţă controlează accesul către un obiect nelocal

l Delegarea virtuală controlează accesul la o resursă costisitor de creat

l Delegarea de protecţie controlează accesul la o resursă pe baza unor drepturi de acces

Page 56: Java Hatz Full

56

56

l Referinţă inteligentă: copierea la scriere (copy on write), blocarea unui obiect, numărarea referinţelor, caching

25.Design patternul Iterator

¢ Sablonul Iterator asigura o cale de accesare secventiala a elementelor unui obiect agregat, fara a expune reprezentarea lui de baza.

l Metodele Iteratorului pot avea nume diferite

l Java Iterator: next(), hasNext(), remove()

l C# IEnumerator: Current, MoveNext(), Reset()

l Există Iteratori interni şi externi

l Iteratorul extern este controlat de client, ca în exemplul precedent (cu metoda next)

l Iteratorul intern este controlat de Iteratorul însuşi, căruia trebuie să i se spună ce operaţii să efectueze cu elementele pe care le parcurge

Şablonul se utilizează pentru:

l A accesa conţinutul unui obiect agregat fără a expune reprezentarea internă

l A asigura suport pentru mai multe traversări ale obiectelor agregate

l A furniza o interfaţă uniformă pentru traversarea structurilor agregate diferite

l Pentru a suporta o iteraţie polimorfică

Suportă variaţii în traversarea unui agregat

l Obiectele agregate pot fi traversate în mai multe feluri şi de mai multe ori

l Obiectele Iterator simplifică interfaţa Agregat

l Agregatul are nevoie de o metodă unică pentru crearea Iteratorului

l Scade cuplarea dintre client şi obiectele agregate

Page 57: Java Hatz Full

57

57

l Creşte coeziunea obiectului agregat prin eliminarea necesităţii de a asigura el însuşi traversarea

26. Design patternul Strategy Scop: Se defineşte o familie de algoritmi; se încapsulează fiecare mebru; algoritmii se fac interschimbabili. Aplicabilitate – Multe clase înrudite diferă doar prin comportament – Se folosesc diverse variante ale unui algoritm – Algoritmii folosesc date irelevante pentru client – O clasă defineşte comportamente multiple, definite de conditii gardă la începutul metodelor.