Sunteți pe pagina 1din 8

Limbaje de programare – curs 6 -

- Informatică Economică, an III –

Clase interioare

Gheorghe Cosmin Silaghi

Cluj-Napoca - 8-15 Noiembrie 2017


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 - 8-15 Noiembrie


2017
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 - 8-15 Noiembrie


2017
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 implementarile interfetei
Oricat de adanca este imbricarea claselor nested, acestea pot accesa
obiectele membre din clasele exterioare, indiferent de nivelul de imbricare
Cluj-Napoca - 8-15 Noiembrie
2017
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 - 8-15 Noiembrie


2017
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 - 8-15 Noiembrie


2017
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 - 8-15 Noiembrie


2017
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 - 8-15 Noiembrie


2017

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