Sunteți pe pagina 1din 10

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

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.
2.
3.
4.

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)

Crearea obiectelor si ciclul de viata:


1.
2.
3.
4.
5.
6.

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

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

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.
2.
3.
4.

Mostenirea se realizeaz ori de cte ori se creaz o clas: se motenete din Object;
Mostenire: clasa nou se aseamn cu clasa veche: cuvntul cheie extends;
Clasa nou va prelua automat toate campurile i metodele din clasa de baz;
Regul nescris la mostenire: cmpurile 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;
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 ctre 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 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 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);
3

2.
3.
4.
5.

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;


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 interfaa clasei de baz;
2. Relatie de mostenire de tip is-like-a: clasa derivat contine metode suplimentare fa de clasa de baz;
3. Relaia de substituie: 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: operaia invers upcast nu este o operaie garantat, in sensul in care nu stim exact clasa
derivat ctre 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
2.
3.
4.
5.
6.

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 operaiei 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
2.
3.
4.
5.
6.

ulterioara a unor clase ce descriu obiecte concrete;


Pot contine obiecte fara nici o implementare;
Este definita prin cuvantul cheie abstract;
Pune la dispozitia subclaselor un model complet pe care sa-l implementeze;
Nu se pot crea obiecte din clasa abstract = > eroare la compilare;
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.
2.
3.
4.
5.
6.

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;
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 ;
5

9. Clasele inner sunt potrivite pentru a implementa interfete: se realizeaza ascunderea implementarii
Clase interioare anonime:
1.
2.
3.
4.

Sunt clase interioare fara nume (clase create direct la momentul utilizarii lor)
finalizeaza constructia instructiunii care contine definitia clasei anonime
Campurile din clasele anonime pot fi initializate cu valori din afara (din domeniul unde se creaza clasa)
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)

Iteratori:
1. Este un design pattern;
2. Un obiect de tip iterator este asociat unei colectii si permite regasirea ordonata a obiectelor din colectia
3.
4.
5.
6.
7.
8.

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
6

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 ctre 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;
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.
2.
3.
4.

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:
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.
2.
3.
4.

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:
1.
2.
3.
4.

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

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;
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:


9

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

Acelasi nume se poate referi la 2 metode diferite.


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.
2.
3.
4.

Pentru fiecare clasa compilata se produce un fisier .class


Un program este compus dintr-o colectie de fisiere .class
Acestea pot fi arhivate: fisier .jar
Fiecare fisier .java incepe cu mentiunea package: se indica numele packageului din care vor face parte

5.
6.
7.
8.
9.

clasele
Clasele utilizate care fac parte din alt package se importa cu import
Toate clasele dintr-un package vor fi colectate intr-un singur subdirector
Conventie pentru denumirea packageurilor: utilizarea domeniilor de internet in ordine inversa
Calea root pentru directorare: variabila sistem CLASSPATH
CLASSPATH poate include directoare sau fisiere .jar

10

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