Sunteți pe pagina 1din 8

Limbaje de programare curs 6 - Informatic Economic, an III

Clase interioare

Gheorghe Cosmin
Silaghi
Cluj-Napoca - 21 Noiembrie
2016

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
Cluj-Napoca - 21 Noiembrie
2016

Clase interioare (II)


Clasele interioare pot fi create intr-o metoda sau domeniu de
vizibilitate deoarece:

Se implementeaza o interfata, deci se poate crea si returna o


referinta la aceasta (upcast)
Se rezolva o problema complicata si dorim sa creem o clasa care
sa ne ajute la rezolvarea problemei, dar nu dorim ca aceasta sa fie
publica

Clasa interioara poate fi accesata doar din interiorul metodei


(sau domeniului de vizibilitate) unde a fost definita

Cluj-Napoca - 21 Noiembrie
2016

Clase interioare anonime


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
Clasele anonime nu pot avea constructor, dar initializarile se pot
realiza in blocul non-static de initializare
Clasele interioare pot fi create static (nested classes) daca nu se
doreste utilizarea referintei obiectului exterior in interiorul clasei
inner
Clasele interioare parte a unei interfete devin automat static
public. Rol: crearea de cod comun care sa fie utilizat de toate
Cluj-Napoca - 21 Noiembrie
implementarile interfetei
2016
Oricat de adanca este imbricarea claselor nested, acestea pot

De ce clase inner?
Fiecare clasa inner poate in mod independent sa mosteneasca
de la o alta implementare. Deci o clasa inner nu este limitata de
faptul ca clasa exterioara mosteneste sau nu din implementare
Clasa interioara poate avea instante multiple, fiecare cu propria
stare, care este independenta de starea obiectului din clasa
exterioara
O singura clasa exterioara poate avea mai multe clase interioare
fiecare implementand aceasi interfata sau mostenind din aceasi
clasa in mai multe feluri
La momentul creerii obiectului din clasa inner, acesta nu este
legat de creerea obiectului din clasa outer
Inner class este o clasa total diferita de clasa exterioara, nu
exista confuzie de tipul is-a
Cluj-Napoca - 21 Noiembrie
2016

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
Callback se implementeaza cu clase interioare

Clasa de tip Closure furnizeaza o poart n intriorul clasei


exteriore (dar intr-un mod safe nu se necesit ca sa
transformam accesul la metodele acestei clase)
De ce callbacks? La executie, se poate schimba metoda care
este apelat, in mod dinamic
Cluj-Napoca - 21 Noiembrie
2016

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)
Cluj-Napoca - 21 Noiembrie
2016

Mostenire din clase inner


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() )
Clasele locale unui domeniu de vizibilitate au access la toate
variabilele domeniului respectiv (inclusiv cele final), insa aceste
clase nu au specificator de access

Cluj-Napoca - 21 Noiembrie
2016

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