Sunteți pe pagina 1din 13

CURS 7

Clase interioare
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 la creat!!!
Obiectul clasei interioare poate accesa membrii obiectului clasei exterioare fara
ca sa fie ne"oie de calificare (dreptul de a accesa este asupra tuturor obiectelor
membre ale clasei exterioare)
#entru a se obtine referinta la obiectul clasei exterioare (din obiectul clasei
inner) se utilizeaza: OuterT$pe.t%is
#entru a crea un obiect din clasa inner pornind de la un obiect din clasa outer se
poate utiliza: obiectOuter.ne&
Clasele inner sunt potri"ite pentru a implementa interfete: se realizeaza
ascunderea implementarii
Clase interioare (II)
Clasele interioare pot fi create intro metoda sau domeniu de "izibilitate
deoarece:
Se implementeaza o interfata, deci se poate crea si returna o referinta la
aceasta (upcast)
Se rezol"a o problema complicata si dorim sa creem o clasa care sa ne
a'ute la rezol"area problemei, dar nu dorim ca aceasta sa fie publica
Clasa interioara poate fi accesata doar din interiorul metodei (sau domeniului de
"izibilitate) unde a fost definita
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 "alori din afara (din
domeniul unde se creaza clasa)
Daca intro clasa anonima se doreste a fi utilizat un ar)ument (sau o "aloare)
definita in afara acesteia, atunci referinta acesteia trebuie sa fie final
Clasele anonime nu pot a"ea constructor, dar initializarile se pot realiza in
blocul nonstatic 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 de"in automat static public. *ol: crearea
de cod comun care sa fie utilizat de toate implementarile interfetei
1
Oricat de adanca este imbricarea claselor nested, acestea pot accesa obiectele
membre din clasele exterioare, indiferent de ni"elul de imbricare
De ce clase inner?
+iecare 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 a"ea instante multiple, fiecare cu propria stare, care este
independenta de starea obiectului din clasa exterioara
O sin)ura clasa exterioara poate a"ea mai multe clase interioare fiecare
implementand aceasi interfata sau mostenind din aceasi clasa in mai multe
feluri
,a momentul creerii obiectului din clasa inner, acesta nu este le)at de creerea
obiectului din clasa outer
Inner class este o clasa total diferita de clasa exterioara, nu exista confuzie de
tipul isa
Closures & callbacks
Closure: un obiect apelabil care retine informatie despre domeniul de
"izibilitate in care a fost creat (are access la "ariabilele din domeniul de
"izibilitate unde a fost creat)
-. clasa interioara este un closure (deoarece are o referinta catre obiectul
exterior si poate sa acceseze inclusi" membrii pri"ati ai clasei exterioare)
Callback: un obiect primeste o informatie care "a permite sa apelam obiectul
initial la un moment ulterior de timp
Callback se implementeaza cu clase interioare
Clasa de tip Closure furnizeaza o poat/ 0n intriorul clasei exteriore (dar intrun
mod safe 1 nu se necesit/ ca sa transformam accesul la metodele acestei clase)
De ce callbacks2 ,a executie, se poate sc%imba metoda care este apelat/, in
mod dinamic
Control frameworks
3pplication frame&ork: un set de clase proiectate sa rezol"e un tip anume de
problem/ (desi)n patternul Template 4et%od)
#entru aplicarea application frame&ork se mostenesc din clasele de baza si se
sc%imba implementarea prin o"erridin)
Codul suprascris este cel care customizeaza solutia la cazul particular
Template 4et%od: contine structura de baza a al)oritmului, iar partile specifice
sunt apeluri la metode care pot fi o"erride
3stfel, se separa partile nesc%imbate ale al)oritmului de cele flexibile
Control frame&ork: un tip particular de application frame&ork prin care
sistemul raspunde la e"enimentele )enerate (sistem e"entdri"en) 1 de exemplu
56Is
In implementarea Control frame&ork, inner class sunt utilizate pentru a exprima
di"ersele actiuni (metoda action)
2
Mostenire din clase inner
,a mostenire dintro clasa inner, trebuie furnizat la constructia obiectului un
obiect din clasa inner, pentru a se permite construirea subobiectului cl. baza
( enclosin)Class*eference.super() )
Clasele locale unui domeniu de "izibilitate au access la toate "ariabilele
domeniului respecti" (inclusi" cele final), insa aceste clase nu au specificator de
access
CURS 8
Colectii, Exceptii
Introducere
Sirurile de obiecte (arra$s): reprezinta cel mai eficient mod pentru a p/stra
obiecte.
7ea'uns: au dimensiunea fixata la compilare
8a"a.util: clase container: ,ist, Set, 9ueue, 4ap
#re'a"a S:;: containerele 'a"a pot memora orice tip de obiecte, deci pot ap/rea
erori
De exemplu: 3rra$,ist are metodele add si )et definire utilizand clasa Ob'ect
:rorile la re)asirea obiectelor din container pot sa fie identificate doar la
executie (ClassCast:xception)

