Professional Documents
Culture Documents
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
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);
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;
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
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:
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