TP rez

11
Polimorfism-Obiecte de diferite tipuri folosesc aceleaşi metode (în fapt cu aceeaşi semnătură darimplementări diferite) Ex:class Animal{ public String caracteristica(){ return"necunoscuta"; } } class Soarece extends Animal{ public String caracteristica(){ return"are culoarea gri"; } } class Pisica extends Animal{ public String caracteristica(){ return"miauna";} } class Caine extends Animal{ public String caracteristica(){ return"latra";} } public class Polimorfism Ex{ public static void main(String args[]){ Animal a =new Soarece(); System.out.println("Caracteristi ca primului animal: "+a.caracteristica()); a =new Caine(); System.out.println("Caracteristi ca primului 2 animal: "+a.caracteristica());}} Overloading si Overriding: Metoda Overloading şi metoda Overriding sunt două concepte importante în Java, care permit programatorului Java a declara metode cu acelaşi nume, dar un comportament diferit. Metodele se bazează pe polimorfism în Java. Diferenta intre Overloading si Overriding este ca in cazul metodei Overloading semnatura metodei se schimba iar in cazul lui Overriding ramane aceeasi. Alta diferenta intre ele este ca metoda Overloading o poti aplica in clase iar Overriding doar in subclase.

Transcript of TP rez

Polimorfism-Obiecte de diferite tipuri folosesc aceleai metode (n fapt cu aceeai semntur darimplementri diferite)Ex:class Animal{public String caracteristica(){return"necunoscuta"; }}class Soarece extends Animal{public String caracteristica(){return"are culoarea gri";} }class Pisica extends Animal{public String caracteristica(){return"miauna";} }class Caine extends Animal{public String caracteristica(){return"latra";} }public class Polimorfism Ex{public static void main(String args[]){Animal a =new Soarece();System.out.println("Caracteristi ca primului animal: "+a.caracteristica());a =new Caine();System.out.println("Caracteristi ca primului 2 animal: "+a.caracteristica());}}

Overloading si Overriding:Metoda Overloading i metoda Overriding sunt dou concepte importante n Java, care permitprogramatorului Java a declara metode cu acelai nume, dar un comportament diferit. Metodele sebazeaz pe polimorfism n Java. Diferenta intre Overloading si Overriding este ca in cazul metodeiOverloading semnatura metodei se schimba iar in cazul lui Overriding ramane aceeasi. Alta diferentaintre ele este ca metoda Overloading o poti aplica in clase iar Overriding doar in subclase.

Diferenta intre Java si C++Limbajul Java foloseste aceleasi instructiuni cu limbajul C, mai putin instructiunea goto. Tipurile de date primitive sunt aproape aceleasi, plus tipul boolean, care a schimbat si sintaxa instructiunilor care testeaza conditii. Diferentele importante apar la tipurile de date derivate (vectori, structuri, pointeri) si la structura programelor. In limbajul C exista un singur fel de comentarii, care incep prin perechea de caractere '/*' si se termina prin perechea de caractere '*/'.In C++ au aparut, in plus, comentarii care incep prin perechea de caractere '//' si se termina la sfarsitul liniei in care apare acel comentariu. Java preia aceste doua feluri de comentarii, la care se adauga comentarii destinate generarii automate a documentatiilor programelor (cu ajutorul programului javadoc); aceste comentarii incep printr-un grup de 3 caractere '/**' si se termina la fel cu comentariile C, prin '*/'.In Java nu exista operatorul sizeof din C, pentru determinarea memoriei ocupate de un tip sau de o variabila, pentru ca nu este necesar acest operator (nici chiar pentru alocare dinamica de memorie). Cea mai importanta diferenta dintre Java, pe de o parte, si limbajele C, C++ pe de alta parte, este absenta tipurilor pointer din Java. Deci nu exista posibilitatea de a declara explicit variabile pointer si nici operatorii unari & (pentru obtinerea adresei unei variabile) si * (indirectare printr-un pointer). Operatorul new pentru alocare dinamica din C++ exista in Java, dar are ca rezultat o referinta si nu un pointer. In Java nu exista declaratia typedef deoarece definirea unei clase introduce automat un nume pentru un nou tip de date. In Java nu exista operatorul sizeof , pentru ca lungimea variabilelor este cunoscuta, iar la alocarea de memorie (cu new) nu trebuie specificata dimensiunea alocata. Compilatorul Java nu are preprocesor, deci nu exista directivele preprocesor atat de mult folosite in C si in C++ : #define, #include, etc.

