Raspunsuri Si Intrebari Java Hatz

39
1 1. Ce este o clasa java si cum se salveaza pe disk? Clasă: set de obiecte cu caracteristici şi funcţionalitate identice (termenul de clasa se substituite termenului de tip) O clasa reprezinta o modalitate de a descrie un nou tip de date. 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 si 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 se poate extinde o clasa finala. O metoda declarata cu final nu poate fi suprascrisa.O variabila declarata cu final poate fi initializata numai o singura data. 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.Este utilizat pentru a evita . 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 obiesct sa fie luat de garbage colector 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”.

description

Raspunsuri Si Intrebari Java Hatz

Transcript of Raspunsuri Si Intrebari Java Hatz

1

1. Ceesteoclasajavasicumsesalveazapedisk?

Clasă:setdeobiectecucaracteristicişifuncţionalitateidentice(termenuldeclasasesubstituitetermenuluidetip)

Oclasareprezintaomodalitatedeadescrieunnoutipdedate.Clasaesteodescriereauneimultimideobiectecaracterizateprinstructurisicomportamentesimilare.Deaceea,oclasavacuprindedefinitiiledatelorsioperatiilorcecaracterizeazaobiecteleclaseirespective.

Dateledefiniteintr-oclasasemainumescatribute,iaroperatiilesemainumescmetodesaufunctii-membru.Atributelesimetodeleformeazamembriiuneiclase.

SintaxafolositapentruadefinioclasainJavaeste:

classnume_clasa{//datesimetode}

Salvareapedisksefaceinfolderulbuiltcunumeleclaseisiextensia.class

2. Ceesteunpackage?

Unpackagegrupeazatoateclasele,Utilizatepentruorganizareaclaselor.Packageurilepotsicomprimatesubformajar.

3. Definestefinal,finallyfinalize.

Final-oclasadeclaratacufinalnupoatefisubclasata.Oclasadeclaratacafinalopresteliniademostenire,nusepoateextindeoclasafinala.Ometodadeclaratacufinalnupoatefisuprascrisa.Ovariabiladeclaratacufinalpoatefiinitializatanumaiosinguradata.Utilizatainspecialpentrumostenire

Finally-Bloculdeclaratcufinallyseexecutamereudupatryandcatchatuncicandapareoexceptieneasteptatasaufaraafioexceptie.Esteutilizatpentruaevita.Ajutaprogramatorulsaevitecuratareacoduluiaccidentalaprinreturnbreaksaucontinue.

Finalize-esteometodacaredacaesteprezentaintr-oclasaesteapelatainainteagarbagecollectorului.Metodafinalize()esteutilizatapentrucuratareacoduluiinaintecaunobiesctsafieluatdegarbagecolector

4. Definestevariabilalocala,variabilamembrasivariabiladeclasa

Variabiledeinstanţă.Suntunicefiecăreiinstanţeleclasei.

Variabiledeclasă.Osingurăcopiepentrutoateinstanţeleclasei.Sefoloseştemodificatoruldeacces„static”.

2

Variabilelocale.Variabiletemporaredeclarateîncadruluneimetodesauaunuibloc.Suntvizibiledoarîncadrulaceleimetode.

Parametri.Variabileleprincaresetrimitargumentelaapelulmetodelor.

variabiledeInstanta(atribute)–acestevariabiledefinescvalorileunuiobiect,deci,elesuntcreateatuncicândobiectulestecreat;eleexistadecândobiectulestecreatsipanacandacestaestedistrus;doarobiectulsimetodelesaleauacceslavariabileledeinstanta;

variabilelestatice–acestevariabilesuntpartedintr-oclasa;suntcreateatuncicândclasaesteincarcatadeJVM;

variabilelocalealeunormetode–acestevariabilesuntdefinitepestivametodeisieleexistaatâtatimpcâtmetodaesteexecutata(existainstivadeapeluri);variabilelelocalenupotfiaccesatesidininteriorulunormetodeimbricatechiardacaeleexistacandmetodaimbricataesteexecutata

variabilelocaleunuiblocdecod-acestevariabilesuntdefiniteininteriorulblocurilordecod(intre{si})sipoatefiutilizateintimpcebloculesteexecutat;blocuridecodsunttipicepentru,for,whilesiblocurideinitializare.

Variabliemembre-suntdeclarateincadruluneiclase,darapartinunuiobiect.

5. Definesteprivate,protected,public

Private:elementeleprivatepotfiaccesatedoardecreatorulclaseiincadrulmetodeloraceleiclase

-folositindeclarareaunuicampsauauneimetodedintr-oclasa-specificafaptulcamembrulsaumetodarespectivapoatefiaccesatadoardincadrulclaseiinsesi,nusidinclaselederivatedinaceastaclasa.

Public:elementelepublicesuntdisponibileoricaroralteclase

Protected:similarcuprivate,utilizatinmostenire,claselecaremostenescpotaccesaelementeleprivatedinclaseledebaza

-folositindeclarareaunuicampsauauneimetodedintr-oclasa-specificafaptulcamembrulsaumetodarespectivapoatefiaccesatadoardincadrulclaseiinsesisaudinclaselederivatedinaceastaclasa.

6. RolulclaselordetipFilter

Unfiltruesteunobiectdeaefectuasarcinidefiltrarepefiecarecerere,laoresursă(cuunconținutdeservletsaustatice),sauperăspunsullaoresursă,sauambele.

Exemplelecareaufostidentificatepentruacestdesignsunt1)Filtredeautentificare2)exploatareaforestierășiAuditfiltre

3

3)deconversiefotografiefiltre4)Filtredecompresieadatelor5)Filtreledecriptare6)FiltreTokenizing7)Filtrecaredeclanseazaresursedeaccesevenimente8)XSL/Tfiltre9)Mime-Tipfiltrulanț

ClaseleFiltersuntradacinaabstractaaclaselordedecorator

7. DesignpatternulIterator

8. DescrietimoduldeutilizareaDecoratorilorlarealizareai/oinjava

9. Careestediferentaintreoclasaabstractasiointerfata

Ointerfatadefinesteunsetdemetode,proprietati,evenimente,indexatori.Acestimembrivorfiimplementatideoclasasauchiardeostructura.

Oclasaabstractaesteoclasacarenupoatefiinstantiatasiestefolositapentrumostenire.Oclasacarenuesteabstractasicarederiveazadintr-oclasaabstracta,trebuiesaincludaimplementariletuturormembrilorabstracti.

10. Descrietimecanismultry-catch-finally

try{

//codulcareestesusceptibilsagenerezeexceptie

}catch(Type1tp1){

//exceptiidetipulType1

}catch(Type2tp2){

//exceptiidetipulType2

}…

