You are on page 1of 7

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
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 aplicm 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 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);

1
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;
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;
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;
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 cte ori se creaz o clas: se motenete din Object;
2. Mostenire: clasa nou se aseamn cu clasa veche: cuvntul cheie extends;
3. Regul nescris la mostenire: cmpurile din clasele de baz se scriu private iar metodele
se las public (sau protected)
4. Realizarea mostenirii: la crearea obiectului din clasa derivat, se creaz un subobiect din
clasa de baz (ca si cum ar fi realizat o compozitie ctre acesta);
Sintaxa compoziiei:
1 Se plaseaz o referin ctre 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
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;

2
4 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);

Is-a vs. Is-like-a:


1 Relatie de mostenire de tip is-a: clasa derivat doar suprascrie interfaa clasei de baz;
2 Relatie de mostenire de tip is-like-a: clasa derivat contine metode suplimentare fa de
clasa de baz;
3 Downcast: operaia invers upcast nu este o operaie garantat, in sensul in care nu stim
exact clasa derivat ctre care se face downcast;

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;

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 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 Pune la dispozitia subclaselor un model complet pe care sa-l implementeze;
3 Nu se pot crea obiecte din clasa abstract = > eroare la compilare;
Interfete:
1 O clasa care implementeaza o interfata trebuie obligatoriu sa specifice implementari
pentru toate metodele interfetei;
2 O clasa poate implementa mai multe interfete = superinterfete separate prin virgula
mostenire multipla;
3 Corpul unei interfete contine variabile constante, implicit static si final care trebuie
initializate;
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
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;
Inner classes:
1 Se plaseaza clase in interiorul altor clase;
2 Obiectul clasei interioare are un link (referinta) catre obiectul clasei exterioare care l-a
creat;

3
3 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;
4 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 Campurile din clasele anonime pot fi initializate cu valori din afara (din domeniul unde se
creaza clasa)
3 Clasele anonime nu pot avea constructor, dar initializarile se pot realiza in blocul non-static
de initializare
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:
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 next() a obiectului iterator: produce urmatorul element din colectie;
4 Metoda hasNext(): interogheaza daca mai sunt elemente neiterate;
5 Metoda remove(): sterge ultimul element iterat din colectie;

Obiectul Class:
1 Java realizeaz RTTI prin intermediul obiectului Class;
2 Acesta contine informatie referitoare la tip, informatie care poate fi interogat;
3 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 Obiectul File poate fi utilizat ca sa creem/stergem/redenumim un director/fisier sau un
director/fisier cu o intreaga cale;

4
3 -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;
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;
3 PipedOutputStream: in conjunctie cu PipedInputStream. Pentru conceptul de Pipe;
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;

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;
Persistent: durata de viata a unui obiect exista dincolo de executia unui program;
3 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;
3 La obiectele Externalizable, subobiectele componente trebuie serializate manual (in
writeExternal) iar la deserializare, ele trebuie recuperate de pe disc;
RTTI:
1 Descoperirea tipului la executie si utilizarea acestuia
2 2 tipuri de RTTI:
-Traditional la compilare
-Reflection: - la executie !!!
3 Upcast: necesit realizarea automata a RTTI pentru invocarea automat (polimorfic) a
metodei suprascrise

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

Final:
1 declara ca o clasa nu poate accesa subclase
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
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:
1 Un bloc try este urmat de mai multe blocuri catch si optional de un bloc finally
2 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:
1Daca 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
Fiecare fisier .java incepe cu mentiunea package: se indica numele packageului din
care vor face parte clasele

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

You might also like