Sunteți pe pagina 1din 14

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

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

Clasele reprezintă o modalitate de a introduce noi tipuri de date într-o aplicție Java, cealaltă modalitate fiind prin intermediul
interfețelor.
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

2. Ce este un package?

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

3. Defineste final, finally finalize.

Final- o clasa declarata cu final nu poate fi subclasata. O clasa declarata ca final opreste linia de mostenire, nu poate fi
extinsa . O metoda declarata cu final nu poate fi suprascrisa.O variabila declarata cu final poate fi initializata numai o
singura data. Este 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. Ajuta programatorul sa evite curatarea codului accidentala prin return break sau continue.

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 obiect sa fie luat de garbage collector.

4. 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.
5. Defineste private, protected , public

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

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

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

7. Design patternul Iterator

Un obiect de tip iterator este asociat unei colectii si permite regasirea ordonata a obiectelor din colectia respectiva
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 directie
ListIterator: furnizat doar de interfata List, poate parcurge elementele colectiei in ambele directii

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

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)

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


}

Try – catch functioneaza ca un switch pe tipul de exceptie

2 modalitati de tratare a erorilor

 Termination: eroarea este aruncata


 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);
}
}
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. Fie un system formal definit pe alfabetul format din literele a si b.Limbajul format accepta doar
cuvinte care se incheie cu aab.Sa se scrie automatul finit determinist pentru acest limbaj si reprezentarea
limbajului in BNF.

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

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();
}

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

15. 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 ?
16. 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
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 –

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

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

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

 UTILIZAREA aceluiasi nume de metoda pentru mai multe metode cu argumente diferite
 La supraincarcare, primitivele din lista de argumente sunt “promoted” catre tipurile mai largi
 Metodele nu se pot supraincarca pe tipul de return

20. 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.
this poate fi utilizat doar in interiorul metodelor ne-statice
In interiorul unei metode dinstr-o clasa, la apelul unei metode din clasa curenta, nu este nevoie sa se utilizeze this
This este frecvent utilizat in return, pentru a returna obiectul curent
21. 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.

Datele membre si metodele pot fi accesate doar sub calificarea unui obiect existent in memoria programului (creat cu new)

Un camp sau o metoda statica nu este legata de vreun obiect anume dintr-o clasa

class data sau class method

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

Campurile statice pot fi referite prin numele clasei

Metodele statice sunt la nivel de clasa, pot fi referite prin numele clasei (fara a fi necesara existenta unui obiect)

Metoda main

Metodele statice nu pot accesa campuri/metode ne-statice din clasa

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

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

24. Design pattern 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

25. Design pattern FactoryMethod:

Rolul unei interfete: sa se permita implementari multiple pentru diverse clase


Design patternul Factory: 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

26.

Closure: un obiect apelabil care retine informatie despre domeniul de vizibilitate in care a fost creat(inner classes= clasa interioara
este un Closure)
Callback: un obiect primeste o informatie care va permite sa apelam obiectul initial la un moment ulterior de timp

27.

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

28. Design Pattern 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 dynamic

29. Design pattern 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

30. RTTI
Run-Time Type Identification
Descoperirea tipului la executie si utilizarea acestuia
2 tipuri de TTI:
 Traditional – la compilare
 Reflection: - la executie !!!
Upcast: necesită realizarea automata a RTTI pentru invocarea automată (polimorfică) a metodei suprascrise

Prin RTTI se poate identifica tipul exact al unui obiect la executie (limbajul de programare are metode pentru a realiza acest lucru)

31. Programare concurenta


Programele scrise pana acuma: secventiale
Programare concurenta: mai multe fire de executie care ruleaza in paralel
Exemple de utilizare a modelului concurent de executie in Java:
 Sistemul web clasic
 JSP
 Swing si SWT au mecanisme pentru suport concurenta
Motive pentru a realiza programe concurente
 Executie mai rapida – in conditiile programarii multiprocesor
 Imbunatatirea code design
Concurenta induce un cost: complexitate sporita a programelor

32.Threading in Java

Thread: un flux secvential de executie dintr-un process(mecanismul care executa taskul)

Intr-un sistem multi-threading, un proces poate contine mai multe threaduri concurente

Programatorul proate programa fiecare dintre aceste threaduri ca si cum ar avea intreg procesorul la dispozitie

33.Deadlock

Apare atunci cand taskurile asteapta utilizarea unei resurse unul dupa celalalt

Apare atunci cand urmatoarele 4 conditii sunt simultan indeplinite:

Excluderea mutuala: cel putin una din resursele folosite de catre taskuri nu pot fi utilizate in comun

Cel putin un task detine o astfel de resursa si asteapta sa achitioneze o alta asemenea resursa detinuta de alt task

O astfel de resursa nu poate fi luata in mod fortat de la un task

Poate aparea un wait circular

Rezolvarea situatiei de deadlock:

Impiedicarea realizarii uneia din cele 4 conditii de mai sus

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