finally{

//codcareseexecutaindiferentdetipuldeexceptiearuncat(saunu)}

Try–catchfunctioneazacaunswitchpetipuldeexceptie

4

2modalitatidetratareaerorilor

n Termination:eroareaestearuncatan Resumption:seinsereazacodtry–catchptrezolvareaerorii

Blocul"try"contineinstructiunilededeschidereaunuifisiersidecitiredintr-unfisierambeleputândproduceexceptii.Exceptiileprovocatedeacesteinstructiunisunttratateînceledouablocuri"catch",câteunulpentrufiecaretipdeexceptie.

Inchidereafisieruluisefaceînblocul"finally",deoareceacestaestesigurcasevaexecuta.Faraafolosiblocul"finally"închidereafisieruluiarfitrebuitfacutaînfiecaresituatieîncarefisierularfifostdeschis,ceeacearfiduslascriereadecodredundant:

11. Descrietimoduleledecreareaobiectelordintipulclaselorinterioarecarenusunt

anonimie

Clasainterioarãestenecesarãnumaiclaseiexterioare.Pentrureducereanumãruluideclasedenivelsuperiorsipentrusimplificareacomunicãriiîntreclaseleascultãtorlaevenimenteputemdefiniclaselereceptorcanisteclaseinterioarecunume,incluseînclasacufereastraaplicatiei:classMFrameextendsJFrame{JButtonb1=newJButton("+");JButtonb2=newJButton("-");JTextFieldtext=newJTextField(6);intn=0;publicMFrame(){Containerc=getContentPane();b1.addActionListener(newB1L());b2.addActionListener(newB2L());c.setLayout(newFlowLayout());c.add(b1);c.add(b2);text.setText(""+n);c.add(text);}//claseinclusecunumeclassB1LimplementsActionListener{publicvoidactionPerformed(ActionEventev){text.setText(""+++n);}}classB2LimplementsActionListener{publicvoidactionPerformed(ActionEventev){text.setText(""+--n);}}Definireadeclaseincluseanonimereducesimaimultlungimeaprogramelor,darelesuntmaigreudecititsideextins

5

12. Fieunsystemformaldefinitpealfabetulformatdinlitereleasib.Limbajulformatacceptadoar

cuvintecareseincheiecuaab.SasescrieautomatulfinitdeterministpentruacestlimbajsireprezentarealimbajuluiinBNF.

13. Descrietimodaliateaderealizareaunuiiteratorsiincercatisafurnizatiunexempluconcretdeutilizareaacestuisablondeprogramare Uniteratoresteunobiectcarepermitetraversareauneicolectiisimodificareaacesteia(ex:stergeredeelemente)inmodselectiv.Putetiobtineuniteratorpentruocolectie,apelandmetodasaiterator().InterfataIteratoresteurmatoarea:publicinterfaceIterator<E>{booleanhasNext();Enext();voidremove();//optional}Metodeleauurmatorulcomportament:hasNext-intoarcetruedacamaiexistaelementeneparcurseincadeiteratorulrespectivnext-intoarceurmatorulelementremove-eliminadincolectieultimulelementintorsdenext.Inmodevident,removenupoatefiapelatdecatosinguradatadupaunapelnext.Dacaaceastaregulanuesterespectata,vomprimioeroare.Neputemimaginacauniteratorsepozitioneazaintreelementelecolectiei.Initial,cursorulsauprecedeprimulelement,astfelcaprimulapelnextvaintoarceprimulelement.Atentie:MetodaremoveestesinguramodalitateSIGURAdeainlaturaunelementdintr-ocolectieintimpulparcurgeriiacesteia.Oricealtametodaareuncomportamentneprecizat(nuputemgarantacastergereavaavealoc,saucaelementulstersvaficelpecarechiardoreamsa-lstergem).Esteutilsafolosimiteratoricanddorim:stergereaelementuluicurent,intimpuliterariiCanddorimsaiterammaimultecolectiiinparalel.Exempludefolosireaunuiiterator:Collectionc=newArrayList();Iteratorit=c.iterator();while(it.hasNext()){//verificariasupraelementuluicurent:it.next();

6

it.remove();}

14. Ceinseamnaupcast?Descrietimecanismullegariiintarziatesicumfaciliteazaacestmecanismrealizareaproprietatiideupcast. Proprietateadeupcastpresupunetratareaunuiobiectdintr-oclasaderivatacasicumarfidinclasadebază. Legare(binding)=asociereadintrenumelemetodeisicorpulmetodei.Latebindingnecesitaunmecanismptidentificareatipuluilaexecutie(RTTI),ptaseidentificainmodcorectcorpulmetodeicaretrebuieapelat.Incazullatebinding,legareasefacelaexecutie,exactinaintedeexecutiaefectivaametodei.Seutilizeazalatebindingptoriceapeldemetoda,cuexceptiametodelorstaticsifinal.

15. Careesterolulconstructoruluidecopiereincazulagregariiindirecte?Constructorulesteometodăspecialăapelatăautomatlainstanţiereauneiclaseşifaceoperaţiilenecesarepentruiniţializareafiecăruiobiectaluneiclasefieeastaticăsaudinamică.Dacăsefoloseştepentruainiţializaunobiectcualtobiectatuncidenumireadeconstructordecopiere.Agregareaesterelatiaintredouaobiecteincareunuldintreobiecteapartineceluilaltobiect.Agregarearedaapartentaunuiobiectlaunaltobiect.Dinpunctdevedereconceptual,exista2tipurideagregare:strong–ladisparitiaobiectelorcontinuteprinagregare,existentaobiectuluicontainerinceteaza(deexemplu,ocartenupoateexistafarapagini)weak–obiectul-containerpoateexistasiinabsentaobiecteloragregate(deexemplu,obibliotecapoateexistasifaracarti)agregareindirect?

16. Careestediferentaintrecolectiilegenerice,heterogenesiparametrizate?Colectiilesuntunansambludeiterfetesiclasecerealizeaza:colectareaimpreunaaobiectelor,stocarea,sortareasiaccesareaobiectelor.Colectiigenerice–putemspecificatipuldedatapecareilvafolosicolectia, ex:List<String>stringsColectiieterogene–atuncicândsecreazăocolecţiepentruelementedeacelaşitip(necunoscut),oricinepoateinseraelementedealttipColectiiparametrizate-

17. SerializareaPastrareaobiectelordincolodeexecutiaprogramului.=transformareaunuiobiectintr-osecventadeocteti,dincaresapoatafirefacutulteriorobiectuloriginal.Esteunmechanismutilizatptsalvareasirestaurareadatelor.

18. Externalizarea

Ceseintampladacadorimcapartidinobiectsanufieserializate?

7

Saudorimsărecreemsubobiectedelazero?

InterfataExternalizable:extindeinterfataSerializable

2metodenoi:writeExternal,readExternal

Acestemetodesuntapelateautomatlaserializare/deserializaresicontincodsuplimentarcareseexecutalaacesteoperatii

LaobiecteledeserializatecuExternalizable,obiectelesuntconstruiteobisnuit(cudefaultconstructor)siapoiseapeleazametodareadExternal

LaobiecteleExternalizable,subobiectelecomponentetrebuieserializatemanual(inwriteExternal)iarladeserializare,eletrebuierecuperatedepedisc

Lamosteniredintr-oclasaExternalizable,seapeleazawriteExternalsireadExternalaclaseidebazapentruaseasiguraserializare/deserializarecorecta

Evitareaserializariianumitorcomponentealeobiectelor

Primametoda:utilizareaExternalizable

Metoda2-a:cuvantulcheietransient:indicafaptulacelcampmarcatcutransientnuvafiserializatcasiparteaprocesuluiautomatdeserializare

Metoda3-a:seadaugalaclasemetodelewriteObjectsireadObjectincaresefurnizeazacodulprogramatoruluipentruserializare

AcestemetodesuntprivatesisuntapelateautomatdecatrewriteObjectsireadObjectaclaselorObjectOutputStreamsiObjectInputStream

19. Supraîncărcarea

Supraîncărcarea unei metode (owerloading) este procesul prin care în cadrul unei clase suntadăugatedouăsaumaimultemetodecuacelaşinumedarcunumărdiferitdeparametri.Înmomentulapelăriimetodei,mediulderularevaştiexactcemetodăsăapelezepebazaparametrilorspecificaţiastfelîncâtnuexistaposibilitatedeconfuziesideapelareauneimetodegreşite.

20. CuvântulcheiethisCuvântulcheiethisestefolositîncadrulmetodeloratuncicândsedoreştesăseaibăacceslareferinţaobiectuluicurent.Cuvântulcheiethisesteoreferinţăcătreobiectulcurent.Acestcuvântcheieestefolositdoarîncazurilespecialecândestenevoiesăsefacăoreferinţăexplicitălaobiectulcurent.Deexempluîncazuluneimetodecaretrebuiesăreturnezeobiectulcurent.

21. Cuvântulcheie„static”

Cuvântulcheie„static”estefolositînjavapentruadefiniovariabilăsauometodăcarepoatefiaccesataprinintermediulnumeluiclasei,fărăafinevoiesăseconstruiascăobiectedetipulrespectiv.În

8

construireauneiaplicaţiiorientatepeobiecteutilizareaatributelorsaumetodelorstaticetrebuiesăfieevitatăşiacesteasăfiefolositedoarîncazuridestrictănecesitate.

22. Claseşimetodeabstracte·o metodă se numeşteabstractădacă este doar declarată şi nu definită. Declaraţia va conţine,

obligatoriu,cuvântulcheieabstract:abstractnumemetoda();·oclasăceconţinemăcarometodăabstractădevineclasăabstractăşivatrebuicalificatăcaatare(în

cazcontrarseproduceoeroaredecompilare).Fiindoclasăincompletă,tentativadeacreaunobiectdetipabstract,sesoldeazăcueroare.

23. InterfaţaInterfaţaacoperănoţiuneadeclasăabstractăpură.Înaceastăsituaţiedefiniţiatipuluiesteprecedatădecuvântulcheieinterface,cevaînlocuicuvântulcheieclass.Prininterfaţăsepuneladispoziţieoformăşinuoimplementare.Eapoateconţine:·membridetipprimitiv(implicitstaticişifinali);·numedemetodecăroraliseataşează:

-listadeargumentedeapel;-tipurilereturnate

DesingpatternulProxy.Proxy:Unobiectsubstitut,transmisinloculunuiobiectreal,pentruafurnizaprelucrariaditionaleinaintedeatransmiteoperatiilecatreobiectulreal…Dynamicproxy:secreazaobiectulproxydinamicsisetrateazaapelurilecatremetodeleproxiedinmoddinamicDesignpatternulStrategy:-Creareauneimetodecaresaaibăcomportamentdiferitinfunctiedetipulargumentuluicareseprezintalaintrare;-Metodacontineopartefixacareesteapelatadefiecaredatasiopartecarevariază(strategia);-Incazulincarenuseutilizeazăinterfetele,dacădorimsăaplicămmetoda(strategia)unuiobiectdintr-oclasăcarenufacepartedinierarhie,nusepoate;-=>inexemplulApplysiProcesor,existaocuplarefoarteputernicaintremetodaApply.processiclasaProcesor,astfelincataceastametodanupoatefiaplicatadecatobiectelordinierarhiaProcesor,sinicidecumaltorobiectedinalteierarhii;Procesorsecreazacasiointerfata,iarclaselecaredorescsafacapartedinstrategievorimplementainterfatascrisaDesignpatternulAdapter:-sescriecodcarepreialaintrareinterfataexistentasicaresaproducainterfatadecareestenevoieinprogram;-Prindecuplareainterfeteideimplementaresepermitecaointerfatasafieaplicatamaimultorimplementari,decicoduldevinemultmaifacildereutilizatDesignpatternulFactoryMethod:-inlocsaseapelezeunconstructorinmoddirect,pentrucreareaunuiobiectseapeleazaometodadecreereaobiectuluidintr-oclasaFactory.ClasaFactoryimplementeazaointerfatacarespecificametodadecreere;-Astfel,sepoateschimbalaruntimeoimplementareauneifunctionalitaticualtaControlframeworks:-Applicationframework:unsetdeclaseproiectatesarezolveuntipanumedeproblemă(designpatternulTemplateMethod);-Pentruaplicareaapplicationframeworksemostenescdinclaseledebazasiseschimbaimplementareaprinoverriding;-Codulsuprascrisestecelcarecustomizeazasolutialacazulparticular;-TemplateMethod:continestructuradebazaaalgoritmului,iarpartilespecificesuntapelurilametodecarepotfioverride;-Astfel,seseparapartileneschimbatealealgoritmuluideceleflexibile;-Controlframework:untipparticulardeapplicationframeworkprincare

9

sistemulraspundelaevenimentelegenerate(sistemevent-driven)–deexempluGUIs;-InimplementareaControlframework,innerclasssuntutilizatepentruaexprimadiverseleactiuni(metodaaction)DesignpatternulDecorator:-Decoratorultrebuiesaaibaaceasiinterfatacuobiecteledecorate;-Decoratorulpoatesăextindainterfataacestorobiecte;-ClaseleFiltersuntradacinaabstractaaclaselordedecoratorObiect:unobiectareostare,uncomportamentsioidentitateClasă:setdeobiectecucaracteristicişifuncţionalitateidentice(termenuldeclasasesubstituitetermenuluidetip)Intefaţa:metode(funcţionalitate):cererilecarepotfiadresateunuiobiectparticulardintr-oclasaImplementarea:modconcretderealizareafuncţionalităţiiMoştenire:oclasănouăseaseamănă(extinde)oclasăexistentăMostenire–cumsediferentiazaclasaderivatadeclasadebaza?-Prinadaugaredenoimetodesuplimentare;-Schimbareacomportamentuluiunormetodeexistenteinclasadebaza(overriding);-Relatiais-a:clasaderivatadoaroverridemetodedinclasadebaza(principiulsubstitutieipure);-Relatiais-like-a:clasaderivataadaugaelementenoiinterfeteiclaseidebaza(metodelenoinusuntaccesibiledinclasadebaza–substitutianumaiestepura)Mosternireamultipla:-InJavasepoateextindeosinguraclasăsisepotimplementaoricateclase;-Rolulinterfetelor:sasepoatafaceupcastlamaimultdecatoclasadebaza;Dacasepoatecreaoclasadebazafaradefinitiidemetodesivariabilemembre,serecomandasasecreezeinterfeteinloculclaselorabstracte;-Interfetelesepotcombina(seextindeinterfetelelafelcasiclasele);-Coliziuneanumelorlaimplementareamaimultorinterfete(dacainterfeteledebazaauacelasinumedemetodacusemnaturidiferite):esteoproblemadacametodelediferadoarprintipdereturn=>eroarelacompilare;-Campurilecaresuntinserateintr-ointerfatadevininmodautomatstatissifinal=>reprezintaunmodconvenabilpentruadefiniconstante(similarcuenum);-Campuriledefiniteininterfetenupotfiblankfinals,eletrebuieinitializateladefinireContainere:Necesaredatoritafaptuluicanustimdeladesignnumaruldeobiectenecesarepentruarezolvaoanumitaproblema;-Containerelesuntsiruridereferintecatrealteobiecte;-Eleseexpandeazaautomatpentruasalvanoiobiecte,dupanecesitati;-2tipurideliste:ArrayList,LinkedList;-ContainereleinJavasuntcreatesapastrezeobiectedetipulObject.->elepotsalvaorice;-PotapareaexceptiilaDowncastlaruntime,timpdeexecutiecrescutdatorităoperațieideDowncastCreareaobiectelorsicicluldeviata:-Fiecareobiectnecesitaresurse(memorie),creareasidistrugereaobiectelordevinimportante;-Javautilizeazainmodexclusivalocareadinamicaamemoriei;-Pentruoriceobiect,trebuieutilizatnewlacreeere;-Obiectelesuntalocateinzonadeheap;-Distrugereaobiecteloresterealizataautomatdecatregarbagecollector;-GCidentificămomentulincareunobiectnumaiesteutilizatșiildezalocăOrganizareamemorieiinJava:-ZonaRegistru:registreleprocesorului,nuavemaccessdirectlaele;-Stiva:zonadestivamemoreazareferintelecatreobiecte;-Heap:inaceastazonasuntalocatetoateobiectele(laapelulnew);-Spatiudestocarenon-RAM:obiectecareexistainafaraspatiuluidememorieaprogramului(persistentaobiectelor)

10

Siruri(Arrays)inJava;-limbajdeprogramareorientatsafety;-LacreareaunuiArraysecreazaunsirdereferintefiecareinitializatalavaloareanull;-=>fiecaremembrualsiruluitrebuieinitializat;-Javanupermiteutilizareaunuiindiceinafararange-uluiarray-ului(searuncaoexceptie)Clase::classATypeName{/*classbody*/}Claselecontin:-Campuri;-MetodeModuldeaccesareaunuicamp/metodaobjectReference.memberPentrudateledintipuriprimitivesegaranteazainitializarealavaloriimplicite(falsesi0)Metode,argumentesitipdereturnReturnTypemethodName(/*argumentlist*/){/*methodbody*/}Operatori:-Totioperatoriiproducovaloareprinaplicarealor;-Eipotproducesiside-effects(modificareavaloriioperanzilor);-Aliasing:latransmitereaunuiobiectcasiargumentintr-ometoda,setransmiteoreferinta,decimodificareavaloriiinmetodaafecteazavaloareaobiectuluidinafarametodei;-Operatorii++si–auformapostfixatasiprefixata;-Operatorii==si=!Aplicatipereferintedeobiecte,comparareferintele,sinucontinutulobiectelorGarbagecollector-uldezalocamemoriaalocataprinnew,atuncicandobiectelenumaisuntfolosite;-colecteazamemoriaramasaalocatainobiectelecarenumaisuntutilizatesicompacteazaheap-ul,rearanjandobiectelealocate;-Stop-and-copy:GC-ulopresteprogramul,scaneazatoatereferinteledepestacksicopiazaobiecteleidentificateinnoulheap.Ceeaceramaneegarbage-ulcaretrebuiedezalocat,iarnoulheapedejacompactatMetodafinalize:-permiteoperatiidestergereinaintecaobiectelesafiesupusegarbagecollectorului;-Javanugaranteazaapelareaacesteimetode,programatorulnuarecontrolasupramomentuluicandseapeleazagarbagecollectorul;-Finalizeseutilizeazaingeneralpentruaimplementaterminationconditionspentruunobiect(deexempluinchidereaunuifisier)Specificatoriideaccesspublic,private,protected:-Accesslaniveldepackage:accesulimplicitalmembrilorcarenuauniciunspecificator;-Pentruclaseledinafarapackage-ului,acestimembriisuntconsideratiprivate;-Accesspublic:oriceclasadeoriundepoateaccesamembrulrespective;-Claselemostenite:potaccesamembriiprotecteddinclasadebaza,casicumacestiaarfimembriipublic;-Membriiprivate:potfiaccesatidoarinclasaincareaufostdefinite;-Interfataclaselor:public;-Implementareafunctionalitatilor:privateSintaxamostenirii:-Mostenireaserealizeazăoridecâteorisecreazăoclasă:semoșteneștedinObject;-Mostenire:clasanouăseaseamănăcuclasaveche:cuvântulcheieextends;-Clasanouăvapreluaautomattoatecampurileșimetodeledinclasadebază;-Regulănescrisălamostenire:câmpuriledinclaseledebazăsescriuprivateiarmetodeleselasăpublic(sauprotected)â;-Clasaderivatăpoatesăpreiaometodădinclasadebazăsisăorescrie;-Dinclasaderivată,pentruaseapelaometodădinclasadebazăsepoateutilizasuper;-Realizareamostenirii:lacreareaobiectuluidinclasaderivată,secreazăunsubobiectdinclasadebază(casicumarfirealizatăocompozitiecătreacesta);-Initializareasubobiectuluidinclasadebază:doarprinconstructor;-Constructorulclaseidebazăesteapelatintotdeaunainainteaconstructoruluiclaseiderivate;-Pentruapelconstructoralcldebazăcuargumente:super(argumente)Final:itemiifinal:nupotfischimbate(deexemplu,intr-oclasăderivata);-Datelefinal:ConstantelacompilarecarenuseschimbaulteriorValoriinitializatelaruntimecarenusedorestesafieschimbateStaticfinal:auosingurălocatiedestocareadatei;-Finalaplicatlaoreferinta:facereferintaconstantă,valoareaobiectuluipoatefimodificata;-Blankfinal:campurideclaratefinalcarenusuntinitializate->eletrebuieinitializateinaintedeutilzare;-Argumentefinal:înmetodănusepoateschimbavaloareacătrecarearată

11

referinta;-Metodefinal:nupotfischimbateprinmostenire;-Metodelefinalsunttratateinlinedecătrecompilator;-Clasefinal:seinhibămostenireadinclasarespectivăMecanismulupcast:-Asociereadintrenumelemetodeisicorpulmetodei–legare(binding);-Earlybinding:atuncicandlegareasefacelacompilare;-Latebinding:atuncicandlegareasefacelaexecutie,exactinaintedeexecutiaefectivaametodei;-Latebinding=dynamicbindingsauruntimebinding;-Latebinding:necesităunmecanismpentruidentificareatipuluilaexecutie(RTTI)–pentruaseidentificainmodcorectcorpulmetodeicaretrebuieapelat;-InJavaseutilizeazalatebindingpentruoriceapeldemetodă,cuexceptiametodelorstaticsifinal(privateeimplicitfinalptcaometodaprivatenupoatefimostenita);-Campurilesielementelestaticsuntrezolvatelacompilare;-LegareaconstructoriloresterealizatalacompilareIs-avs.Is-like-a:-Relatiedemosteniredetipis-a:clasaderivatădoarsuprascrieinterfațaclaseidebază;-Relatiedemosteniredetipis-like-a:clasaderivatăcontinemetodesuplimentarefațădeclasadebază;-Relațiadesubstituție:Laorelatiedetipis-asubstitutiaestepură:oricemesajtrimisclaseiderivatepoatefitrimissiclaseidebază(rezolvareamesajuluisefaceprinupcast)Laorelațiedetipis-like-a:parteaextinsădinclasaderivatănumaiestedisponibilăprinupcast(prinadresareaclaseidebază);-Downcast:operațiainversăupcast–nuesteooperațiegarantată,insensulincarenustimexactclasaderivatăcătrecaresefacedowncast;-Javaverificăoriceconversie(cast),sidacanusepoaterealizasearuncăoexceptiedetipulClassCastExceptionClaseabstracte:-RolulclaseiInstrument(varfulierarhiei):săcreezeointerfațăcomunăclaselorderivate;-=>obiecteledinclasaInstrumentnuausens(dpdvlogic);-=>clasaInstrument:clasăabstractă;-Pentruaevitaastfeldeerorilaexecutieexistăunmecanismprincaresedeclarăclaseleabstracte:cuvantulcheieabstract;-Clasăabstractă:arecelputinometodăabstractă(metodădeclaratăabstractsicarenuarecorp);-Segenereazăeroarelacompilaredacăseincearcăcreareaunuiobiectdintr-oclasăabstractă;-Lamosteniredintr-oclasăabstractă,metodaabstractătrebuiesuprascrisă,altfelclasaderivatădevinesieaabstractăInnerclasses:-Seplaseazaclaseininteriorulaltorclase;-Innerclassesreprezintaunconceptdiferitdecompozitie;-Deobicei,clasaexterioaraareometodacarereturneazaunobiectdinclasainner;-Tipulobiectuluidinclasainterioarasespecificaprecum:OuterClass.InnerClass;-Obiectulclaseiinterioareareunlink(referinta)catreobiectulclaseiexterioarecarel-acreat;-Obiectulclaseiinterioarepoateaccesamembriiobiectuluiclaseiexterioarefaracasafienevoiedecalificare(dreptuldeaaccesaesteasupratuturorobiectelormembrealeclaseiexterioare;-Pentruaseobtinereferintalaobiectulclaseiexterioare(dinobiectulclaseiinner)seutilizeaza:OuterType.this;-Pentruacreaunobiectdinclasainnerporninddelaunobiectdinclasaoutersepoateutiliza:obiectOuter.new;-Claseleinnersuntpotrivitepentruaimplementainterfete:serealizeazaascundereaimplementariiClosures&callbacks:Closure:unobiectapelabilcareretineinformatiedespredomeniuldevizibilitateincareafostcreat(areaccesslavariabileledindomeniuldevizibilitateundeafostcreat);-=>clasainterioaraesteunclosure(deoareceareoreferintacatreobiectulexteriorsipoatesaaccesezeinclusivmembriiprivatiaiclaseiexterioare)Callback:unobiectprimesteoinformatiecarevapermitesaapelamobiectulinitiallaunmomentulteriordetimp.Seimplementeazacuclaseinterioare.ClasadetipClosurefurnizeazaopoatăînintriorulclaseiexteriore(darintr-unmodsafe–nusenecesităcasatransformamaccesullametodeleacesteiclase)Iteratori:-

12

Esteundesignpattern;-Unobiectdetipiteratoresteasociatuneicolectiisipermiteregasireaordonataaobiectelordincolectiarespective;-Metodaiterator()auneicolectii;-Metodanext()aobiectuluiiterator:produceurmatorulelementdincolectie;-MetodahasNext():interogheazadacamaisuntelementeneiterate;-Metodaremove():stergeultimulelementiteratdincolectie;-Iteratoriipotproduceelementelecolectieidoarintr-osinguradirective;-ListIterator:furnizatdoardeinterfataList,poateparcurgeelementelecolectieiinambeledirectiiConceptuldeexceptie:indomeniuldevizibilitateundeapareeroareadeobiceinustimcumsatratameroarea,insastimcanuputemsăcontinuămcueroarea,astfelcătransmitemeroareasprerezolvarelaundomeniudevizibilitateexteriorObiectulClass:-JavarealizeazăRTTIprinintermediulobiectuluiClass;-Acestacontineinformatiereferitoarelatip,informatiecarepoatefiinterogată;-Pentrufiecareclasăpecareoaveminprogram,existăunobiectClassasociat;Lacompilareauneinoiclase,acestobiectestecreatsisalvatinfisierul.class;-Lacreareaunuiobiectdintr-oclasă,JVMutilizeazăunsubsistemnumitclassloader;ToateclaselesuntincarcateinmoddinamicdecătreJVMlaprimautilizareaacestora(anumecandsefaceprimareferintalaunmembrustaticalclasei);Laincarcareauneiclase,severificădacaobiectulClassaltipuluirespectivesteincarcat,dacanu,seidentificăfisierul.classpedisc,sioctetiiacestuiasuntverificatiinaintesăfieincarcatiSistemuldeI/Ointr-unlimbajdeprogramare:-SistemuldeI/Ointr-unlimbajdeprogramaretrebuiesăfiecapabilsătrateze:SursediferitededispozitivedeI/O(fisiere,consola,conexiunidereteaetc),Tipuridiferitedeaccesslasurse(accesssecvential,accessrandom,accessbuffered),Tipuridiferitedelucrucusursa(binar,laniveldecaracter,laniveldelinie,laniveldecuvant)ClasaFile:-Reprezintaunnumeaunuifisiersauunuisetdefisieredintr-undirector;-Metodalist()->produceunsirdeStringcarereprezintafisierelereferitedeobiectuldetipFile;-ListpoatefiinvocatautilizandunDirectoryFilter,pentruareturnadoaracelefisierepentrucarenumelerespectaunpattern;-InterfataFilenameFilter:metodaacceptprimestelaintrareobiectuldetipFilesistringulpentrucomparare.MetodalistdinFileapeleazametodaacceptpentrufiecarefisierdinFile,iaracestaesteinseratinlistadoardacaacceptfurnizeazatrue;-ObiectulFilepoatefiutilizatcasacreem/stergem/redenumimundirector/fisiersauundirector/fisiercuointreagacale;-Filepoatefiutilizatcasacitiminformatiilereferitoarelaunfisier/directorInputsiOutput:-Pentruintrare:claseleInputStreamsiReadercumetodaread;-Pentruiesire:claseleOutputStreamsiWritercumetodawrite;-Readsiwritelucreazapeocteti(sausirurideocteti);-ToateclaseledeI/Osuntderivatedinacestea;-LarealizareaefectivadeI/OprogramatoriicreazainsuruirideobiectedinclaseledeI/O(designpatternulDecorator)TipurideInputStream:-ByteArrayInputStream:permitecaunbufferdememoriesafieutilizatcasiunInputStream(dinbufferseextragocteti);-StringBufferInputStream:convertesteunStringintr-unInputStream;FileInputStream:sursadeintrareeunfisier.SefurnizeazalaconstruireaobiectuluifieunStringfieunFile;-PipedInputStream:esteasociatcuunPipedOutputStream(careestefurnizatlaconstruireaobiectului).ImplementeazaconceptuldePipe;-SequenceInputStream:convertesteunulsaumaimulteInputStreamintr-unsingurobiectdetipInputStream(laconstruiresefurnizeazafieunInputStream,fieunEnumeratordeobiecteInputStream);-FilterInputStream:clasaabstracta,interfatapentrudecoratoriicarefurnizeazatipuriparticularedecitireTipurideOutputStream:-ByteArrayOutputStream:creazaunbufferdememorie(octeti).Datelescrisesunttrimiseinacestbuffer;-FileOutputStream:iesireintr-unfisier.SeconstruiesteobiectulpebazaunuiStringsauaunuiFile;-PipedOutputStream:inconjunctiecuPipedInputStream.PentruconceptuldePipe;-FilterOutputStream:pentruiesireformatata,seimplementeazafunctionalitatidescriere

13

ReadersiWriter:-AdaugafunctionalitatepentruI/OlaniveldecaractersauUnicode;-ClaselesuntadaugateinierarhiaInputStreamsiOutputStreamdecinuseinlocuiesteaceastaierarhie;-Claseadapter:InputStreamReadersiOutputStreamWriter;-Motivulpentrucareaufostcreate:sasepermitainternationalizarea(Unicodelucreazacucaracterepe16biti);-Recomandare:saseutilizezeclasedetipReadersiWriteroridecateorieposibil;-Lacitirispecificelaniveldeoctet,saseutilizezeInputStreamsiOutputStreamSerializare:-Pastrareaobiectelordincolodeexecutiaprogramelor;-Astfelobiectelepotfirecuperatesiexecutiarestartatadelapunctulundeafostopritaanterior;-Oriceobiectdintr-oclasăcareimplementeazaSerializablepoateficonvertitinsirdeoctetisiapoirestaurat;-Persistentă:duratadeviataaunuiobiectexistadincolodeexecutiaunuiprogram;-Pentrurealizareapersistentei,obiecteletrebuieserializate/deserializateinmodexplicit(lightweightpersistence);-Pentruserializare,secreazăunobiectdintr-untipOutputStream,acestaeste“wrap”ininteriorulunuiObjectOutputStreamsiseutilizeazametodawriteObject;-Serializareasalveazaintregwebuldeobiectedinspateleobiectuluiserializat;-Tipulunuiobiectdeserializat:getClass

Externalize:-extindeinterfataSerializable;-LaobiecteledeserializatecuExternalizable,obiectelesuntconstruiteobisnuit(cudefaultconstructor)siapoiseapeleazametodareadExternal;-LaobiecteleExternalizable,subobiectelecomponentetrebuieserializatemanual(inwriteExternal)iarladeserializare,eletrebuierecuperatedepedisc;-Lamosteniredintr-oclasaExternalizable,seapeleazawriteExternalsireadExternalaclaseidebazapentruaseasiguraserializare/deserializarecorecta

DesingpatternulProxy:

1. Proxy:Unobiectsubstitut,transmisinloculunuiobiectreal,pentruafurnizaprelucrariaditionale

inaintedeatransmiteoperatiilecatreobiectulreal…

2. Dynamicproxy:secreazaobiectulproxydinamicsisetrateazaapelurilecatremetodeleproxiedin

moddinamic

DesignpatternulStrategy:

1. Creareauneimetodecaresaaibăcomportamentdiferit in functiede tipulargumentuluicarese

prezintalaintrare;

2. Metodacontineopartefixacareesteapelatadefiecaredatasiopartecarevariază(strategia);

3. Incazulincarenuseutilizeazăinterfetele,dacădorimsăaplicămmetoda(strategia)unuiobiect

dintr-oclasăcarenufacepartedinierarhie,nusepoate;-=>inexemplulApplysiProcesor,exista

ocuplarefoarteputernicaintremetodaApply.processiclasaProcesor,astfelincataceastametoda

nu poate fi aplicata decat obiectelor din ierarhia Procesor, si nicidecum altor obiecte din alte

14

ierarhii;Procesorsecreazacasiointerfata,iarclaselecaredorescsafacapartedinstrategievor

implementainterfatascrisa

DesignpatternulAdapter:

1. Sescriecodcarepreialaintrareinterfataexistentasicaresaproducainterfatadecareestenevoie

inprogram;

2. Prin decuplarea interfetei de implementare se permite ca o interfata sa fie aplicatamaimultor

implementari,decicoduldevinemultmaifacildereutilizat

DesignpatternulFactoryMethod:

1. Inlocsaseapelezeunconstructorinmoddirect,pentrucreareaunuiobiectseapeleazaometoda

decreereaobiectuluidintr-oclasaFactory.ClasaFactoryimplementeazaointerfatacarespecifica

metodadecreere;

2. Astfel,sepoateschimbalaruntimeoimplementareauneifunctionalitaticualta

Controlframeworks:

1. Applicationframework:unsetdeclaseproiectatesarezolveuntipanumedeproblemă(design

patternulTemplateMethod);-Pentruaplicareaapplicationframeworksemostenescdinclasele

debazasiseschimbaimplementareaprinoverriding;

2. Codulsuprascrisestecelcarecustomizeazasolutialacazulparticular;

3. TemplateMethod: contine structura de baza a algoritmului, iar partile specifice sunt apeluri la

metodecarepotfioverride;

4. Astfel,seseparapartileneschimbatealealgoritmuluideceleflexibile;

5. 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,innerclasssuntutilizatepentruaexprimadiverseleactiuni(metodaaction)

DesignpatternulDecorator:

1. Decoratorultrebuiesaaibaaceasiinterfatacuobiecteledecorate;

2. Decoratorulpoatesăextindainterfataacestorobiecte;

3. ClaseleFiltersuntradacinaabstractaaclaselordedecorator

Mostenire–cumsediferentiazaclasaderivatadeclasadebaza?

1. Prinadaugaredenoimetodesuplimentare;

15

2. Schimbareacomportamentuluiunormetodeexistenteinclasadebaza(overriding);

3. Relatiais-a:clasaderivatadoaroverridemetodedinclasadebaza(principiulsubstitutieipure);

4. Relatiais-like-a:clasaderivataadaugaelementenoiinterfeteiclaseidebaza(metodelenoinusunt

accesibiledinclasadebaza–substitutianumaiestepura)

Creareaobiectelorsicicluldeviata:

1. Fiecareobiectnecesitaresurse(memorie),creareasidistrugereaobiectelordevinimportante;

2. Javautilizeazainmodexclusivalocareadinamicaamemoriei;

3. Pentruoriceobiect,trebuieutilizatnewlacreeere;

4. Obiectelesuntalocateinzonadeheap;

5. Distrugereaobiecteloresterealizataautomatdecatregarbagecollector;

6. GCidentificămomentulincareunobiectnumaiesteutilizatșiildezalocă

Static:

1. Datelemembresimetodelepot fiaccesatedoarsubcalificareaunuiobiectcunoscut,existent in

memoniaprogramului(creatcunew).

2. Uncampsauometodastaticanuestelegatadeunobiectanumedintr-oclasa;

3. Uncampstaticexistaosinguradatapentruoclasa, fiindpartajatdecatre toateobiecteleclasei

respective;

4. Campurilestaticepotfireferiteprinnumeleclasei;

5. Metodelestaticesuntlaniveldeclasa,potfireferiteprinnumeleclaseifaraafinecesaraexistenta

unuiobiect;

6. Metodamain;

7. Metodelestaticenupotaccesacampuri/metodenestaticedinclasa.

8. Bloculstaticesteapelatosinguradata, laprimacreareaunuiobiectdinclasarespectivasau la

apelareauneimembrestaticedinaceaclasasipoatesainitializezedoardatestatice.

Operatori:

1. Totioperatoriiproducovaloareprinaplicarealor;

2. Eipotproducesiside-effects(modificareavaloriioperanzilor);

3. Aliasing: latransmitereaunuiobiectcasiargument intr-ometoda,setransmiteoreferinta,deci

modificareavaloriiinmetodaafecteazavaloareaobiectuluidinafarametodei;

16

4. Operatorii++si–auformapostfixatasiprefixata;

5. Operatorii==si=!Aplicatipereferintedeobiecte,comparareferintele,sinucontinutulobiectelor

Garbagecollector-ul:

1. dezalocamemoriaalocataprinnew,atuncicandobiectelenumaisuntfolosite;

2. colecteazamemoriaramasaalocatainobiectelecarenumaisuntutilizatesicompacteazaheap-ul,

rearanjandobiectelealocate;-Stop-and-copy:

3. GC-ulopresteprogramul,scaneazatoatereferinteledepestacksicopiazaobiecteleidentificatein

noulheap.Ceeaceramaneegarbage-ulcaretrebuiedezalocat,iarnoulheapedejacompactat

Sintaxamostenirii:

1. Mostenireaserealizeazăoridecâteorisecreazăoclasă:semoșteneștedinObject;

2. Mostenire:clasanouăseaseamănăcuclasaveche:cuvântulcheieextends;

3. Clasanouăvapreluaautomattoatecampurileșimetodeledinclasadebază;

4. Regulănescrisă lamostenire: câmpuriledinclaseledebazăse scriuprivate iarmetodele se lasă

public(sauprotected)â;

5. Clasaderivatăpoatesăpreiaometodădinclasadebazăsisăorescrie;

6. Dinclasaderivată,pentruaseapelaometodădinclasadebazăsepoateutilizasuper;

7. Realizareamostenirii:lacreareaobiectuluidinclasaderivată,secreazăunsubobiectdinclasade

bază(casicumarfirealizatăocompozitiecătreacesta);

8. Initializareasubobiectuluidinclasadebază:doarprinconstructor;

9. Constructorulclaseidebazăesteapelatintotdeaunainainteaconstructoruluiclaseiderivate;

10. Pentruapelconstructoralcldebazăcuargumente:super(argumente)

Sintaxacompoziției:

1. Seplaseazăoreferințăcătreunobiectnouîntr-oclasănouă

2. Referintelenoucreateseinitializeazălavaloareanull->trebuieinitializateexplicit

Operatiadedelegare:

1. Operatieintermediarăintrecompozitiesiagregare

2. Intr-oclasăseplaseazăunobiectmembrudina2-aclasă,iarclasanouăvaexpunetoatemetodele

furnizatedeobiectuldinclasa2-a

17

3. Pentru realizarea operatiilor demostenire / compozitie, este suficient ca să se importe clasele

reutilizate(codullorsursănuestenecesar)

Mecanismulupcast:

1. Asociereadintrenumelemetodeisicorpulmetodei–legare(binding);

2. Earlybinding:atuncicandlegareasefacelacompilare;

3. Latebinding:atuncicandlegareasefacelaexecutie,exactinaintedeexecutiaefectivaametodei;

4. Latebinding=dynamicbindingsauruntimebinding;

5. Latebinding:necesităunmecanismpentru identificareatipului laexecutie(RTTI)–pentruase

identificainmodcorectcorpulmetodeicaretrebuieapelat;

6. InJavaseutilizeazalatebindingpentruoriceapeldemetodă,cuexceptiametodelorstaticsifinal

(privateeimplicitfinalptcaometodaprivatenupoatefimostenita);

7. Campurilesielementelestaticsuntrezolvatelacompilare;

8. Legareaconstructoriloresterealizatalacompilare

Is-avs.Is-like-a:

1. Relatiedemosteniredetipis-a:clasaderivatădoarsuprascrieinterfațaclaseidebază;

2. Relatiedemosteniredetipis-like-a:clasaderivatăcontinemetodesuplimentarefațădeclasade

bază;

3. Relația de substituție: La o relatie de tip is-a substitutia este pură: orice mesaj trimis clasei

derivatepoatefitrimissiclaseidebază(rezolvareamesajuluisefaceprinupcast)Laorelațiede

tipis-like-a:parteaextinsădinclasaderivatănumaiestedisponibilăprinupcast(prinadresarea

claseidebază);

4. Downcast:operațiainversăupcast–nuesteooperațiegarantată,insensulincarenustimexact

clasaderivatăcătrecaresefacedowncast;

5. Java verifică orice conversie (cast), si daca nu se poate realiza se aruncă o exceptie de tipul

ClassCastException

Containere:

1. Necesaredatoritafaptuluicanustimdeladesignnumaruldeobiectenecesarepentruarezolvao

anumitaproblema;

2. Containerelesuntsiruridereferintecatrealteobiecte;

18

3. Eleseexpandeazaautomatpentruasalvanoiobiecte,dupanecesitati;

4. 2tipurideliste:ArrayList,LinkedList;

5. ContainereleinJavasuntcreatesapastrezeobiectedetipulObject.->elepotsalvaorice;

6. Pot aparea exceptii la Downcast la runtime, timp de executie crescut datorită operației de

Downcast

Cuvantulcheiethis:

1. In fiecare metoda apelata, referinta obiectului sub care se apeleaza metoda este transmisa in

metodasubformareferinteithis

2. thispoatefiutilizatdoarininteriorulmetodelorne-statice

3. Ininterioruluneimetodedinstr-oclasa,laapeluluneimetodedinclasacurenta,nuestenevoiesa

seutilizezethis

4. Thisestefrecventutilizatinreturn,pentruareturnaobiectulcurent

Claseabstracte:

1. Dintr-oclasaabstractanusepoateinstantianusepoateinstantiasifolosestedoarladezvoltarea

ulterioaraaunorclasecedescriuobiecteconcrete;

2. Potcontineobiectefaranicioimplementare;

3. Estedefinitaprincuvantulcheieabstract;

4. Puneladispozitiasubclaselorunmodelcompletpecaresa-limplementeze;

5. Nusepotcreaobiectedinclasaabstract=>eroarelacompilare;

6. Arecelputinometodaabstracta,careseimplementeazaintoatesubclasele.

Interfete:

1. Seimplementeazasimetodelenuaubloc;

2. Oclasacareimplementeazaointerfatatrebuieobligatoriusaspecificeimplementaripentrutoate

metodeleinterfetei;

3. Oclasapoateimplementamaimulteinterfete=superinterfeteseparateprinvirgula–mostenire

multipla;

4. Corpuluneiinterfetecontinevariabileconstante,implicitstaticsifinalcaretrebuieinitializate;

5. Metodele sunt implicit public si nu pot fi declarate cu nici un identificator pblic, private sau

protected;

19

Mosternireamultipla:

1. InJavasepoateextindeosinguraclasăsisepotimplementaoricateclase;

2. Rolulinterfetelor:sasepoatafaceupcastlamaimultdecatoclasadebaza

3. Dacasepoatecreaoclasadebazafaradefinitiidemetodesivariabilemembre,serecomandasase

creezeinterfeteinloculclaselorabstracte;-Interfetelesepotcombina(seextindeinterfetelelafel

casiclasele);

4. Coliziunea numelor la implementareamaimultor interfete (daca interfetele de baza au acelasi

numedemetoda cu semnaturi diferite): este oproblemadacametodelediferadoarprin tipde

return=>eroarelacompilare;

5. Campurilecaresuntinserateintr-ointerfatadevininmodautomatstatissifinal=>reprezintaun

modconvenabilpentruadefiniconstante(similarcuenum);

6. Campuriledefiniteininterfetenupotfiblankfinals,eletrebuieinitializateladefinire.

Innerclasses:

1. Seplaseazaclaseininteriorulaltorclase;

2. Innerclassesreprezintaunconceptdiferitdecompozitie;

3. Deobicei,clasaexterioaraareometodacarereturneazaunobiectdinclasainner;

4. Tipulobiectuluidinclasainterioarasespecificaprecum:OuterClass.InnerClass;

5. Obiectulclaseiinterioareareunlink(referinta)catreobiectulclaseiexterioarecarel-acreat;

6. Obiectulclaseiinterioarepoateaccesamembriiobiectuluiclaseiexterioarefaracasafienevoiede

calificare(dreptuldeaaccesaesteasupratuturorobiectelormembrealeclaseiexterioare;

7. Pentruaseobtinereferinta laobiectulclaseiexterioare(dinobiectulclasei inner)seutilizeaza:

OuterType.this;

8. Pentrua creaunobiectdin clasa innerpornindde launobiectdin clasaouter sepoateutiliza:

obiectOuter.new;

9. Clasele inner sunt potrivite pentru a implementa interfete: se realizeaza ascunderea

implementarii

Claseinterioareanonime:

1. Suntclaseinterioarefaranume(clasecreatedirectlamomentulutilizariilor)

2. finalizeazaconstructiainstructiuniicarecontinedefinitiaclaseianonime

20

3. Campuriledinclaseleanonimepotfiinitializatecuvaloridinafara(dindomeniulundesecreaza

clasa)

4. Daca intr-o clasa anonima se doreste a fi utilizat un argument (sau o valoare) definita in afara

acesteia,atuncireferintaacesteiatrebuiesafiefinal

5. Clasele anonimenupot avea constructor, dar initializarile se pot realiza in blocul non-static de

initializare

6. Clasele interioare pot fi create static (nested classes) daca nu se doreste utilizarea referintei

obiectuluiexteriorininteriorulclaseiinner

7. Clasele interioareparte aunei interfetedevin automat staticpublic.Rol: creareade cod comun

caresafieutilizatdetoateimplementarileinterfetei

8. Oricatdeadancaesteimbricareaclaselornested,acesteapotaccesaobiectelemembredinclasele

exterioare,indiferentdeniveluldeimbricare

9. La mostenire dintr-o clasa inner, trebuie furnizat la constructia obiectului un obiect din clasa

inner,pentruasepermiteconstruireasub-obiectuluicl.baza(enclosingClassReference.super()

)

10. Clasele locale unui domeniu de vizibilitate au access la toate variabilele domeniului respectiv

(inclusivcelefinal),insaacesteclasenuauspecificatordeaccess

Closure:

• unobiectapelabilcareretine informatiedespredomeniuldevizibilitate incarea fostcreat(are

access la variabileledindomeniul de vizibilitateunde a fost creat); -=> clasa interioara esteun

closure (deoarece are o referinta catre obiectul exterior si poate sa acceseze inclusiv membrii

privatiaiclaseiexterioare)

Callback:

• unobiectprimesteoinformatiecarevapermitesaapelamobiectulinitiallaunmomentulterior

detimp.Seimplementeazacuclaseinterioare.ClasadetipClosurefurnizeazaopoatăînintriorul

clasei exteriore (dar intr-unmod safe – nu se necesită ca sa transformam accesul lametodele

acesteiclase)

Iteratori:

1. Esteundesignpattern;

2. Unobiectdetip iteratoresteasociatuneicolectiisipermiteregasireaordonataaobiectelordin

colectiarespective;

21

3. Metodaiterator()auneicolectii;

4. Metodanext()aobiectuluiiterator:produceurmatorulelementdincolectie;

5. MetodahasNext():interogheazadacamaisuntelementeneiterate;

6. Metodaremove():stergeultimulelementiteratdincolectie;

7. Iteratoriipotproduceelementelecolectieidoarintr-osinguradirective;

8. ListIterator:furnizatdoardeinterfataList,poateparcurgeelementelecolectieiinambeledirectii

ObiectulClass:

1. JavarealizeazăRTTIprinintermediulobiectuluiClass;

2. Acestacontineinformatiereferitoarelatip,informatiecarepoatefiinterogată;

3. Pentrufiecareclasăpecareoaveminprogram,existăunobiectClassasociat;Lacompilareaunei

noiclase,acestobiectestecreatsisalvatinfisierul.class;

4. Lacreareaunuiobiectdintr-oclasă,JVMutilizeazăunsubsistemnumitclassloader;

5. ToateclaselesuntincarcateinmoddinamicdecătreJVMlaprimautilizareaacestora(anumecand

sefaceprimareferintalaunmembrustaticalclasei);

6. Laincarcareauneiclase,severificădacaobiectulClassaltipuluirespectivesteincarcat,dacanu,

seidentificăfisierul.classpedisc,sioctetiiacestuiasuntverificatiinaintesăfieincarcati

SistemuldeI/Ointr-unlimbajdeprogramare:

• 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

(accesssecvential,accessrandom,accessbuffered),Tipuridiferitedelucrucusursa(binar,lanivel

decaracter,laniveldelinie,laniveldecuvant)

ClasaFile:

1. Reprezintaunnumeaunuifisiersauunuisetdefisieredintr-undirector;

2. Metodalist()->produceunsirdeStringcarereprezintafisierelereferitedeobiectuldetipFile;

3. ListpoatefiinvocatautilizandunDirectoryFilter,pentruareturnadoaracelefisierepentrucare

numelerespectaunpattern;

4. InterfataFilenameFilter:metodaacceptprimestelaintrareobiectuldetipFilesistringulpentru

comparare.Metoda list din File apeleazametoda acceptpentru fiecare fisier din File, iar acesta

esteinseratinlistadoardacaacceptfurnizeazatrue;

22

5. Obiectul File poate fi utilizat ca sa creem/stergem/redenumim un director/fisier sau un

director/fisiercuointreagacale;

6. -Filepoatefiutilizatcasacitiminformatiilereferitoarelaunfisier/director

InputsiOutput:

1. Pentruintrare:claseleInputStreamsiReadercumetodaread;

2. Pentruiesire:claseleOutputStreamsiWritercumetodawrite;

3. Readsiwritelucreazapeocteti(sausirurideocteti);

4. ToateclaseledeI/Osuntderivatedinacestea;-LarealizareaefectivadeI/Oprogramatoriicreaza

insuruirideobiectedinclaseledeI/O(designpatternulDecorator)

TipurideInputStream:

1. ByteArrayInputStream:permitecaunbufferdememoriesafieutilizatcasiunInputStream(din

bufferseextragocteti);

2. StringBufferInputStream:convertesteunStringintr-unInputStream;

3. FileInputStream:sursadeintrareeunfisier.SefurnizeazalaconstruireaobiectuluifieunString

fieunFile;

4. PipedInputStream: este asociat cu un PipedOutputStream (care este furnizat la construirea

obiectului).ImplementeazaconceptuldePipe;

5. SequenceInputStream: convertesteunul saumaimulte InputStream intr-un singurobiectde tip

InputStream (la construire se furnizeaza fie un InputStream, fie un Enumerator de obiecte

InputStream);

6. FilterInputStream:clasaabstracta, interfatapentrudecoratoriicare furnizeaza tipuriparticulare

decitire

TipurideOutputStream:

1. ByteArrayOutputStream:creazaunbufferdememorie(octeti).Datelescrisesunttrimiseinacest

buffer;

2. FileOutputStream:iesireintr-unfisier.SeconstruiesteobiectulpebazaunuiStringsauaunuiFile;

3. PipedOutputStream:inconjunctiecuPipedInputStream.PentruconceptuldePipe;

4. FilterOutputStream:pentruiesireformatata,seimplementeazafunctionalitatidescriere

23

ReadersiWriter:

1. AdaugafunctionalitatepentruI/OlaniveldecaractersauUnicode;

2. Clasele sunt adaugate in ierarhia InputStream si OutputStream deci nu se inlocuieste aceasta

ierarhie;

3. Claseadapter:InputStreamReadersiOutputStreamWriter;

4. Motivul pentru care au fost create: sa se permita internationalizarea (Unicode lucreaza cu

caracterepe16biti);

5. Recomandare:saseutilizezeclasedetipReadersiWriteroridecateorieposibil;

6. Lacitirispecificelaniveldeoctet,saseutilizezeInputStreamsiOutputStream

Serializare:

1. Pastrareaobiectelordincolodeexecutiaprogramelor;

2. Astfelobiectelepotfirecuperatesiexecutiarestartatadelapunctulundeafostopritaanterior;

3. Oriceobiectdintr-oclasăcareimplementeazaSerializablepoateficonvertitinsirdeoctetisiapoi

restaurat;

4. Persistentă:duratadeviataaunuiobiectexistadincolodeexecutiaunuiprogram;

5. Pentru realizarea persistentei, obiectele trebuie serializate / deserializate in mod explicit

(lightweightpersistence);

6. Pentruserializare,secreazăunobiectdintr-untipOutputStream,acestaeste“wrap”ininteriorul

unuiObjectOutputStreamsiseutilizeazametodawriteObject;

7. Serializareasalveaza intregwebuldeobiectedinspateleobiectuluiserializat; -Tipulunuiobiect

deserializat:getClass

Externalize:

1. extindeinterfataSerializable;

2. La obiectele deserializate cu Externalizable, obiectele sunt construite obisnuit (cu default

constructor)siapoiseapeleazametodareadExternal;

3. La obiectele Externalizable, subobiectele componente trebuie serializate manual (in

writeExternal)iarladeserializare,eletrebuierecuperatedepedisc;

4. Lamostenire dintr-o clasa Externalizable, se apeleazawriteExternal si readExternal a clasei de

bazapentruaseasiguraserializare/deserializarecorecta

24

RTTI:

1. Run-TimeTypeIdentification

2. Descoperireatipuluilaexecutiesiutilizareaacestuia

3. 2tipurideRTTI:

-Traditional–lacompilare

-Reflection:-laexecutie!!!

4. Upcast:necesitărealizareaautomataaRTTIpentru invocareaautomată(polimorfică)ametodei

suprascrise

5. PrinRTTI se poate identifica tipul exact al unui obiect la executie (limbajul de programare are

metodepentruarealizaacestlucru)

Final:

1. declaracaoclasanupoateaccesasubclase

2. declarareaare2scopuri:

• securitate:unelemetodepotasteptacaparametruunobiectaluneiclasesinualuneisublcase,

dartipulexactalunuiobiectnupoatefiaflatcuexactitatedecatinmomentulexecutiei

• programareinspiritorientatobiect:oclasaperfectanutrebuiesaaibasubclase

Finalize:

• Esteometodaceseimplementeazainvedereaoricaruitipceincapsuleazaoresursanegestionata,

caretrebuiesasuportefinalizarea,adicaGCdeterminacaunobiecttrebuieeliminatedinmemorie

siapeleazametodaFinalizecareoferaresurseieliberareacorecta,colectareaacesteia

ExecutiaunuiblocTry-Catch-Finally:

1. Unbloctryesteurmatdemaimulteblocuricatchsioptionaldeunblocfinally

2. Blocultry-catchstalabazasistemuluidetratareaerorilor,oportiunedecodnupoatefi

monitrizatapentrutratareaexceptiilor,faraafiinclusaintr-unastfeldebloc

3. Dacaoexceptieestearuncatainblocultry,aceastaesteprinsainbloculcatch

corespunzator,dupacarebloculaceluicatchseexecuta

25

4. Finallyestefolositatuncicanddorimcaanumiteportiunidecodsaseexecuteindifferent

dacablocultrys-aexecutatnormalsauageneratoexceptie=>bloculfinallyseexecuta

indifferentdemodulincareblocultrysi-aterminatexecutia

Clauzathrows:

1. Dacaometodacontinecodcarearputeageneraoexceptie,sitotusi,incadrulmetodeinu

existauncodtry-catchcaresaprindaaceaexceptie=>metodatrebuiesaspecificeprinclauza

throwscapoategeneraaceaexceptie

2. NusesupunacesteireguliexceptiilecaresuntsubclasealeclaselorErrorsiRunTimeException

Clauzathrow:

• Pentruageneramanualoexceptieinurmauneistaripecareoconsiderameronata,folosim

cuvantulcheiethrow;

Polimorfism:

1. Acelasinumesepoatereferila2metodediferite.

2. Estede2feluri:

• Overriding–metodacuacceasisemnaturacuoaltadinclasaparinte;

• Overriding–douasaumaimultemetodeinacelasiclasacuacelasinume,darsemnaturidiferite.

Organizareacodului:

1. Pentrufiecareclasacompilataseproduceunfisier.class

2. Unprogramestecompusdintr-ocolectiedefisiere.class

3. Acesteapotfiarhivate:fisier.jar

4. Fiecarefisier.javaincepecumentiunea“package”:seindicanumelepackageuluidincarevorface

parteclasele

5. Claseleutilizatecarefacpartedinaltpackageseimportacu“import”

6. Toateclaseledintr-unpackagevorficolectateintr-unsingursubdirector

7. Conventiepentrudenumireapackageurilor:utilizareadomeniilordeinternetinordineinversa

8. Calearootpentrudirectorare:variabilasistemCLASSPATH

9. CLASSPATHpoateincludedirectoaresaufisiere.jar

26

1. DesignpatternulProxyEstesablonulcarepermitecreareaunuiinlocuitorpentruunobiect,inlocuitorcaresacontrolezeaccesullaobiectulrespectiv.Acestsablonsemainumestesurogat.

SablonulProxyseaplicaingeneralinsituatiileincareestenecesaraoreferintalaunobiectmaicomplexasimaiflexibiladecatunsimplupointer.CatevadintrecazurileincaresablonulProxypoatefiutilizatsunt:

necesitateaunuireprezentantlocalalunuiobiectaflatinaltspatiudeadrese(pealtamasina)decatclientulsau.Inacestcazobiectulproxycarejoacarolulreprezentantuluilocalsemainumesteremoteproxysauambasador;

crearealacomandaaobiectelorcostisitoare(cumestecazuldinexemplulprezentatinparagrafulanterior).Inacestcazobiectulproxysemainumesteproxyvirtual,eldandiluziaexistenteiunuiobiectserverinaintecaacestasafifostcreat;

dacasepuneproblemacadiversiclientisaaibedrepturideaccesdiferitelaunanumitobiectserver,sepoatefolosicateunobiectproxycaresareprezinteserveruldinperspectivafiecareicategoriideclienti.Inacestcaz,obiectulproxysemainumesteproxydeprotectie;

unobiectproxypoatejucarolulunuipointerinteligent,carepoateefectuaoperatiisuplimentarelaaccesareaobiectuluireferit.Asemeneaoperatiisuplimentaretipicesunt:

o contorizareareferintelorlaunanumitobiect,existentelaunmomentdat.Acestlucrupermitestergereaobiectuluirespectivcandseconstatacanumaiexistanicioreferintalael.Deexemplu,ungarbagecollectorarputeautilizaacestprincipiudelucru;

o incarcareainmemorieaunuiobiectpersistentatuncicandelestereferitprimaoara;

o asigurareablocariiobiectuluireferit,pedurataaccesariilui,astfelincatsanupoatafimodificat

ŞablonulProxyasigurăunsurogatsauunînlocuitor

pentrualtobiectpentruacontrolaaccesullaacesta

lDelegarealadistanţăcontroleazăaccesulcătreunobiectnelocal

lDelegareavirtualăcontroleazăaccesullaoresursăcostisitordecreat

lDelegareadeprotecţiecontroleazăaccesullaoresursăpebazaunordrepturideacces

lReferinţăinteligentă:copierealascriere(copyonwrite),blocareaunuiobiect,numărareareferinţelor,caching

25.DesignpatternulIterator

27

¢ SablonulIteratorasiguraocaledeaccesaresecventialaaelementelorunuiobiectagregat,faraaexpunereprezentarealuidebaza.

lMetodeleIteratoruluipotaveanumediferite

lJavaIterator:next(),hasNext(),remove()

lC#IEnumerator:Current,MoveNext(),Reset()

lExistăIteratoriinternişiexterni

lIteratorulexternestecontrolatdeclient,caînexemplulprecedent(cumetodanext)

lIteratorulinternestecontrolatdeIteratorulînsuşi,căruiatrebuiesăisespunăceoperaţiisăefectuezecuelementelepecareleparcurge

Şablonulseutilizeazăpentru:

lAaccesaconţinutulunuiobiectagregatfărăaexpunereprezentareainternă

lAasigurasuportpentrumaimultetraversărialeobiecteloragregate

lAfurnizaointerfaţăuniformăpentrutraversareastructuriloragregatediferite

lPentruasuportaoiteraţiepolimorfică

Suportăvariaţiiîntraversareaunuiagregat

lObiecteleagregatepotfitraversateînmaimultefelurişidemaimulteori

lObiecteleIteratorsimplificăinterfaţaAgregat

lAgregatularenevoiedeometodăunicăpentrucreareaIteratorului

lScadecuplareadintreclientşiobiecteleagregate

lCreştecoeziuneaobiectuluiagregatprineliminareanecesităţiideaasiguraelînsuşitraversarea

26.DesignpatternulStrategyScop:Sedefineşteofamiliedealgoritmi;seîncapsuleazăfiecaremebru;algoritmiisefacinterschimbabili.Aplicabilitate–Multeclaseînruditediferădoarprincomportament–Sefolosescdiversevariantealeunuialgoritm–Algoritmiifolosescdateirelevantepentruclient–Oclasădefineştecomportamentemultiple,definitedeconditiigardălaînceputulmetodelor.

28

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

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

O clasa reprezinta o modalitate de a descrie un nou tip de date. 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

3. Ce este un package?

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

4. Defineste final, finally finalize.

Final- o clasa declarata cu final nu poate fi subclasata. O clasa declarata ca final opreste linia de mostenire, nu se poate extinde o clasa finala. O metoda declarata cu final nu poate fi suprascrisa.O variabila declarata cu final poate fi initializata numai o singura data. 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.Este utilizat pentru a evita . 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 obiesct sa fie luat de garbage colector

29

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

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

30

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.

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

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

Biblioteca Java I/O are o structura stratificata care permite sporirea "responsabilitatilor" unor obiecte individuale intr-un mod dinamic si transparent. De exemplu, am putea dori saimbogatim un input stream de baza, care opereaza doar la nivel de octet sau sir de octeti, cu posibilitatea de a citi tipuri primitive: input stream-ul nostru ar putea citi 4 octeti deodata, pe care sa-i intoarca sub forma unui int.

Acest mod de a crea o structura de clase este cunoscuta sub numele de Decorator Pattern. Acest pattern impune ca obiectele care adauga functionalitate (wrappers) unui obiect anume sa aibe aceeasi interfata. Astfel, folosirea decoratorilor poate fi transparenta, in sensul ca putem folosi un obiect in aceeasi maniera, indiferent daca a fost decorat sau nu. Clasele filtru, de baza (ca FilterInputStream), sunt punctul de plecare pentru clasele decorator din Java I/O.

In concluzie, clasele de baza in ierarhia I/O octet devin:

§ InputStream, OutputStream: pentru definirea de stream-uri de baza, corespunzatoare unor entitati I/O § FilterInputStream, FilterOutputStream: pentru definirea de stream-uri decorator, care isi vor baza

intotdeauna functionalitatea pe un alt stream (underlying), care, la randul sau, poate fi decorat sau nu.

31

Un exemplu de decorator, foarte des intalnit, este al claselor DataInputStream/DataOutputStream, care permit citirea de tipuri primitive din alte fluxuri octet, oferind metode ca readByte,readInt, readFloat, readBoolean, si omoloagele lor, writeByte, writeInt etc.

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

n Termination: eroarea este aruncata n Resumption: se insereaza cod try – catch pt rezolvarea erorii

32

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

33

ele sunt mai greu de citit si de extins

12. 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();

34

while (it.hasNext()) { //verificari asupra elementului curent: it.next(); it.remove(); }

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

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

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

35

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 -

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

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

36

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

19. 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. Cuvântul cheie this este o referinţă către obiectul curent. Acest cuvânt cheie este folosit doar în cazurile speciale când este nevoie să se facă o referinţă explicită la obiectul curent. De exemplu în cazul unei metode care trebuie să returneze obiectul curent.

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

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

22. 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 23. Design patternul Proxy

37

Estesablonulcarepermitecreareaunui inlocuitorpentruunobiect, inlocuitorcaresacontrolezeaccesullaobiectulrespectiv.Acestsablonsemainumestesurogat.

Sablonul Proxy se aplica in general in situatiile in care este necesara o referinta la un obiect mai complexa si mai flexibila decat un simplu pointer. Cateva dintre cazurile in care sablonul Proxy poate fi utilizat sunt:

necesitatea unui reprezentant local al unui obiect aflat in alt spatiu de adrese (pe alta masina) decat clientul sau. In acest caz obiectul proxy care joaca rolul reprezentantului local se mai numeste remote proxy sau ambasador;

crearea la comanda a obiectelor costisitoare (cum este cazul din exemplul prezentat in paragraful anterior). In acest caz obiectul proxy se mai numeste proxy virtual, el dand iluzia existentei unui obiect server inainte ca acesta sa fi fost creat;

daca se pune problema ca diversi clienti sa aibe drepturi de acces diferite la un anumit obiect server, se poate folosi cate un obiect proxy care sa reprezinte serverul din perspectiva fiecarei categorii de clienti. In acest caz, obiectul proxy se mai numeste proxy de protectie;

un obiect proxy poate juca rolul unui pointer inteligent, care poate efectua operatii suplimentare la accesarea obiectului referit. Asemenea operatii suplimentare tipice sunt:

o contorizarea referintelor la un anumit obiect, existente la un moment dat. Acest lucru permite stergerea obiectului respectiv cand se constata ca nu mai exista nici o referinta la el. De exemplu, un garbage collector ar putea utiliza acest principiu de lucru;

o incarcarea in memorie a unui obiect persistent atunci cand el este referit prima oara;

o asigurarea blocarii obiectului referit, pe durata accesarii lui, astfel incat sa nu poata fi modificat

Şablonul Proxy asigură un surogat sau un înlocuitor

pentru alt obiect pentru a controla accesul la acesta

l Delegarea la distanţă controlează accesul către un obiect nelocal

l Delegarea virtuală controlează accesul la o resursă costisitor de creat

l Delegarea de protecţie controlează accesul la o resursă pe baza unor drepturi de acces

l Referinţă inteligentă: copierea la scriere (copy on write), blocarea unui obiect, numărarea referinţelor, caching

38

25.Design patternul Iterator

¢ Sablonul Iterator asigura o cale de accesare secventiala a elementelor unui obiect agregat, fara a expune reprezentarea lui de baza.

l Metodele Iteratorului pot avea nume diferite

l Java Iterator: next(), hasNext(), remove()

l C# IEnumerator: Current, MoveNext(), Reset()

l Există Iteratori interni şi externi

l Iteratorul extern este controlat de client, ca în exemplul precedent (cu metoda next)

l Iteratorul intern este controlat de Iteratorul însuşi, căruia trebuie să i se spună ce operaţii să efectueze cu elementele pe care le parcurge

Şablonul se utilizează pentru:

l A accesa conţinutul unui obiect agregat fără a expune reprezentarea internă

l A asigura suport pentru mai multe traversări ale obiectelor agregate

l A furniza o interfaţă uniformă pentru traversarea structurilor agregate diferite

l Pentru a suporta o iteraţie polimorfică

Suportă variaţii în traversarea unui agregat

l Obiectele agregate pot fi traversate în mai multe feluri şi de mai multe ori

l Obiectele Iterator simplifică interfaţa Agregat

l Agregatul are nevoie de o metodă unică pentru crearea Iteratorului

l Scade cuplarea dintre client şi obiectele agregate

l Creşte coeziunea obiectului agregat prin eliminarea necesităţii de a asigura el însuşi traversarea

26. Design patternul Strategy

39

Scop: Se defineşte o familie de algoritmi; se încapsulează fiecare mebru; algoritmii se fac interschimbabili. Aplicabilitate – Multe clase înrudite diferă doar prin comportament – Se folosesc diverse variante ale unui algoritm – Algoritmii folosesc date irelevante pentru client – O clasă defineşte comportamente multiple, definite de conditii gardă la începutul metodelor.