Mostenirea este un mecanism care permite crearea unor versiuni "specializate" ale unor clase existente (de baza). Mostenirea este folosita in general atunci cand se doreste construirea unui tip de date care sa reprezinte o implementare specifica (o specializare oferita prin clasa derivata) a unui lucru mai general. Un exemplu simplu ar fi clasa Dacia care mosteneste clasa Masina.Mostenire-se refera la posibilitatea de a crea o clasa copil, care are la baza o alta clasa parinte, astfel incat clasa copil stie sa faca tot ceea ce stie parintele, plus o serie de alte elemente care sunt proprii doar clasei copil.Ex: class Rectangle {publicint width, height;public Rectangle (int width, int height) {this.width = width;this.height = height;}publicint circumference () { return (width + height) * 2; }}class Square extends Rectangle {Square (int x) {super (x, x); // cheam constructorul super-clasei}}Square square = new Square (3);

Clone-se foloseste pentru crearea unei copii bit cu bit identice ale obiectului;Ex:public Location implements Cloneable {public Object clone () {Location answer;try {answer = (Location)super.clone (); // typecast} catch (CloneNotSupportedException e) {throw new RuntimeException ("class not cloneable");}return answer;}}

Compozitie-contine o clasa ,procedeu folosit cand clasa defineste noi comportamente bazandu-se pe mai multe clase;Ex: class Geometric {public Rectangle r;public Square s;public Geometric (int width, int height) {r = new Rectangle (width, height);s = new Square (width);}publicint circumference () {returns.circumference () + r.circumference ();}

Exceptii program n JavaO exceptie program este o situatie anormal aprut la executia unei functii si carepoate avea cauze hardware sau software. Exceptiile pot fi privite ca evenimenteprevizibile, ce pot apare n anumite puncte din program si care afecteaz continuareaprogramului, prin abatere de la cursul normal.Existenta exceptiilor este un mare avantaj al limbajului Java, pentru c permitesemnalarea la executie a unor erori uzuale, prin mesaje clare asupra cauzei si loculuiunde s-a produs eroarea, evitnd efectele imprevizibile ale acestor erori (n C, de ex.).Exceptiile Java sunt de dou categorii:- Exceptii care nu necesit interventia programatorului (numite "RuntimeExceptions"), dar care pot fi interceptate si tratate de ctre programator. Dac nu sunttratate, aceste exceptii produc afisarea unui mesaj referitor la tipul exceptiei siterminarea fortat a programului. Aceste exceptii corespund unor erori grave care nupermit continuarea executiei si care apar frecvent n programe , cum ar fi: erori deindexare a elementelor unui vector (indice n afara limitelor), utilizarea unei variabile13referint ce contine null pentru referire la date sau la metode publice, mprtire prinzero, conversie prin "cast" ntre tipuri incompatibile, s.a.- Exceptii care trebuie fie tratate, fie "aruncate" mai departe, pentru c altfelcompilatorul marcheaz cu eroare functia n care poate apare o astfel de eroare("Checked Exceptions": exceptii a cror tratare este verificat de compilator).Acesteexceptii corespund unor situatii speciale care trebuie semnalate si tratate, dar nuproduc neaprat terminarea programului. Astfel de exceptii care nu constituie erorisunt : detectare sfrsit de fisier la citire, ncercare de extragere element dintr-o stivsau din alt colectie vid, ncercarea de a deschide un fisier inexistent, s.a.

Diagrama de secven (sequence diagram)n limbajul UML colaborarea ntre elemente se cerceteaz n aspectul informativ al comunicaiilorlor, adic obiectele care interacioneaz fac schimb de informaie anumit. Pentru modelareacolaborrii ntre obiecte n limbajul UML se utilizeaz diagramele de secven. Vorbind despreaceste diagrame se iau n consideraie dou aspecte.Mai nti, colaborarea ntre obiecte poate fi cercetat n timp i atunci pentru reprezentareaparticularitilor temporale i modului de acceptare a mesajelor se utilizeaz diagrama de secven.n al doilea rnd pot fi cercetate particularitile structurale ale colaborrii ntre obiecte. Pentrureprezentarea particularitilor de transmitere i acceptare a mesajelor ntre obiecte se utilizeazdiagrama de colaborare.

Ce sunt colectsiile ?O colectie este un obiect care grupeaza mai multe elemente ntr-o singura unitate.Tipuri de date reprezentate: vectori liste inlantuite stive multimi matematice tabele de dispersie, etc.Tipul de date al elementelor dintr-o colectie este Object.Arhitectura colectiilor Interfete: tipuri abstracte de date. Implementari: tipuri de date reutilizabile. Algoritmi polimorifici: functionalitate reutilizabila.Avantaje: Reducerea efortului de programare Cresterea vitezei si calitatii programului

Clase abstracte n JavaO superclas este o generalizare a tipurilor definite prin subclasele sale; deexemplu, tipul Number este o generalizare a tipurilor clas numerice (Double, Float,Integer, Short, Byte). Uneori superclasa este att de general nct nu poate precizanici variabile si nici implementri de metode, dar poate specifica ce operatii (metode)ar fi necesare pentru toate subclasele sale. In astfel de cazuri superclasa Java este fie oclas abstract, fie o interfat.O metod abstract este declarat cu atributul abstract si nu are implementare. Eaurmeaz a fi definit ntr-o subclas a clasei (interfetei) care o contine. Metodeleabstracte pot apare numai n interfete si n clasele declarate abstracte.O clas care contine cel putin o metod abstract trebuie declarat ca abstract, darnu este obligatoriu ca o clas abstract s contin si metode abstracte. O clasabstract nu este instantiabil, dar ar putea contine metode statice utilizabile.In Java avem dou posibilitti de a defini clase care contin doar metode statice si,ca urmare, nu pot fi instantiate (nu pot genera obiecte):- Clase ne-abstracte, cu constructor private, care mpiedic instantierea;- Clase abstracte, care nici nu au nevoie de un constructorSpre deosebire de interfete, clasele abstracte pot contine si variabile.O clas abstract este de multe ori o implementare partial a unei interfete, carecontine att metode abstracte ct si metode definite. Exemplu:public interface Collection { // declara metode prezente in orice colectieint size(); // dimensiune colectieboolean isEmpty(); // verifica daca colectia este goala // alte metode}public abstract class AbstractCollection implements Collection {public abstract int size(); // metoda abstractapublic boolean isEmpty ( return size()==0;} // metoda implementata}

Interfete JavaO interfat Java ar putea fi considerat ca o clas abstract care nu contine dectmetode abstracte si, eventual, constante simbolice. Totusi, exist deosebiri importantentre interfete si clase abstracte n Java.Metodele declarate ntr-o interfat sunt implicit publice si abstracte.De exemplu, interfata mai veche Enumeration contine dou metode comuneoricrei clase cu rol de enumerare a elementelor unei colectii :

public interface Enumeration {boolean hasMoreElements(); // daca mai sunt elemente in colectieObject nextElement(); // elementul curent din colectie}

Enumerarea unor obiecte poate fi privit ca o alternativ la crearea unui vector cuobiectele respective, n vederea prelucrrii succesive a unui grup de obiecte.O clas (abstract sau instantiabil) poate implementa una sau mai multe interfete,prin definirea metodelor declarate n interfetele respective.Dintre clasele care implementeaz aceast interfat, sunt clasele enumerator pevector si enumerator pe un tabel de dispersie Hashtable. Ulterior s-au adugat metodedin aceast interfat si clasei StringTokenizer, care face o enumerare a cuvintelordintr-un text:public class StringTokenizer implements Enumeration {. . .public boolean hasMoreElements() {return hasMoreTokens();}public Object nextElement() {return nextToken();}}

Operatii cu siruri de caractere1.1 Clasa StringIn Java, String este o clasa elementara care ofera functiile de baza pentru manipularea sirurilor de caractere.Ca utilizare, aceasta clasa se foloseste pentru compararea a doua siruri de caractere, extragerea de subsiruri, determinarea lungimii unui sir sau alte operatii care vor fi descrise mai jos.1.1.1 Instantierea unui obiect StringString str = text;sauString str = new String( text );sauchar data[] = {t, e, x, t}; String str = new String( data );1.1.2 Cateva operatii uzuale str.charAt( 1 ) - ntoarce caracterul de la pozitia 1 str.contact( str2 ) - concatenarea de siruri str.equals( str2 ) - verificarea egalitatii str.indexOf( str2 ) - determina pozitia de nceput a subsirului str2 n sirul str1 str.length() - determina lungimea siruluiOperatoul + introduce posibilitatea concatenarii de siruri astfel:str = str1 + str2;1.2 Clasa StringBufferEste asemanatoare cu clasa String, doar ca ofera operatii mai complexe cu ajutorul carora se poate modifica continutul sirului.1.2.1 Instantierea unui obiect StringBufferStringBuffer str = new StringBuffer( abc );sauStringBuffer str = new StringBuffer()

Copierea,clonareaunui obiect consta in obtinerea unui duplicat al unei anumite instante. Aceasta instanta duplicat va fi identica cu prima in momentul clonarii acesteia (valorile atributelor).Spre deosebire de alte limbaje, inJavastatement-ulClasa c2 = c1;

nu rezulta in realizarea unei copii a obiectuluic1, ci in atribuirea aceleiasi referinte amanduror obiectelor (intrucat Java nu dispune de constructori de copiere impliciti). Asadar, orice modificare realizata asupra luic1se va reflecta inc2si invers.Java pune la dispozitia dezvoltatorilor o modalitate facila de obtinere a copiilor unui obiect. Cel mai simplu mod de realizare a clonelor (dar nu neaparat si cel mai elegant) consta in implementarea interfetei marker Cloneable si suprascrierea metodeiObject.clone(..).Intr-adevar, utilizarea metodeiclone(..)in vederea clonarii obiectelor prezinta anumite dezavantaje. In primul rand, este important de inteles ca interfataCloneableeste o interfata marker (marker interface). Implementarea efectiva a functionalitatii se face suprascriind (override) metodaObject.clone(). Asadar, sunt doua elemente ce trebuie luate in calcul: implementarea unei (anumite) interfete si suprascrierea unei metode (apartinand unei alte clase). Unul dintre principalele dezavantaje este imposibilitatea apelarii acestei metode cand sunt implementate interfete. Intrucat metodaclone(..)apartine clasei Object, este necesara specificarea prototipului acesteia in orice interfata, incalcand astfel principiul incapsularii si marind nivelul de duplicare al codului.De asemenea, aceasta structura (marker + overriding) complica treaba cand vine vorba de implementare a functionalitatii de clonare a claselor 3rd party, intrucat este necesara suprascriereaclone()in intreaga ierarhie a claselor.In cazul in care dezavantajele utilizariiclone(..)par a prezenta un obstacol serios in calea scrierii de cod corect, exista o serie de modalitati alternative de realizare a clonelor obiectelor ce pot fi luate in calcul. Una dintre aceste alternative la utilizarea metodeiclone(..)ar fi folosirea capacitatilor de serializare (Serializable API) ale Java. Utilizand aceasta modalitate, este posibila realizarea deep copy-urilor intr-un mod elegant. De asemenea, o alta alternativa demna de luat in calcul ar fi utilizarea unui constructor de copiere (copy constructor).

CompozitiaCompoziia este procesul de construire a unei clase prin adugarea n cadrul acesteia a unuia sau mai multor obiecte.EXEMPLU:classTV{RemoteControlrc;Displayd;ElectronicBoardeb;booleabstateintsize;....voidturnOn(){...}voidturnOFF(){...}}EXEMPLU:classPersoana{Stringnume;Adresaadresa;...}n exemplele anterioare clasele TV i Persoana conin referine ctre alte obiecte i exemplific conceptul de compoziie.