Containere generice
TipContainer<TipDe=aza.
In container se pot p/stra doar obiecte din tipul de baz/
Se obtine o eroare la compilare daca se incearc/ stocarea unui obiect dintrun
alt tip
7u mai este necesar/ operatia de cast (con"ersie) la re)asirea obiectelor
Operatii de efectuat la utilizarea containerelor
>. Definirea obiectului de tip container
?. Inserarea de obiecte in container (de ex. 4etoda add)
@. *e)asirea obiectelor (de ex. 4etoda )et)
Daca sunt containere )enerice nu mai este ne"oie de cast
,a containere pre8a"a S:;, trebuie con"ersie
Tipuri de containere Java
Colectii: memoreaza o sec"enta de elemente indi"iduale, impreuna cu una sau
mai multe re)uli aplicate acestora
,ist: memoreaza obiectele in ordinea in care au fost inserate
Set: nu se permit obiecte duplicat
9ueue: re)aseste elementele dup/ ordinea furnizata de re)ula de insiruire
4ap: reprezinta )rupuri de perec%i de tip (c%eie, "aloare).
Intrun 4ap se re)aseaste un obiect ("aloarea) prin furnizarea c%eii
Collection, ,ist, Set, 9ueue si 4ap reprezinta interfete
,ist<3pple. apples - ne& 3rra$,ist<3pple.()(
3
,ist<3pple. apples - ne& ,inked,ist<3pple.()(
In colectii se pot adau)a )rupuri de elemente
Collection.3rra$s.as,ist() Collection.add3ll()
Ieraria de clase colectii
!ucrul cu containerele
Tiparirea acestora: metoda toStrin)
sortare: metoda sort
,iste: ? tipuri de liste
3rra$,ist: lista implementata cu un sir. #ermite operatii rapide pentru access
random la elemente. Operatiile de inserare si ster)ere de la mi'locul listei sunt
costisitoare
,inked,ist: lista implementata cu lista simplu inlantuita. #ermite operatii rapide
de insertie si ster)ere de la mi'locul listei, insa operatiile de re)asirea aleatoare
sunt costisitoare
Iteratori
:ste un desi)n pattern
6n obiect de tip iterator este asociat unei colectii si permite re)asirea ordonata a
obiectelor din colectia respecti"a
4etoda iterator() a unei colectii
4etoda next() a obiectului iterator: produce urmatorul element din colectie
4etoda %as7ext(): intero)%eaza daca mai sunt elemente neiterate
4etoda remo"e(): ster)e ultimul element iterat din colectie
Iteratorii pot produce elementele colectiei doar intro sin)ura directie
,istIterator: furnizat doar de interfata ,ist, poate parcur)e elementele colectiei
in ambele directii
"#ceptii (i)
7u toate erorile pot fi prinse la scrierea pro)ramului (la compilare)
4
*estul problemelor trebuie rezol"ate la execu ie printun mecanism prin care sa
se ofere pro)ramului client informatia necesara rezol"arii situa iei
-. exception %andlin): sin)urul mecanism 8a"a pentru tratarea erorilor
Conceptul de exceptie: in domeniul de "izibilitate unde apare eroarea de obicei
nu stim cum sa tratam eroarea, insa stim ca nu putem s/ continu/m cu eroarea,
astfel c/ transmitem eroarea spre rezol"are la un domeniu de "izibilitate
exterior
:xception condition: eroarea ap/rut/ (de exemplu imp/r ire la A)
,a apari ia unei erori:
Se creaz/ un obiect de tip exceptie (pe %eap, cu ne&)
+irul de executie curent este intrerupt si referinta la obiectul exceptie este
transmis/ in afara contextului curent
4ecanismul de exception %andlin) caut/ un context potri"it pentru
reluarea executiei pro)ramului
Bandlerul de exceptie: locul de unde se reia executia pro)ramului,
recupereaza pro)ramul de la eroarea aparuta
"#ceptii (ii)
3runcarea unei exceptii
if (t--null)
trow ne& 7ull#ointer:xception()(
Obiectele de tip exceptie pot fi construite cu ar)umente transmise
,a t%ro& se poate arunca orice obiect dintrun tip care extind clasa T%ro&able
(clasa radacina a ierar%iei exceptiilor)
Conceptul de tranzactie: totul sau nimic
#remisa fundamentala a tranzactiilor: existenta conceptului de exceptie
$uarded regions
tr$ C
DD codul care este susceptibil sa )enereze exceptie
E catc% (T$pe> tp>) C
DD exceptii de tipul T$pe>
E catc% (T$pe? tp?) C
DD exceptii de tipul T$pe?
E F
finall$ C
DD cod care se executa indiferent de tipul de exceptie aruncat (sau nu)
E
Tr$ 1 catc% functioneaza ca un s&itc% pe tipul de exceptie
? modalitati de tratare a erorilor
Termination: eroarea este aruncata
*esumption: se insereaza cod tr$ 1 catc% pt rezol"area erorii
Crearea propriilor e#ceptii
5
4ostenire din clasa :xception
,a afisari la o eroare se recomanda utilizarea S$stem.err in loc de S$stem.out
printStackTrace(..) : se afiseaza sec"enta de metode apelate pentru a se a'un)e
la exceptie
)et4essa)e() : mostenit de la T%ro&able, e similar cu toStrin) pentru erori
,o))in):
6rmarirea executiei pro)ramului pentru a putea rezol"a mai usor erorile
'a"a.util.lo))in)
Se creaza un obiect de tip ,o))er
Se pot lo)a mesa'e de tip fine, info, se"ere, &arnin), etc.
%pecificarea e#ceptiei
,a o metoda, prin t%ro&s se indica tipul erorilor care pot sa fie aruncate de c/tre
metoda respecti"a
:rorile de tip *untime:xception nu trebuiesc specificate prin t%ro&s
Compilatorul forteaza pro)ramatorul s/ specifice exceptiile
Daca intro functie este posibil s/ apara o exceptie si pro)ramatorul nu o
specifica prin t%ro&s, atunci apare eroare la compilare
:rorile "erificate si enforced la compilare: c%ecked exceptions
#rinderea oricarei exceptii:
catc% (:xception e) C.. E
StackTrace:
printStackTrace, )etStackTrace
*earuncarea unei exceptii:
In catc% se face t%ro&
Inlantuirea e#ceptiilor
,a prinderea unei exceptii si aruncarea unei alte exceptii, se doreste pastrarea
lantului exceptiilor care apar
Subclasele T%ro&able pot sa utilizeze cauza erorii ca si ar)ument in constructor
Se poate folosi clauza la constructor doar la clasele de tip :rror, :xception sau
*untime:xception
,a celelalte tipuri de erori, se poate utiliza initCause
Ieraria e#ceptiilor Java
Clasa T%ro&able: orice este mostenit din t%ro&able poate fi aruncat cu t%ro&
? tipuri de obiecte T%ro&able: :rror and :xception
:xceptiile 'a"a mostenesc din clasa :xception
7umele exceptiei este su)esti" pentru cauza aparitiei exceptiei
*untime:xception: sunt aruncate in mod automat de catre 'a"a la momentul
aparitiei lor 1 unc%ecked exceptions
De obicei, acestea indica bu)uri si nu trebuie prinse cu tr$catc%
6
"#ceptii pierdute
:xista o clauza finall$ fara catc%
Sau in finall$ se face return
#ro)ramatorul nu are nici o indicatie despre exceptia pierduta
Restrictii la exceptii:
Cand se suprascrie o metoda, se pot arunca doar exceptiile de tipul specificat in
metoda din clasa de baza
3tentie la exceptii in constructori: constructorii trebuie sa isi inc%eie cu success
executia pentru a aduce obiectele intro stare si)ura
:xception matc%in): se face potri"ire pe cea mai apropiata clauza catc% care
potri"este cu tipul exceptiei
$uidelines
Tratati exceptiile la domeniul de "izibilitate potri"it (nu prindeti exceptii decat
daca stiti ce sa faceti cu ele)
,a rezol"are, de obicei se rezol"a problema exceptiei si se reia executia codului
care a )enerat exceptia sau
Se transmite executia la un ni"el superior fara reluarea codului sau
Se poate calcula un rezultat alternati" celui produs de codul care a )enerat
exceptia sau
Se poate executa tot ce e posibil in domeniul curent si se arunca aceasi exceptie
la un ni"el superior sau
Se poate executa tot ce e posibil in domeniul curent si se arunca o alta exceptie
la ni"el superior sau
Se poate termina pro)ramul
Sa facem pro)ramele nostre simple
Sa facem pro)ramele nostre safe prin debu))in)
CURS 9
RTTI
&TTI
*unTime T$pe Identification
Descoperirea tipului la executie si utilizarea acestuia
? tipuri de *TTI:
Traditional 1 la compilare
*eflection: la executie !!!
6pcast: necesit/ realizarea automata a *TTI pentru in"ocarea automat/
(polimorfic/) a metodei suprascrise
#rin *TTI se poate identifica tipul exact al unui obiect la executie (limba'ul de
pro)ramare are metode pentru a realiza acest lucru)
'biectul Class
8a"a realizeaz/ *TTI prin intermediul obiectului Class
3cesta contine informatie referitoare la tip, informatie care poate fi intero)at/
7
#entru fiecare clas/ pe care o a"em in pro)ram, exist/ un obiect Class asociat
,a compilarea unei noi clase, acest obiect este creat si sal"at in fisierul .class
,a crearea unui obiect dintro clas/, 8G4 utilizeaz/ un subsistem numit class
loader
Toate clasele sunt incarcate in mod dinamic de c/tre 8G4 la prima utilizare a
acestora (anume cand se face prima referinta la un membru static al clasei)
,a incarcarea unei clase, se "erific/ daca obiectul Class al tipului respecti" este
incarcat, daca nu, se identific/ fisierul .class pe disc, si octetii acestuia sunt
"erificati inainte s/ fie incarcati
'biectul Class
4etoda for7ame(HFI) : returneaza o referinta catre obiectul Class aferent unui
tip
Solicit/ incarcarea fisierului .class daca acesta nu e de'a incarcat de class
loader
4etoda Ob'ect.)etClass(): returneaza obiectul de tip Class aferent unui tip de'a
incarcat
4etode ale obiectului Class: )et7ame, )etSimple7ame, )etCanonical7ame,
isInterface, )etInterfaces, )etSuperclass,
class literal
*eferinta la obiectul de tip class poate fi obtinut si astfel: 7umeTip.class
:ste safer: poate fi "erificat la compile time
TJ#:: pentru tipurile &rapper de primiti"e
boolean.class --- =oolean.TJ#:
Crearea unei referinte prin .class nu initializeaz/ obiectul de tip Class
corespunzator
#re)atirea unui obiect pentru utilizare: in @ moduri
Incarcarea clasei, realizata de class loader, se )aseste b$tecodul pe disc si
se creaz/ obiectul Class corespunzator tipului
,inkin): se aloca spatiu de stocare pentru membrii static si se rezol"a
toate referintele realizate de clas/ c/tre alte clase
Initializare: se executia intializatorii statici si blocurile statice de
initializare. Initializarea este intarziat/ pKn/ la prima referinta la o
metod/ static/ sau un camp nonstatic
Initializarea obiectului Class este amanata atata timp cKt este posibil
$eneric class reference
Class<tip. : permite sal"area de referinte doar la obiectul Class a tipului
respecti"
3tentie: Class<Inter)er. nu e subclasa a lui Class<7umber. cu toate ca Inte)er
e deri"ata din 7umber!!!
Class<2. : se permite orice tip (2 1 &ildcard)
Class<2 :xtends Tip. : se permite orice subtip a lui Tip
8
Con"ersie de tip: metoda obiectClass.cast(referinta)
Con"ersia in mod clasic (..)obiect nu apeleaza *TTI -. ne"oia pt instanceof
if (x instanceof Do)) -. necesar pt a se e"ita ClassCast:xception
((Do))x).bark()(
Compararea obiectelor de tip Class
:ste diferenta intre instanceof sau isInstance si compararea obiectelor de tip
Class
,a compararea obiectelor de tip Class, nu se tine seama de mosteniri
&eflection
Cum lucram cu obiecte a caror clase nu sunt disponibile la compilare2
8a"a.lan).reflect
Clasele +ield, 4et%od, Constructor
)et+ields, )et4et%ods and )etConstructors
Desing patternul (ro#)
#rox$: 6n obiect substitut, transmis in locul unui obiect real, pentru a furniza
prelucrari aditionale inainte de a transmite operatiile catre obiectul real
D$namic prox$: se creaza obiectul prox$ dinamic si se trateaza apelurile catre
metodele proxied in mod dinamic
CURS 10
I/O in Java
%istemul de I*' intr+un limba, de programare
Sistemul de IDO intrun limba' de pro)ramare trebuie s/ fie capabil s/ trateze
Surse diferite de dispoziti"e de IDO (fisiere, consola, conexiuni de retea
etc)
Tipuri diferite de access la surse (access sec"ential, access random,
access buffered)
Tipuri diferite de lucru cu sursa (binar, la ni"el de caracter, la ni"el de
linie, la ni"el de cu"ant)
Clasa -ile
*eprezinta un nume a unui fisier sau unui set de fisiere dintrun director
4etoda list() . produce un sir de Strin) care reprezinta fisierele referite de
obiectul de tip +ile
,ist poate fi in"ocata utilizand un Director$ +ilter, pentru a returna doar acele
fisiere pentru care numele respecta un pattern
Interfata +ilename+ilter: metoda accept primeste la intrare obiectul de tip +ile si
strin)ul pentru comparare. 4etoda list din +ile apeleaza metoda accept pentru
fiecare fisier din +ile, iar acesta este inserat in lista doar daca accept furnizeaza
true
Obiectul +ile poate fi utilizat ca sa creemDster)emDredenumim un directorDfisier
sau un directorDfisier cu o intrea)a cale
9
+ile poate fi utilizat ca sa citim informatiile referitoare la un fisierDdirector
Input si 'utput
#entru intrare: clasele InputStream si *eader cu metoda read
#entru iesire: clasele OutputStream si Lriter cu metoda &rite
*ead si &rite lucreaza pe octeti (sau siruri de octeti)
Toate clasele de IDO sunt deri"ate din acestea
,a realizarea efecti"a de IDO pro)ramatorii creaza insuruiri de obiecte din
clasele de IDO (desi)n patternul Decorator)
Tipuri de Input%tream
=$te3rra$InputStream: permite ca un buffer de memorie sa fie utilizat ca si un
InputStream (din buffer se extra) octeti)
Strin)=ufferInputStream: con"erteste un Strin) intrun InputStream
+ileInputStream: sursa de intrare e un fisier. Se furnizeaza la construirea
obiectului fie un Strin) fie un +ile
#ipedInputStream: este asociat cu un #ipedOutputStream (care este furnizat la
construirea obiectului). Implementeaza conceptul de #ipe
SeMuenceInputStream: con"erteste unul sau mai multe InputStream intrun
sin)ur obiect de tip InputStream (la construire se furnizeaza fie un InputStream,
fie un :numerator de obiecte InputStream)
+ilterInputStream: clasa abstracta, interfata pentru decoratorii care furnizeaza
tipuri particulare de citire
Tipuri de 'utput%tream
=$te3rra$OutputStream: creaza un buffer de memorie (octeti). Datele scrise
sunt trimise in acest buffer
+ileOutputStream: iesire intrun fisier. Se construieste obiectul pe baza unui
Strin) sau a unui +ile
#ipedOutputStream: in con'unctie cu #ipedInputStream. #entru conceptul de
#ipe
+ilterOutputStream: pentru iesire formatata, se implementeaza functionalitati de
scriere
Design patternul Decorator
Decoratorul trebuie sa aiba aceasi interfata cu obiectele decorate.
Decoratorul poate s/ extinda interfata acestor obiecte.
Clasele +ilter sunt radacina abstracta a claselor de decorator
Tipuri de -ilterInput%tream
DataInputStream: se pot citi tipuri primiti"e (int, c%ar, lon) etc)
=uffered InputStream: citire din buffer, se pre"ine accesul la dispoziti"ul fizic
la fiecare operatie de read
10
,ine7umberInputStream: tine e"identa numarului de linie citit (cu
)et,ine7umber)
#us%backInputStream: se poate pune inapoi in stream ultimul octet citit
Tipuri de -ilter'utput%tream
DataOutputStream: se pot scrie primiti"e
#rintStream: folosit pentru formatarea afisarii (metodele print si println)
=ufferedOutputStream: pentru afisare optimizata prin buffer (se e"ita accesul la
dispoziti"ul fizic la fiecare afisare)
&eader si .riter
3dau)a functionalitate pentru IDO la ni"el de caracter sau 6nicode
Clasele sunt adau)ate in ierar%ia InputStream si OutputStream deci nu se
inlocuieste aceasta ierar%ie
Clase adapter: InputStream*eader si OutputStreamLriter
4oti"ul pentru care au fost create: sa se permita internationalizarea (6nicode
lucreaza cu caractere pe >N biti)
*ecomandare: sa se utilizeze clase de tip *eader si Lriter ori de cate ori e
posibil
,a citiri specifice la ni"el de octet, sa se utilizeze InputStream si OutputStream
Corespondenta de clase
&andom/ccess-ile
+isiere cu inre)istr/ri cu dimensiune cunoscut/ 1 se poate utiliza functia seek
pentru pozitionare in fisier
3ceasta clasa nu face parte din ierar%iile InputStream sau OutputStream
4etoda )et+ile#ointer() : returneaza pozitia in fisier
seek() : pentru a muta pointerul de fisier
,en)t%() : lun)imea maxima a fisierului
11
Incepand cu 8DO >.P: apar fisierele memor$mapped
&eali0area fisierelor comprimate
8a"a furnizeaza clase pentru compresie si decompresie, in ierar%ia InputStream
si OutputStream
C%eckedInputStream: 5etC%eckSum() produce c%ecksum
C%eckedOutputStream: 5etC%eckSum() produce c%ecksum
DeflaterOutputStream: "arful ierar%iei de clase pentru compresie
QipOutputStream: compresie Qip
5QI#OutputStream: compresie 5QI#
InflaterInputStream: "arful ierar%iei de clase pentru decompresie
QipInputStream : decompresie Qip
5QI#InputStream : decompresie 5QI#
Qip+ile D Qip:ntr$ : pentru a manipula fisiere de tip zip
-isiere ,ar
83*: 8a"a 3*c%i"e: colecteza fisiere intro sin)ura ar%i"a pentru pentru a putea
fi transmise in Internet
+isierul 83* contine fisierele ar%i"ate R fisier manifest
8DO contine utilitarul 'ar pentru crearea de ar%i"e 'ar
De obicei un fisier 'ar contine b$tecode (fisiere .class)
seriali0are
#astrarea obiectelor dincolo de executia pro)ramelor
3stfel obiectele pot fi recuperate si executia restartata de la punctul unde a fost
oprita anterior
Orice obiect dintro clas/ care implementeaza Serializable poate fi con"ertit in
sir de octeti si apoi restaurat
#ersistent/: durata de "iata a unui obiect exista dincolo de executia unui
pro)ram
#entru realizarea persistentei, obiectele trebuie serializate D deserializate in mod
explicit (li)%t&ei)%t persistence)
#entru serializare, se creaz/ un obiect dintrun tip OutputStream, acesta este
H&rapI in interiorul unui Ob'ectOutputStream si se utilizeaza metoda
&riteOb'ect
#entru deserializare a"em Ob'ectInputStream si readOb'ect . se recupereaza
un Ob'ect si trebuie facut do&ncast
Serializarea sal"eaza intre) &ebul de obiecte din spatele obiectului serializat
Tipul unui obiect deserializat: )etClass
"#ternali0e
Ce se intampla daca dorim ca parti din obiect sa nu fie serializate2
Sau dorim s/ recreem subobiecte de la zero2
12
Interfata :xternalizable: extinde interfata Serializable
? metode noi: &rite:xternal, read:xternal
3ceste metode sunt apelate automat la serializare D deserializare si contin cod
suplimentar care se executa la aceste operatii
,a obiectele deserializate cu :xternalizable, obiectele sunt construite obisnuit
(cu default constructor) si apoi se apeleaza metoda read:xternal
,a obiectele :xternalizable, subobiectele componente trebuie serializate manual
(in &rite:xternal) iar la deserializare, ele trebuie recuperate de pe disc
,a mostenire dintro clasa :xternalizable, se apeleaza &rite:xternal si
read:xternal a clasei de baza pentru a se asi)ura serializare D deserializare
corecta
"vitarea seriali0arii anumitor componente ale obiectelor
#rima metoda: utilizarea :xternalizable
4etoda ?a: cu"antul c%eie transient: indica faptul acel camp marcat cu
transient nu "a fi serializat ca si parte a procesului automat de serializare
4etoda @a: se adau)a la clase metodele &riteOb'ect si readOb'ect in care se
furnizeaza codul pro)ramatorului pentru serializare
3ceste metode sunt pri"ate si sunt apelate automat de catre &riteOb'ect
si readOb'ect a claselor Ob'ectOutputStream si Ob'ectInputStream
13