Sunteți pe pagina 1din 126

1.

Fie urmtoarea clas Java:


class C { int a; float x; boolean b; }

Stabilii care dintre urmtoarele instruciuni este corect: a) b) c) d)


C C C C ob ob ob ob = = = = new new new new C(1); C(1,1.0); C(); C(1,1.0,true);

2. Fie urmtorul program Java:


class C { public static int a=1; } public class test { public static void main(String[] args) { C ob=new C(); C.a++; ob.a++; System.out.println(C.a); } }

Dup executarea programului, va fi afiat valoarea: a) b) c) d) 3; 2; 1; nicio valoare, deoarece programul este incorect sintactic i nu va putea fi executat.

3. Fie urmtorul program Java:


class C { public static int a=1; } public class teste_grila { public static void main(String[] args) { C ob1=new C(); C ob2=new C(); ob1.a++; System.out.println(ob2.a); } }

Dup executarea programului, va fi afiat valoarea: a) b) c) d) 0; 2; 1; nicio valoare, deoarece programul este incorect sintactic i nu va putea fi executat.

4. Un program Test scris n limbajul Java poate fi compilat folosind comanda: a) b) c) d) javac Test java Test.java javac Test.class javac Test.java

5. Un program Test scris n limbajul Java i compilat, poate fi rulat folosind comanda: a) b) c) d) javac Test.java java Test java Test.class java Test.java

6. n Java o clas poate extinde: a) b) c) d) cel mult o interfa oricte clase cel mult o clas oricte interfee

7. n Java o interfa poate extinde: a) b) c) d) cel mult o interfat oricte interfee cel mult o clas oricte clase

8. n Java o clas poate implementa: a) b) c) d) o clas oricte clase o interfa oricte interfee

9. Fie urmtorul program Java:


class A { public A() { System.out.println("A"); } } class B extends A { public B() { System.out.println("B"); }

} class C extends B { public C() { System.out.println("C"); } } public class test { public static void main(String[] args) { C ob=new C(); } }

Dup executarea programului, se va afia: a) b) c) d) ABC A CBA C

10. Fie urmtorul program Java:


class A { public int x=1; public A() { x++; } } class B extends A { public B() { x++; } } class C extends B { public int x=1; public C() { x++; } } public class test { public static void main(String[] args) { B b=new B(); C c=new C(); System.out.println(b.x+" "+c.x); } }

Dup executarea programului, se va afia: a) b) c) d) 3 3 2 3 4 2 2 3

11. Fie urmtorul program Java:


class A { int x=0; public A(int n) { x=n; } } class B extends A { int x=1; public B(int n) { super(n); } } public class test { public static void main(String[] args) { A a=new A(5); B b=new B(7); System.out.println(a.x+" "+b.x); } }

Dup executarea programului, se va afia: a) b) c) d) 0 5 5 0 5 1 7 1

12. Fie urmtorul program Java:


interface Student { public void afisare(); } class Student_1 implements Student { String nume; int grupa; public Student_1(String n, int g) { nume=n; grupa=g; } public void afisare() { System.out.print(nume+" "+grupa+" "); } } class Student_2 extends Student_1 implements Student { String curs; int nota; public Student_2(String ns, int g, String c, int n) { super(ns,g);

curs=c; nota=n; } public void afisare() { .................................. System.out.println(curs+" "+nota); } } public class test { public static void main(String[] args) { Student_2 s=new Student_2("Popescu",314,"Java",10); s.afisare(); } }

Dup executarea programului, pentru a se afisa Popescu 314 Java 10, spaiile punctate din metoda afisare a clasei Student_2 trebuie nlocuite cu: a) b) c) d)
afisare(); Student_1.afisare(); super.afisare();

nimic, deoarece se apeleaz automat metoda afisare a clasei Student_1.

13. Fie urmtorul program Java:


interface Student { public void afisare(); } class Student_1 implements Student { String nume; int grupa; public Student_1(String n, int g) { nume=n; grupa=g; } public void afisare() { System.out.print(nume+" "+grupa+" "); } } class Student_2 extends Student_1 implements Student { String curs; int nota; public Student_2(String ns, int g, String c, int n) { ....... curs=c; nota=n; } public void afisare() { super.afisare();

System.out.println(curs+" "+nota); } } public class test { public static void main(String[] args) { Student_2 s=new Student_2("Popescu",314,"Java",10); s.afisare(); } }

Dup executarea programului, pentru a se afia Popescu 314 Java 10, spaiile punctate din constructorul Student_2 al clasei Student_2 trebuie: a) s fie nlocuite cu instruciunea super(ns,g); b) s fie nlocuite cu instruciunile nume=ns; grupa=g; c) nu trebuie nlocuite cu nimic, deoarece se apeleaz automat constructorul Student_1 al clasei Student_1; d) nu pot fi nlocuite cu nimic, deoarece programul fiimd incorect pentru ca metoda afisare a interfeei Student este implementat n dou clase diferite, Student_1 i
Student_2.

14. Fie urmtoarele declaraii n Java:


interface Patrat { public float aria(); public float perimetru(); } class Patrat_1 implements Patrat { float L; public Patrat_1(float x) { L = x; } public float aria() { return L*L; } } class Patrat_2 extends Patrat_1 implements Patrat { public Patrat_2(float L) { this.L = L; } public float perimetru() { return 4*L; } }

Stabilii care dintre urmtoarele propoziii sunt adevrate: a) definiia clasei Patrat_1 este incorect deoarece nu implementez metoda perimetru a interfeei Patrat; b) constructorul clasei Ptrat_2 este incorect deoarece nu are acces la pointerul this; c) constructorul clasei Ptrat_2 este incorect deoarece nu are apeleaz constructorul superclasei Patrat_1; d) definiia clasei Patrat_2 este incorect deoarece nu implementez metoda aria a interfeei Patrat.

15. Fie urmtorul program Java:


interface Patrat { float L = 0; public float aria(); public float perimetru(); } class Patrat_1 implements Patrat { float L = 5; public Patrat_1(float x) { L = x; } public float aria() { return L*L; } public float perimetru() { return 4*L; } } public class teste_grila { public static void main(String[] args) { Patrat p = new Patrat_1(10); System.out.println(p.aria() + p.perimetru()); } }

Stabilii care dintre urmtoarele propoziii sunt adevrate: a) programul este incorect deoarece n funcia main se instaniaz o interfa, ci nu o clas; b) programul este corect i dup rulare va afia 140.0; c) programul este incorect deoarece n clasa Patrat_1 se redefinete ca i data membru constanta L din interfaa Patrat; d) programul este corect i dup rulare va afia 100.0 40.0. 16. Fie urmtorul program Java:
interface Patrat { public float A(); public float P(); } interface Dreptunghi { public float A(); public float P(); } class Patrulater_1 implements Patrat,Dreptunghi { float L; public Patrulater_1(float x) { L=x; } public float A() { return L*L; } public float P() { return 4*L; }

} class Patrulater_2 implements Patrat, Dreptunghi { float L,l; public Patrulater_2(float x, float y) { L=x; l=y; } public float A() { return L*l; } public float P() { return 2*(L+l); } } public class teste_grila { public static void main(String[] args) { Dreptunghi d = new Patrulater_1(10); Patrat p = new Patrulater_2(10,20); System.out.println(d.A()+" "+d.P()+" "+p.A()+" "+p.P()); } }

Stabilii care dintre urmtoarele propoziii sunt adevrate: a) programul este incorect deoarece apare un conflict de nume pentru ca n interfeele Patrat i Dreptunghi sunt definite metode cu aceiasi signatura, iar clasele Patrulater_1 i Patrulater_2 implementeaz fiecare ambele interfee; b) programul este incorect deoarece n interfeele Patrat i Dreptunghi sunt definite metodele A i P cu aceiasi signatura, iar clasele Patrulater_1 i Patrulater_2 implementeaz fiecare n mod diferit cele dou metode; c) programul este corect i dup rulare va afia 100.0 40.0 200.0 60.0; d) programul este incorect deoarece n funcia main i se atribuie instanei d a interfeei Dreptunghi un obiect din clasa Patrulater_1 , iar instanei p a interfeei Patrat un obiect de tip Patrulater_2 (care, de fapt, abstractizeaz noiunea de dreptunghi). 17. Considerm urmtorul program Java:
class C { int a,b; public C(int x, int y) { a=x; b=y; f(); g(); } void f() { while(a<b) { b=b-2*a; a=a+b/10; System.out.println(a+" "+b); } } void g() { System.out.println(a+" "+b); }

} public class test { public static void main(String[] args) { C ob = new C(5,100); } }

Dup executarea programului, pe ecran se va afia: a) b) c) d) 20 -22 22 22 35 10 5 100

18. Considerm urmtorul program Java:


class C { int a,b; public C(int x, int y) { a=x; b=y; } void f() { if(a<b) { a++; b--; g(); } } void g() { if(b>=a) { a++; b--; f(); } } void afisare() { System.out.println(a+" "+b); } } public class teste_grila { public static void main(String[] args) { C ob = new C(2,10); ob.f(); ob.g(); ob.afisare(); } }

Dup executarea programului, pe ecran se va afia: a) b) c) d) 5 6 2 7 7 6 10 5

19. Considerm urmtorul program Java:


class C { static int x = 0; static int f() { return (++x)*(x--); } } public class teste_grila { public static void main(String[] args) { System.out.println(C.f()+" "+C.f()+" "+C.f()); } }

Dup executarea programului, pe ecran se va afia: a) b) c) d) 1 1 1 0 1 2 2 0 1 3 6 0

20. Considerm urmtorul program Java:


class C { static int x=0; static void f() { x = (++x)*(x--); System.out.print(x+" "); } } public class teste_grila { public static void main(String[] args) { C.f();C.f();C.f(); } }

Dup executarea programului, pe ecran se va afia: a) b) c) d) 0 1 1 2 0 0 4 25 -1 1 4 16

21. Un fir de execuie poate intra n starea "blocat" (blocked) astfel: a) b) c) d) prin apelul metodei sleep(); automat de ctre sistemul de operare; prin apelul metodei block(); prin apelul metodei wait().

22. Prin modalitatea sa de tratare a excepiilor, Java are urmtoarele avantaje fa de mecanismul tradiional de tratare a erorilor: a) b) c) d) exist o metod care se ocup de acest lucru; separarea codului pentru tratarea unei erori de codul n care ea poate sa apar; propagarea unei erori pna la un analizor de excepii corespunztor; gruparea erorilor dupa tipul lor.

23. O subclas a unei clase abstracte poate fi instaniat numai dac: a) se folosete cuvantul cheie abstract; b) suprascrie fiecare metod declarat abstract n superclasa sa i furnizeaza implementri pentru toate acestea; c) se folosete motenirea multipl; d) subclas abstract nu poate fi instaniat. 24. Care este rolul declaraiilor import? a) b) c) d) Permite referirea claselor fr utilizarea de prefixe; Permite importul imaginilor folosite; Elimin necesitatea declarrii variabilelor; Elimin apelurile directe ale funciilor fr clase.

25. Indicai pe care dintre sistemele de operare urmtoare pot fi rulate aplicaiile Java: a) b) c) d) Windows UNIX Mac OS X Linux

Programare orientata pe obiecte ORGANIZARE

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

Programare orientata pe obiecte

19 February 2011

Programare orientata pe obiecte ORGANIZARE Introducere in Java

Introducere in Java

Java este o tehnologie inovatoare lansata de compania Sun Microsystems in 1995. Caracteristici principale: limbaj compilat si interpretat Programele Java sunt mai intai compilate in fisiere intermediare (byte code) dupa care sunt interpretate in mediul de executie Java. limbaj independent de platforma Masina virtuala Java (JVM) este mediul de executie al limbajului Java. JVM este inglobata in platforma JDK (Java Develoment Kit) Simplitate Elimina suprancarcarea operatorilor, mostenirea multipla, renunta la utilizarea variabilelor pointer; Complet orientat obiect Este modelat dupa C si C++.

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java.

Tipuri de date Controlul executiei


19 February 2011

Programare orientata pe obiecte ORGANIZARE


In tehnologia Java sunt cuprinse patru componente:

Introducere in Java
1. Masina virtuala, denumita JVM (Java Virtual Machine) care interpreteaza fisierele cu extensia .class ce contine bytecode.

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

2. Limbajul Java propriu-zis. Limbajul Java este orientat pe obiecte si se aseamana din punct de vedere al sintaxei cu C++. 3. Un compilator care genereaza fisiere cu extensia .class. Compilatorul Java traduce instructiunile scrise in limbajul Java (stocate in fisiere cu extensia .java) in instructiuni generice bytecode(stocate in fisiere cu extensia .class) care sunt intelese de masina virtuala. 4. Biblioteca de clase Java. Contine un set de componente utile care pot fi reutilizate in diverse aplicatii informatice.

19 February 2011

Programare orientata pe obiecte ORGANIZARE

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

19 February 2011

Programare orientata pe obiecte ORGANIZARE

Tipuri de aplicatii Java

Introducere in Java

1). Aplicatii de sine statatoare (stand alone);


2). Aplicatii care se executa pe partea de client (appleturi); 3). Aplicatii care se executa pe partea de server (servleturi); Aplicatii de sine statatoare: - sunt programe care pot fi executate in afara contextului unui browser Web. - contine o clasa de baza declarata public iar denumirea acesteia coincide cu numele fisierului; - in cadrul clasei publice trebuie incapsulata functia principala main () cu sintaxa : public static void main (Strings args[])

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

19 February 2011

Programare orientata pe obiecte ORGANIZARE


Crearea oricarei aplicatii Java presupune efectuarea urmatorilor pasi: 1. Scriererea codului sursa - se pote utiliza orice editor obisnuit sau un mediu specializat (NetBeans, Eclipse)

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

2. Salvarea fisierelor sursa - se va face in fisiere care au obligatoriu extensia java. Este recomandat ca fisierul care contine codul sursa al clasei primare sa aiba acelasi nume cu cel al clasei.

19 February 2011

Programare orientata pe obiecte ORGANIZARE

Introducere in Java

3. Compilarea aplicatiei - pentru compilare se utilizeaza compilatorul javac din distributia JDK. Apelul compilatorului se face pentru fisierul ce contine clasa principala a aplicatiei sau pentru orice fisier cu extensia java prin comanda: javac nume.java In cazul in care compilarea a reusit va fi generat fisierul nume.class. 4. Rularea aplicatiei - se realizeaza cu interpretorul java, apelat pentru unitatea de compilare corespunzatoare clasei principale cu comanda java nume Rularea unei aplicatii care nu foloseste interfata grafica, se va face intr-o fereastra sistem.

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

19 February 2011

Programare orientata pe obiecte ORGANIZARE

Structura fisierelor sursa


- toate fisierele sursa trebuie sa se termine cu extensia .java;

Introducere in Java

- un fisier sursa trebuie sa contina cel putin o definitie a unei clase de baza publice . - un fisier sursa poate contine un numar nelimitat de definitii de clase; Exista trei elemente care pot sa apara in fisierul sursa: - declaratii de pachete; - instructiuni de includere clase; - definitii de clase.

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

19 February 2011

Programare orientata pe obiecte ORGANIZARE


Un pachet este o multime de clase pastrate in aceelasi director. Exista mai multe pachete de baza cum ar fi : java.io, java.lang, java.applet, java.awt ; Declararea unui pachet : package <nume_pachet> Se poate importa fie un pachet fie doar o clasa dintr-un pachet existent asfel: import nume_pachet.*; import nume_pachet.nume_clasa;

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

19 February 2011

Programare orientata pe obiecte ORGANIZARE

Structura lexicala a limbajului Java

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

Atomi lexicali : set de caractere, literali, separatori, operatori, cuvinte rezervate. Setul de caractere - limajul Java utilizeaza setul de caractere Unicode care foloseste pentru reperezentarea caracterelor 2 octeti (65536 de semne); - setul de caractere Unicode este divizat in subintervale numite blocuri : Basi Latin, Greek, Ghotic etc. ) Literali - sunt reprezentarea codului sursa a unui tip primitiv, String sau nul.

19 February 2011

Programare orientata pe obiecte ORGANIZARE

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

Literari Intregi Sunt acceptate 3 baze de numeratie : baza 10, 16, 8 si pot fi de doua tipuri: normali - se reprezinta pe 4 octeti (32 biti) lungi - se reprezinta pe 8 octeti (64 biti) Literari Flotanti : reprezentare pe 32 de biti sau pe 64 de biti (pentru tipul double) Literari Logici : sunt reprezentati prin valorile true , false. Literari Caracter : reprezentarea se face fie folosind o litera, fie o secventa escape scrisa ntre apostrofuri ( \n, \t, \b etc.)

19 February 2011

Programare orientata pe obiecte ORGANIZARE


2. Operatori Introducere in Java atribuirea = operatori matematici: +, -, *, /, %, ++, -- . operatori logici: &&(and), ||(or), !(not) Structura unui fisier sursa operatori relationali: <, <=, >, <=, ==, != Structura lexicala a limbajului Java. Tipuri de date Controlul executiei operatori pe biti: &(and), |(or), ^ (xor), ~ (not) operatori de translatie: <<, >>, >>> (shift la dreapta fara semn) operatorul + pentru concatenarea sirurilor: sir 1 +sir2

Tipuri de aplicatii Java

19 February 2011

Programare orientata pe obiecte ORGANIZARE Tipuri de date si variabile


1. Tipuri de date Introducere in Java In Java tipurile de date se impart in doua categorii: tipuri primitive si tipuri referinta. Tipuri primitive aritmetice intregi: byte (1 octet), short (2), int (4), long (8) reale: float (4 octeti), double (8) caracter: char (2 octeti) logic: boolean (true si false) Tipuri de referinta vectorii; clasele; interfetele; Valoarea unei variabile de acest tip este o referinta (adresa de memorie) .
19 February 2011 1

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

Programare orientata pe obiecte ORGANIZARE


Variabile Variabilele pot fi de tip primitiv sau referinte la obiecte (tip referinta). Declararea variabilelor: Tip numeVariabila;

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

Initializarea variabilelor: Tip numeVariabila = valoare; Declararea constantelor: final Tip numeVariabila;

19 February 2011

Programare orientata pe obiecte ORGANIZARE In functie de locul in care sunt declarate, variabilele se impart in urmatoatele categorii: a.Variabile membre, declarate in interiorul unei clase, b.Parametri metodelor, vizibili doar in metoda respectiva. c.Variabile locale, declarate intr-o metoda, vizibile doar in metoda respectiva. d.Variabile locale, declarate intr-un bloc de cod, vizibile doar in blocul respectiv.

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

19 February 2011

Programare orientata pe obiecte ORGANIZARE

Controlul executiei
Instructiuni de decizie; Instructiuni de salt; Instructiuni pentru tratarea exceptiilor: try-catch-finally, throw Alte instructiuni: break, continue, return, label. 1. Instructiuni de decizie a). if-else

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

19 February 2011

Programare orientata pe obiecte ORGANIZARE b). switch-case switch (variabila) { case valoare1:break; case valoare2:...break; default:... } Variabilele care pot fi testate folosind instructiunea switch nu pot fi decat de tipuri primitive. 2. Instructiuni de salt - for , while, do- while

Introducere in Java

Tipuri de aplicatii Java Structura unui fisier sursa Structura lexicala a limbajului Java. Tipuri de date Controlul executiei

19 February 2011

Programare orientata pe obiecte ORGANIZARE

Definirea claselor

Programare orientata pe obiecte

Ciclul de viata al unui obiect

Domeniul de vizibilitate al membrilor unei clase

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Definirea claselor

Definirea claselor Ciclul de viata al unui obiect

in Java este obligatorie definirea a cel putin unei clase (clasa de baza); nu este obligatorie crearea unei instante a clasei de baza, caz in care se vor utiliza date si metode statice.

Domeniul de vizibilitate al membrilor unei clase

Sintaxa unei clase: [modificator] class NumeClasa {// Corpul clasei}

4 March 2011

Programare orientata pe obiecte ORGANIZARE


Modificatorii pot fi: - public : poate fi folosita din orice alta clasa, indiferent de pachetul in care se gaseste. - abstract : este incomplet definita ; nu poate fi instantiata, fiind folosita doar pentru a crea un model comun pentru o serie de subclase. - final : nu se mai pot defini subclase. Domeniul de vizibilitate al membrilor unei clase Obs : daca modificatorul lipseste, clasa este implicita si poate fi folosita doar de clasele din aflate in accelasi pachet.

Definirea claselor

Ciclul de viata al unui obiect

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Corpul unei clase

Definirea claselor

Declararea si, eventual, initializarea variabilelor de instanta si de clasa (variabile membre). Declararea si implementarea constructorilor;

Ciclul de viata al unui obiect

Declararea si implementarea metodelor de instanta si de clasa (metode membre). Declararea unor clase imbricate (interne). Observatie : implementarea metodei unei clase trebuie sa se faca obligatoriu in corpul clasei.

Domeniul de vizibilitate al membrilor unei clase

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Declararea datelor membre

Definirea claselor

Variabilele membre ale unei clase se declara de obicei inaintea metodelor. O variabila se declara astfel: [modificatori] Tip numeVariabila [ = valoareInitiala ]; unde un modificator poate fi : un modificator de acces : public, protected, private unul din cuvintele rezervate: static, final; Static : variabila este de clasa si nu de instanta; static tip variabilaClasa; Final : indica faptul ca valoarea variabilei nu mai poate fi schimbata (declararea constantelor ). final double PI = 3.14 ;

Ciclul de viata al unui obiect

Domeniul de vizibilitate al membrilor unei clase

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Constructorii unei clase

Definirea claselor

- sunt metode speciale care au aceelasi nume cu cel clasei, nu returneza nici o valoare si sunt folosite pentru initializarea obiectelor clasei; - o clasa poate avea mai multi constructori care trebuie sa difere prin lista argumentelor; - daca in clasa nu se declara nici un constructor, sistemul ii creaza automat un constructor implicit.

Ciclul de viata al unui obiect

Domeniul de vizibilitate al membrilor unei clase

Tipuri de constructori: - fara argumente; - cu argumente;

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Declararea metodelor

Definirea claselor

- Metodele sunt responsabile cu descrierea comportamentului unui obiect. - Metodele se pot gasi doar in cadrul claselor. O metoda se declara astfel: [modificatori] TipReturnat numeMetoda ( [argumente] ) {// Corpul metodei} unde un modificator poate fi : un specificator de acces : public, protected, private . unul din cuvintele rezervate: static, abstract, final.

Ciclul de viata al unui obiect

Domeniul de vizibilitate al membrilor unei clase

4 March 2011

Programare orientata pe obiecte ORGANIZARE


static : metoda este de clasa si nu de instanta; Definirea claselor abstract : metoda care nu are implementare si trebuie obligatoriu sa faca parte dintr-o clasa abstracta; final : metoda nu mai poate fi supradefinita in subclasele clasei in care a fost definita. In limbajul Java argumentele sunt transmise doar prin valoare - daca argumentul are tip primitiv de date, metoda nu ii poate schimba valoare decat local; - daca argumentul este de tip referinta, metoda nu poate modifica valoarea referintei obiectului .

Ciclul de viata al unui obiect

Domeniul de vizibilitate al membrilor unei clase

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Ciclul de viata al unui obiect


1. Crearea obiectelor Crearea obiectelor se realizeaza prin instantierea unei clase si implica urmatoarele lucruri: Declararea Presupune specificarea tipului acelui obiect, cu alte cuvinte specificarea clasei acestuia NumeClasa numeObiect; Instantierea Se realizeaza prin intermediul operatorului new si are ca efect crearea efectiva a obiectului cu alocarea spatiului de memorie corespunzator. numeObiect = new NumeClasa();

Definirea claselor

Ciclul de viata al unui obiect

Domeniul de vizibilitate al membrilor unei clase

4 March 2011

Programare orientata pe obiecte ORGANIZARE


2. Folosirea obiectelor Obiectul creat poate fi folosit in urmatoarele sensuri: aflarea unor informatii despre obiect, schimbarea starii sale sau executarea unor actiuni. obiect.NumeVariabila sau obiect.NumeMetoda Observatie : programare orientata pe obiecte descurajeaza folosirea directa a variabilelor unui obiect , in schimb, pentru fiecare variabila se pot definii metode care sa permita schimbarea/aflarea valorilor (set_variabila si get_variabila). obiect. x=3; // setare inconstienta obiect.set_x =3; //metode setter

Definirea claselor

Ciclul de viata al unui obiect

Domeniul de vizibilitate al membrilor unei clase

4 March 2011

Programare orientata pe obiecte ORGANIZARE


3. Distrugerea obiectelor - in limajul Java programele nu mai au responsabilitatea distrugerii obiectelor. - in momentul rularii unui program , simultan cu interpretatorul Java , ruleaza un proces care se ocupa cu distrugerea obiectelor numit garbage collector (dispus pe platforma de lucru Java ). - un obiect este eliminat din memorie atunci cand nu mai exista nici o referinta la acesta. Domeniul de vizibilitate al membrilor unei clase

Definirea claselor

Ciclul de viata al unui obiect

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Domeniul de vizibilitate al variabilelor si metodelor membre Exista patru niveluri de acces : public, pretected, implicit si private. O variabila/metoda membra de clasa se poate accesa doar daca tipul de clasa este accesibil. a). daca membrul este declarat public se permite accesul de oriunde; b). daca membrul este declrat protected atunci accesul este permis doar daca: - accesul este cerut din pachetul clasei in care este declarat; - accesul apare dintr-o subclasa a clasei. c). daca membrul este declarat private atunci accesul este permis doar in cadrul clasei; d). daca membrul este implicit accesul este permis doar din pachetul in care este declarat tipul.

Definirea claselor

Ciclul de viata al unui obiect

Domeniul de vizibilitate al membrilor unei clase

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Definirea claselor

Ciclul de viata al unui obiect

Domeniul de vizibilitate al membrilor unei clase

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Extinderea claselor Polimorfism

Programare orientata pe obiecte

Modificatori de acees

Variabile si metode de instanta si de clasa

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Extinderea claselor
- Java permite doar mostenirea simpla, ceea ce ineamna ca o clasa poate avea un singur parinte (superclasa).

Extinderea claselor - o clasa poate avea un numar nelimitat de subclase; Polimorfism - mumtimea claselor definite in Java poate fi vazuta ca un arbore; - radacina arborelui este clasa Object din pachetul java.lang Sintaxa extinderii: class clasa1 extends clasa2, unde clasa1 este subclasa si clasa2 este superclasa.

Modificatori de acees

Variabile si metode de instanta si de clasa

4 March 2011

Programare orientata pe obiecte ORGANIZARE

- relatia de derivare a claselor este tranzitiva. Extinderea claselor Polimorfism class C1{int x;} class C2 extends C1{int y;} C1 este clasa derivata din clasa Object si este supercalasa pentru clasa C2. Clasa C2 este subclasa directa a clasei C1 si subclasa indirecta a clasei Object.

Modificatori de acees

Variabile si metode de instanta si de clasa

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Clasa Object
- in limbajul Java, clasa Object este superclasa pentru toate clasele. Clasa Object defineste si implementeaza comportamentul comun al tuturor celorlalte clase Java prin metode specifice: returnarea clasei din care face parte un obiectul curent getclass( ) reprezentarea obiectiului curent intr-un String. toString( )

Extinderea claselor Polimorfism

Modificatori de acees

Variabile si metode de instanta si de clasa

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Constructorii subclaselor

Extinderea claselor Polimorfism

Instantierea unui obiect din clasa extinsa implica instantierea unui obiect din clasa parinte. Fiecare constructor al subuclasei trebuie sa aiba un constructor cu aceeasi signatura in parinte sau sa apeleze explicit un constructor al clasei extinse . Apelul explicit al unui constructor din superclasa se realizeaza cu expresia: super([argumente])

Modificatori de acees

Variabile si metode de instanta si de clasa

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Polimorfism
supraincarcarea (overloading) : in cadrul unei clase pot exista metode cu acelasi nume cu conditia ca signaturile lor sa fie diferite. supradefinirea (overriding): o subclasa poate rescrie o metoda a clasei parinte prin implementarea unei metode cu acelasi nume si aceeasi signatura ca ale superclasei. Observatii: - o metoda supradefinita poate sa ignore codul din superclasa sau poate sa il extinda prin expresia super. - o metoda nu poate supradefini o metoda declarata final in clasa parinte. - in Java nu este posibila supraincarcarea operatorilor.

Extinderea claselor Polimorfism

Modificatori de acees

Variabile si metode de instanta si de clasa

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Mofificatorii de acees

Extinderea claselor Polimorfism

- o subclasa mosteneste de la parintele sau toate variabilele si metodele care nu sunt private.

Modificatori de acees

Variabile si metode de instanta si de clasa

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Variabile de instanta si de clasa

Extinderea claselor Polimorfism

O clasa Java poate contine doua tipuri de variabile si metode : de instanta: specifice fiecare instante create dintr-o clasa . de clasa: declarate cu modificatorul static, specifice clasei. class Exemplu { int x ; //variabila de instanta};

Modificatori de acees

Variabile si metode de instanta si de clasa

- la fiecare creare a unui obiect al clasei Exemplu sistemul aloca o zona de memorie separata pentru memorarea valorii lui x. Exemplu o1 = new Exemplu(); o1.x=100; Exemplu o2 = new Exemplu(); o2.x = 200; System.out.println(o1.x); // Afiseaza 100 System.out.println(o2.x); // Afiseaza 200 = 100;
4 March 2011 8

Programare orientata pe obiecte ORGANIZARE

Extinderea claselor Polimorfism

Modificatori de acees

Variabile si metode de instanta si de clasa

- pentru variabilele de clasa (statice) sistemul aloca o singura zona de memorie la care au acces toate instantele clasei respective; - daca un obiect modifica valoarea unei variabile statice ea se va modifica si pentru toate celelalte obiecte; - variabilele statice pot fi referite si sub forma: NumeClasa.numeVariabilaStatica class Exemplu { static long n =2; // Variabila de clasa} Exemplu o1 = new Exemplu(); Exemplu o2 = new Exemplu(); o1.n = 100; System.out.println(o2.n); // Afiseaza 100

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Metode de instanta si de clasa


- metodele declarate fara modificatorul static sunt metode de instanta iar cele declarate cu static sunt metode de clasa.

Extinderea claselor Polimorfism Diferenta intre cele doua tipuri de metode este urmatoarea: metodele de instanta opereaza atat pe variabilele de instanta cat si pe cele statice ale clasei; metodele de clasa opereaza doar pe variabilele statice ale clasei.

Modificatori de acees

Variabile si metode de instanta si de clasa

4 March 2011

Programare orientata pe obiecte ORGANIZARE

Clase abstracte

Programare orientata pe obiecte

Metode abstracte

Interfete Java

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Clase si metode abstracte

Clase abstracte

- este utilizata pentru a definii un concept abstract folosit la dezvoltarea ulterioara a altor clase ce pot fi instantiate; - o clasa abstracta nu poate fi instantiata;

Metode abstracte

- o clasa abstracta pune la dispozitia subclaselor sale un model complet pe care trebuie sa il implementeze. Declararea unui clase abstracte: [public] abstract class ClasaAbstracta {// Declaratii uzuale // Declaratii de metode abstracte }

Interfete Java

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Clase abstracte

- poate avea specificatorul public caz in care poate fi extinsa de orice clasa din afara pachetului; - poate contine date membre la care se adauga declaratii de metode neimplementate. - clasa care extinde o clasa abstracta trebuie sa implementeze metodele neimplementate din clasa abstracta.

Metode abstracte

Interfete Java - daca o clasa nu implementeaza metodele neimplementate este deasemenea abstracta si nu poate fi instantiata.

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Metode abstracte
Metodele fara nici o implementare se numesc metode abstracte si pot fi incluse doar in clase abstracte.

Clase abstracte In fata unei metode abstracte trebuie sa apara obligatoriu cuvantul cheie abstract, altfel va fi furnizata o eroare de compilare. Metode abstracte abstract class ClasaAbstracta { abstract void metodaAbstracta(); // Corect void metoda(); // Eroare}

Interfete Java

11 March 2011

Programare orientata pe obiecte ORGANIZARE OBSERVATII

Clase abstracte

O clasa abstracta poate sa nu aiba nici o metoda abstracta. Orice clasa care are o metoda abstracta trebuie declarata ca fiind abstracta. Platforma de lucru Java cuprinde numeroase exemple de ierarhii care folosesc la nivelele superioare clase abstracte: Number: superclasa abstracta a tipurilor referinta numerice; Reader, Writer: superclasele abstracte ale fluxurilor de intrare/iesire pe caractere; InputStream, OutputStream: superclasele abstracte ale fluxurilor deintrare/iesire pe octeti; AbstractList, AbstractSet, AbstractMap: superclase abstracte pentru structuri de date de tip colectie.

Metode abstracte

Interfete Java

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Interfete

Clase abstracte

Interfetele permit, alaturi de clase, definirea unor noi tipuri de date. O interfata Java este o colectie de metode fara implementare si declaratii de constante.

Metode abstracte

Interfete Java

O clasa care implementeaza o interfata trebuie obligatoriu sa specifice implementari pentru toate metodele interfetei.

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Definirea unei interfete

Clase abstracte

Metode abstracte

Definirea unei interfete se face prin intermediul cuvantului cheie interface: [public] interface NumeInterfata [extends SuperInterfata1, SuperInterfata2...] { Corpul interfetei:} O interfata poate avea doar modificatorul public.

Interfete Java

O interfata poate extinde oricate interfete. Acestea se numesc superinterfete si sunt separate prin virgula.

11 March 2011

Programare orientata pe obiecte ORGANIZARE


Corpul unei interfete poate contine: constante: acestea pot fi sau nu declarate cu modificatorii public, static si final care sunt impliciti; -nici un alt modificator nu este permis in declaratia unei variabile dintr-o interfata. Constantele unei interfete trebuie obligatoriu initializate. interface Exemplu { int MAX = 100; // Echivalent cu: public static final int MAX = 100; int MAX; // Incorect, lipseste initializarea private int x = 1;// Incorect, modificator nepermis }

Clase abstracte

Metode abstracte

Interfete Java

11 March 2011

Programare orientata pe obiecte ORGANIZARE


metode fara implementare: acestea pot fi sau nu declarate cu modificatorul public, care este implicit; - nici un alt modificator nu este permis in declaratia unei metode a unei interfete. interface Exemplu { void metoda(); // Echivalent cu: public void metoda(); protected void metoda2(); // Incorect, modificator nepermis

Clase abstracte

Metode abstracte

Interfete Java

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Implementarea unei interfete


Implementarea uneia sau mai multor interfete de catre o clasa se face prin intermediul cuvantului cheie implements:

Clase abstracte class NumeClasa implements NumeInterfata sau class NumeClasa implements Interfata1, Interfata2, ... O clasa poate implementa mai multe interfete. Interfete Java Modificarea unei interfete implica modificarea tuturor claselor care implementeaza acea interfata.

Metode abstracte

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Mostenire multipla prin interfete


- in limbajul Java nu este permisa mostenirea multipla a claselor;

Clase abstracte

- o clasa poate avea oricate subclase dar numai o superclasa; - o clasa poate extinte mai multe interfete. class NumeClasa implements Interfata1, Interfata2, ... Interface NumeInterfata extends Interfata1, Interfata2, ... O interfata mosteneste atat constantele cat si declaratiile de metode de la superinterfetele sale. O clasa mosteneste doar constantele unei interfete si responsabilitatea implementarii metodelor sale.

Metode abstracte

Interfete Java

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Utilitatea interfetelor
Interfetele sunt utile pentru:

Clase abstracte

definirea unor similaritati intre clase independente fara a forta artificial o legatura intre ele; posibilitatea implementarii unor clase prin mai multe modalitati si folosirea lor intr-o maniera unitara; definirea unor grupuri de constante;

Metode abstracte

Interfete Java

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Tablouri
- tabloul este un obiect creat dinamic care poate fi assignat variabilelor de tip Object; - toate elementele unui tablou au aceelasi tip;

Clase abstracte

Metode abstracte

Declararea vectorului: Tip[] numeVector; Tip numeVector[]; Exemple int[] intregi; String adrese[];

Interfete Java

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Clase abstracte

Metode abstracte

Interfete Java

Instantierea unui tablou - Operatia de alocare a memoriei (instantierea vectorului) se realizeaza intotdeauna prin intermediul operatorului new numeVector = new Tip[nrElemente]; - in urma instantierii vor fi alocati: nrElemente * dimensiune(Tip) octeti necesari memorarii elementelor din vector; v = new int[10]; //aloca spatiu pentru 10 intregi: 40 octeti c = new char[10]; //aloca spatiu pentru 10 caractere: 20 octeti

11 March 2011

Programare orientata pe obiecte ORGANIZARE

Tablouri

Programare orientata pe obiecte

Siruri de caractere

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Tablouri

Tablouri

- tabloul este un obiect creat dinamic care poate fi assignat variabilelor de tip Object; - toate elementele unui tablou au aceelasi tip; Declararea vectorului Se realizeaza prin expresii de forma: Tip[] numeVector; Tip numeVector[]; Exemplu: int[] intregi; String adrese[];

Siruri de caractere

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Tablouri

Siruri de caractere

- delararea unui tablou nu creaza obiectul tablou si nici nu aloca spatiu de memorie pentru componente; Instantierea unui tablou - Operatia de alocare a memoriei (instantierea vectorului) se realizeaza intotdeauna prin intermediul operatorului new numeVector = new Tip[nrElemente]; - in urma instantierii vor fi alocati: nrElemente * dimensiune(Tip) octeti necesari pentru memorarea elementelor din vector; v = new int[10]; //aloca spatiu pentru 10 intregi: 40 octeti c = new char[10]; //aloca spatiu pentru 10 caractere: 20 octeti

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Intializarea (optional) - dupa declararea unui vector, acesta poate fi initializat cu valori intiale, caz in care nu mai este instantiat (alocarea memoriei se realizeaza automat). String culori[] = {"Rosu", "Galben", "Verde"}; int []factorial = {1, 1, 2, 6, 24, 120}; Tabluri mutidimensionali - tablourile multidimensionale sunt vectori de vectori; Tip matrice[][] = new Tip[nrLinii][nrColoane]; - matrice[i] este linia i din matrice si reprezinta un vector cu nrColoane elemente.

Tablouri

Siruri de caractere

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Operatii asupra unui tablou

Tablouri

Siruri de caractere

- dimeniunea unui tablou se poate calcula cu ajutorul variabilei length. int []a = new int[5]; // a.length are valoarea 5 int m[][] = new int[5][10]; // m[0].length are valoarea 10 - copierea unui vector se poate realiza fie element cu element, fie cu ajutorul metodei System.arraycopy int a[] = {1, 2, 3, 4}; int b[] = new int[4]; for(int i=0; i<a.length; i++) b[i] = a[i]; Echivalent cu : System.arraycopy(a, 0, b, 0, a.length);

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Clasa java.util.Arrays ofera diverse metode foarte utile pentru prelucrarea unui vector cum ar fi: sort - sorteaza ascendent un vector, folosind un algoritm de tip Quick-Sort performant, de complexitate O(n log(n)). int v[]={3, 1, 4, 2}; java.util.Arrays.sort(v); // Sorteaza vectorul v // Acesta va deveni {1, 2, 3, 4} binarySearch - cautarea binara a unei anumite valori intr-un vector sortat; equals - testarea egalitatii valorilor a doi vectori.

Tablouri

Siruri de caractere

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Siruri de caractere

Tablouri

In Java, un sir de caractere poate fi reprezentat astfel: - printr-un vector format din elemente de tip char; -un obiect de tip String; -un obiect de tip StringBuffer Exemple echivalente de declarare a unui sir: String s = "abc"; String s = new String("abc"); char data[] = {a, b, c};

Siruri de caractere

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Observatii

Tablouri

Siruri de caractere

String sir=Primul sir; sir= Al doilea sir - daca se atribuie unei variabile de tip String o alta valoare, vechea referinta se pierde; - daca un sir se intializeaza cu un literal String, atunci i se va atribui adresa acestuia din memorie (tabela de literali literal pool); - operatorul == aplicat pentru doua String uri testeaza daca acestea ponteaza catre aceeasi adresa de memorie; - utilizarea operatorului new pentru un String conduce la crearea unui spatiu de memorie ; - se poate crea un tablou de String-uri : String [ ] nume = new String [5]; nume[0] = Pop

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Operatii asupra unui String

Tablouri

Siruri de caractere

- Concatenarea sirurilor de caractere se face prin intermediul operatorului + String s1 = "abc" + "xyz"; String s2 = "123"; String s3 = s1 + s2; Metode publice din clasa String : - boolean equals(object obiect); - string replace(char caractervechi, char caracternou) ; - String toLowerCase(); - int length; - String substring(int indexstart, int indexsfarsit) - char charAt(int index)

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Clasa StringBuffer
- prelucreaza siruri de caractere de lungime variabila; - o instanta a clasei StringBuffer reprezinta un String care poate fi modificat dinamic; - un obiect de tip StringBuffer contine un bloc de memorie numit buffer care poate sa contina un sir, dar nu este obligatoriu sa fie ocupat in totalitate; - crearea unui obiect de tip StringBuffer se realizeaza apleland unul din costructorii: StringBuffer( ); //un sir cu capacitatea de 16 caractere StringBuffer(int capacitate); StringBuffer(String sir) Exemplu : StringBuffer a = new StringBuffer(Un sir de tip buffer);

Tablouri

Siruri de caractere

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Metode publice din clasa StrindBuffer


int capacty();

Tablouri

StringBuffer delete(int start, int end); StringBuffer replace(int start, int end, String sir); int length();

Siruri de caractere String substring(int start);

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Conversie de date
- conversia unui tip de date byte, short, int, float, double, char, boolean la un sir de caractere se realizeaza cu metoda statica toString() . - conversia unui sir de caractere String la un tip de data primitiva se realizeaza cu metoda: tip.parseTip(String sir); Exemplu: int.parseInt(sir); double.parseDouble(sir).

Tablouri

Siruri de caractere

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Exceptii si erori

Programare orientata pe obiecte

Tratarea exceptiilor

Ierarhia claselor ce descriu exceptii

15 June 2011

Programare orientata pe obiecte Erori si Exceptii ORGANIZARE

Exceptii si erori

Erorile si exceptiile reprezinta situatii particulare si anormale care pot sa apara in timpul executiei unei aplicatii Java de intrare/iesire, imposibilitate de conversie de la un tip la altul). Erorile sunt situatii grave care , daca apar, duc la intreruperea executiei programului (VirtualMachineError). Exceptiile sunt situatii care pot aparea mai frecvent si, de regula, problemele aparute se pot remedia. De regula, aplicatiile trateaza aceste situatii particulare. Cand se produce o eroare in timpul executiei se creaza un obiect de tip exceptie ce va contine:

Tratarea exceptiilor

Ierarhia claselor ce descriu exceptii

- informatii despre exceptia respectiva; - starea programului in momentul producerii acelei exceptii.

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Crearea unui obiect de tip exceptie se numeste aruncarea unei exceptii (throwing an exception). Exceptii si erori Secventa de cod dintr-o metoda care trateaza o anumita exceptie se numeste analizor de exceptie (exception handler). Interceptarea si tratarea ei se numeste prinderea exceptiei (catch the exception). In Java tratarea erorilor nu mai este o optiune ci o constrangere.

Tratarea exceptiilor

Ierarhia claselor ce descriu exceptii

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Prinderea si tratarea exceptiilor


Tratarea exceptiilor se realizeaza prin intermediul blocurilor de instructiuni try, catch si finally. O secventa de cod care trateaza anumite exceptii trebuie sa arate astfel: try { // Instructiuni care pot genera exceptii } catch (TipExceptie1 variabila) { // Tratarea exceptiilor de tipul 1} catch (TipExceptie2 variabila) { // Tratarea exceptiilor de tipul 2}
...

Exceptii si erori

Tratarea exceptiilor

Ierarhia claselor ce descriu exceptii

finally { // Cod care se executa indiferent daca apar sau nu exceptii }

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Aruncarea exceptiilor

Exceptii si erori

Tratarea exceptiilor

- o metoda poate sa arunce exceptii catre alte metode; - metodele apelante fie implementeaza tratarea lor , fie la randul lor arunca mai departe exceptiile respective. Aruncarea exceptiilor se realizeaza prin specificarea in declaratia metodei a clauzei throws [modificatori] TipReturnat metoda([argumente]) throws TipExceptie1, TipExceptie2, ... {...} O metoda care nu trateaza o anumita exceptie trebuie obligatoriu sa o arunce.

Ierarhia claselor ce descriu exceptii

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Avantajele tratarii exceptiilor


Prin modalitatea sa de tratare a exceptiilor, Java are urmatoarele avantaje fata de mecanismul traditional de tratare a erorilor: Separarea codului pentru tratarea unei erori de codul in care ea poate sa apara. Propagarea unei erori pana la un analizor de exceptii corespunzator.

Exceptii si erori

Tratarea exceptiilor

Ierarhia claselor ce descriu exceptii

Gruparea erorilor dupa tipul lor. - in Java exista clase corespunzatoare tuturor exceptiilor care pot aparea la executia unui program. De exemplu, clasa IOException se ocupa cu exceptiile ce pot aparea la operatii de intrare/iesire si diferentiaza la randul ei alte tipuri de exceptii, cum ar fi FileNotFoundException, EOFException, etc.

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Ierarhia claselor ce descriu exceptii


superclasa tuturor exceptiilor si erorilor este java.lang.Throwable ( doar instantele acesteai pot aparea in clauzele throw, catch etc. ) Clasa Throwable are patru constructori: public Throwable(String message) public Throwable(String message) public Throwable(String message, Throwable cause) public Throwable(Throwable cause). message = un mesaj care descrie succcint problema survenita; cause = situatia de exceptie

Exceptii si erori

Tratarea exceptiilor

Ierarhia claselor ce descriu exceptii

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Metode publice definite in clasa Throwable: public getMessage() - afiseaza detaliul unei exceptii; Exceptii si erori public printStackTrace() - afiseaza informatii complete despre exceptie si localizarea ei; Tratarea exceptiilor public toString() - metoda mostenita din clasa Object, care furnizeaza reprezentarea sub forma de sir de caractere a excepiei.

Ierarhia claselor ce descriu exceptii

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Clasa Throwable are doua subclase directe : Error: cazuri speciale de exceptii generate de functionarea anormala a echipamentului hard; un program Java nu trebuie sa trateze aparitia acestor erori Exception: sunt exceptiile standard (soft) care trebuie tratate de catre programele Java.

Exceptii si erori

Tratarea exceptiilor

Ierarhia claselor ce descriu exceptii

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Exceptii la executie
Exceptiile care provin strict din vina programatorului si nu generate de o anumita situatie externa, cum ar fi lipsa unui fisier.

Exceptii si erori

Tratarea exceptiilor

Ierarhia claselor ce descriu exceptii

Aceste exceptii au o superclasa comuna RuntimeException si in acesata categorie sunt incluse exceptiile provocate de: operatii aritmetice ilegale (impartirea intregilor la zero); ArithmeticException accesarea membrilor unui obiect ce are valoarea null; NullPointerException accesarea eronata a elementelor unui vector. ArrayIndexOutOfBoundsException

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Crearea propriilor exceptii


- exceptie proprie trebuie sa se incadreze in ierarhia exceptiilor Java;

Exceptii si erori public class ExceptieProprie extends Exception { public ExceptieProprie(String mesaj) { super(mesaj); // Apeleaza constructorul superclasei Exception } }

Tratarea exceptiilor

Ierarhia claselor ce descriu exceptii

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Intrari si Iesiri

Programare orientata pe obiecte

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Intrari si iesiri

Un flux este un canal de comunicatie serial unidirectional intre doua procese pe 8 biti sau 16 biti. Intrari si Iesiri Indiferent de tipul informatiilor, citirea/scrierea de pe/catre un mediu extern respecta urmatorul algoritm: Fluxuri primitive deschide canal comunicatie while (mai sunt informatii) { citeste/scrie informatie;} inchide canal comunicatie; Clasele si intefetele standard pentru lucrul cu fluxuri se gasesc in pachetul java.io.

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Clasificarea fluxurilor Dupa directia canalului de comunicatie deschis fluxurile se impart in: fluxuri de intrare (pentru citirea datelor) fluxuri de iesire (pentru scrierea datelor) Dupa tipul de date pe care opereaza: fluxuri de octeti (comunicarea seriala se realizeaza pe 8 biti) fluxuri de caractere (comunicarea seriala se realizeaza pe 16 biti). Dupa actiunea lor: fluxuri primare de citire/scriere a datelor ; fluxuri pentru procesarea datelor.

Intrari si Iesiri

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE Fluxuri primitive


- sunt responsabile cu citirea/scrierea efectiva a datelor, punand la dispozitie implementari ale metodelor de baza read/write. In functie de tipul sursei datelor, ele pot fi impartite astfel: Fisier FileReader, FileWriter FileInputStream, FileOutputStream Memorie CharArrayReader, CharArrayWriter ByteArrayInputStream, ByteArrayOutputStream - sunt folosite pentru scrierea/citirea informatiilor in/din memorie si sunt create pe un vector existent deja.

Intrari si Iesiri

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE Fluxuri de procesare


- sunt responsabile cu preluarea datelor de la un flux primitiv si procesarea acestora. Bufferizare BufferedReader, BufferedWriter BufferedInputStream, BufferedOutputStream - sunt folosite pentru a introduce un buffer in procesul de citire/scriere a informatiilor. Filtrare FilterReader, FilterWriter FilterInputStream, FilterOutputStream -filtreaza automat datele citite sau scrise.

Intrari si Iesiri

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Conversie octeti-caractere InputStreamReader, OutputStreamWriter Conversie tipuri de date DataInputStream, DataOutputStream Folosite la scrierea/citirea datelor de tip primitiv intr-un format binar. Concatenare SequenceInputStream Concateneaza mai multe fluxuri de intrare intr-unul singur . Un ux de procesare nu poate folosit decat impreuna cu un ux primitiv.

Intrari si Iesiri

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Crearea unui flux - orice flux este un obiect al clasei ce implementeaza fluxul respectiv. Crearea unui flux primitiv de date : FluxPrimitiv numeFlux = new FluxPrimitiv(dispozitivExtern); //crearea unui flux de intrare pe caractere FileReader in = new FileReader("fisier.txt"); //crearea unui flux de intrare pe octeti FileInputStream in = new FileInputStream("fisier.dat");

Intrari si Iesiri

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Fluxurile de procesare nu pot exista de sine statatoare ci se suprapun pe un flux primitiv de citire/scriere a datelor. Intrari si Iesiri Constructorii claselor pentru fluxurile de procesare nu primesc ca argument un dispozitiv extern de memorare a datelor ci o referinta la un flux primitiv. //crearea unui flux de intrare printr-un buffer BufferedReader in = new BufferedReader( new FileReader("fisier.txt"));

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Fluxuri pentru lucrul cu fisiere


- operatia lor de baza este citirea, respectiv scrierea unui caracter sau octet dintr-un sau intr-un fisier specificat. Clasele care implementeaza aceste fluxuri sunt : FileReader, FileWriter - caractere FileInputStream, FileOutputStream octeti Constructorii clasei FileReader sunt: public FileReader(String fileName) public FileReader(File file) Constructorii clasei FileWriter: public FileWriter(String fileName) public FileWriter(File file)

Intrari si Iesiri

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Observatii: - orice crearea a unui flux se realizeaza intr-un bloc try catch sau metoda in care este creat fluxul trebuie sa arunce exceptiile : FileNotFoundException, IOException. - un fisier se inchide cu ajutorul metodei close. Fluxuri primitive

Intrari si Iesiri

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE Citirea si scrierea cu buffer


-sunt folosite pentru a introduce un buffer (zona de memorie) in procesul de citire/scriere a informatiilor Clasele pentru citirea/scrierea cu zona tampon sunt: BufferedReader, BufferedWriter - caractere BufferedInputStream, BufferedOutputStream octeti Constructorii cei mai folositi ai acestor clase sunt urmatorii: BufferedReader(Reader in) BufferedReader(Reader in, int dim_buffer) BufferedWriter(Writer out) BufferedWriter(Writer out, int dim_buffer) BufferedInputStream(InputStream in)

Intrari si Iesiri

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE


- dimensiunea implicita a buffer-ului este de 512 octeti . - metodele uzuale ale acestor clase sunt: read , write, flush (goloste explicit zona tampon, chiar daca aceasta nu este plina). Intrari si Iesiri BufferedWriter out = new BufferedWriter( new FileWriter("out.dat"), 1024) for(int i=0; i<1000; i++) out.write(i); //bufferul nu este plin, in fisier nu s-a scris nimic out.flush(); //bufferul este golit, datele se scriu in fisier

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Metoda readLine - este specifica fluxurilor de citire cu buffer si permite citirea linie cu linie a datelor de intrare. Intrari si Iesiri BufferedReader br = new BufferedReader(new FileReader("in")) String linie; while ((linie = br.readLine()) != null) { //proceseaza linie} br.close(); }

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE Clasele DataInputStream si DataOutputStream


- fluxurile mai sunt privite la nivel de octet, ci ca succesiuni de date
primitive sau iruri de caractere. - clasele care ofera un astfel de suport implementeaza interfetele DataInput, respectiv DataOutput. - aceste vor furniza metode pentru citirea si scrierea datelor la nivel de tip primitiv si nu la nivel de octet. Metode uzuale: readBoolean /writeBoolean; readInterger /writeInteger readDouble/ writeDouble

Intrari si Iesiri

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE Analiza lexicala pe fluxuri (clasa StreamTokenizer)


- proceseaza un flux de intrare de orice tip si il imparte in atomi lexicali. Constructorii clasei sunt: - public StreamTokenizer(Reader r) - public StreamTokenizer(InputStream is) Identificarea tipului si valorii unui atom lexical se face prin intermediul variabilelor: TT EOF - atom ce marcheaza sfarsitul fluxului TT EOL - atom ce marcheaza sfarsitul unei linii TT NUMBER - atom de tip numar TT WORD- atom de tip cuvant nval- valoarea unui atom numeric sval valoarea unui cuvant

Intrari si Iesiri

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE Clasa File


- pune la dispozitie metode pentru manipularea fisierelor si directoarelor : metode pentru testarea existentei unui fisier/director, stergerea, redenumirea unui fisier/director, listarea fisierelor dintr-un director. File f=new File(fiser) FileInputStream in = new FileInputStream(f);

Intrari si Iesiri

Fluxuri primitive

Clasa Scanner - disponibila in pachetul java.util i permite regsirea ntr-un


Fluxuri de procesare text a tipurilor primitive i a irurilor, folosind expresii regulate. Scanner sc = new Scanner(new File("fisier")); Fluxuri de tip fisier

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Colectii de date

Programare orientata pe obiecte

Interferte de descriu colectii de date

Implementare colectii de date Algoritm

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Colectii de date

Colectii de date

O colectie este un obiect care grupeaza mai multe elemente intro singura unitate. Tipul de date al elementelor dintr-o colectie este Object (include obiecte de orice tip). In Java colectiile de date sunt organizate in ierarhii astefel: Interfete: tipuri abstracte de date ce descriu colectiile si permit utilizarea lor independent de detaliile implementarilor. Implementari: implementari concrete ale interfetelor ce descriu colectii. Algoritmi: metode care efectueaza diverse operatii utile (cautarea , sortarea).

Interferte de descriu colectii de date

Implementare colectii de date Algoritm

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Interfete ce descriu colectii de date

Colectii de date

Interferte de descriu colectii de date

Implementare colectii de date Algoritm

Interfata Collection - modeleaza o colectie de date la nivelul cel mai general. Unele implementari ale colectiilor de date pot permite duplicari ale elementelor. public interface Collection { // Metode cu caracter general int size(); boolean isEmpty(); void clear(); // Operatii la nivel de element boolean add(Object element); boolean remove(Object element);

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Interfata Set - modeleaza notiunea de multime in sens matematic. Mosteneste metodele din interfata Collection, fara a avea alte metode specifice. Clasele standard care ofera implementari concrete ale acestei interfete sunt HashSet si TreeSet. Interfata List - descrie liste de elemente indexate. Listele pot contine duplicate si permit un control precis asupra pozitiei unui element prin intermediul unui index. Clase standard care implementeaza aceasta interfata sunt: ArrayList, LinkedList, Vector. Mosteneste metodele din interfata Collection adaugand metode pentru acces pozitional, cautare si iterare avansata.

Colectii de date

Interferte de descriu colectii de date

Implementare colectii de date Algoritm

15 June 2011

Programare orientata pe obiecte ORGANIZARE


public interface List extends Collection { // Acces pozitional Object get(int index); Object set(int index, Object element); void add(int index, Object element); Object remove(int index); // Cautare int indexOf(Object o); int lastIndexOf(Object o); // Iterare ListIterator listIterator(); ListIterator listIterator(int index); // Extragere sublista List subList(int from, int to); }
15 June 2011 5

Colectii de date

Interferte de descriu colectii de date

Implementare colectii de date Algoritm

Programare orientata pe obiecte ORGANIZARE


Interfata Map : descrie structuri de date ce asociaza fiecarui element o cheie unica, dupa care poate fi regasit. Ierarhia interfetelor derivate din Map este independenta de ierarhia derivata din Collection. public interface Map { // Operatii la nivel de element Object put(Object key, Object value); Object get(Object key); Object remove(Object key); // Vizualizari ale colectiei public Set keySet(); } Clase care implementeaza interfata Map sunt HashMap, TreeMap si Hashtable.

Colectii de date

Interferte de descriu colectii de date

Implementare colectii de date Algoritm

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Implementari ale colectiilor


Clasele de baza care implementeaza interfete ce descriu colectii au numele de forma : < Implementare >< Interfata > <implementare> = structura interna folosit a pentru reprezentarea.

Colectii de date

Interfata Interferte de descriu colectii de date Set SortedSet List Implementare colectii de date Algoritm Map SortedMap

Clasa HashSet TreeSet ArrayList, LinkedList Vector HashMap Hashtable TreeMap

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Algoritmi polimorfici
Algoritmii polimorfici sunt metode definite din clasa Collections care permit efectuarea unor operatii utile cum ar fi cautarea, sortarea, etc. Metodele mai des folosite din clasa Collections sunt: sort - sorteaza ascendent o lista; shuffle - amesteca elementele unei liste - opusul lui sort; binarySearch - efectueaza cautarea binara a unui element intrlista ordonata; min , max; swap - interschimba elementele de la doua pozitii specificate ale unei liste;

Colectii de date

Interferte de descriu colectii de date Implementare colectii de date Algoritm

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Iteratori
Iteratorii sunt obiecte care permit parcurgerea secventiala a unei colectii de date.

Colectii de date

Interferte de descriu colectii de date

Iteratorii sunt descrisi de interfetele Enumeration, Iterator, ListIterator. Metode uzuale: boolean hasMoreElements( ) // daca mai sunt elemente de enumerat E nextElement( ) boolean hasNext() //daca mai sunt elemente de parcurs

Implementare colectii de date Algoritm

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Serializarea datelor primitive

Programare orientata pe obiecte

Serializarea obiectelor

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Serializarea obiectelor

Serializarea datelor primitive

Serializarea este o metoda ce permite transformarea unui obiect intr-o secventa de octeti stfel incat sa poata fi trimis printr-un flux de iesire.

Serializarea obiectelor

Procesul invers, de citire a unui obiect serializat pentru a-i reface starea originala, se numeste deserializare.

15 June 2011

Programare orientata pe obiecte ORGANIZARE Utilitatea serializarii:


Serializarea datelor primitive persistenta obiectelor : pot fi memorate pentru a fi folosite i dup ncheierea aplicaiei care le-a creat; transmiterea datelor in retea - aplicatiile ce ruleaza in retea pot comunica intre ele folosind uxuri pe care sunt trimise, respectiv receptionate obiecte serializate; RMI (Remote Method Invocation) - este o modalitate prin care metodele unor obiecte de pe o alta masina pot apelate ca si cum acestea ar exista local pe masina pe care ruleaza aplicatia.

Serializarea obiectelor

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Serializarea datelor primitive Serializarea datelor primitive Serializarea tipurilor primitive poate realizata e prin intermediul uxurilor: DataOutputStream/DataInputStream care implementeaza interfeta DataInput, care implementeaza interfeta DataOutput. ObjectOutputStream/ObjectInputStream. Interfetele ce declara metode de tipul readTipPrimitiv, respectiv writeTipPrimitiv pentru scrierea/citirea datelor primitive si a sirurilor de caractere.

Serializarea obiectelor

15 June 2011

Programare orientata pe obiecte ORGANIZARE Serializarea obiectelor


Serializarea datelor primitive Serializarea obiectelor se realizeaza prin intermediul uxurilor: ObjectOutputStream (pentru salvare) ; ObjectInputStream (pentru restaurare). Mecanismul implicit de serializare a unui obiect va salva: - numele clasei obiectului; - signatura clasei ; - valorile tuturor campurile serializabile ale obiectului Metodele pentru serializarea obiectelor sunt: writeObject, pentru scriere si readObject, pentru restaurare.

Serializarea obiectelor

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Applet-uri

Programare orientata pe obiecte

Ciclul de viata al unui applet

Grafica Java

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Applet-uri

Applet-uri Ciclul de viata al unui applet

Denitie Un applet reprezinta un program Java de dimensiuni reduse ce gestioneaza o suprafata de asare (container) care poate inclusa intr-o pagina Web. contine cel putin o clasa, numita principala, care extinde clasa Applet. clasa principlala trebuie specicata in documentul HTML ce descrie pagina Web in care dorim sa includem appletul. este executat de de browserul in care este incarcata pagina Web. pachetul care ofera suport pentru crearea de appleturi este java.applet, cea mai importanta clasa ind Applet.

Grafica Java

15 June 2011

Programare orientata pe obiecte


Crearea unui applet simplu

ORGANIZARE

1. Scrierea codului : pentru a putea executata de browser, clasa principala a appletului trebuie sa e publica. Applet-uri 2. Salvarea fisierelor sursa : denumire_fisier.java. Ciclul de viata al unui applet 3. Compilarea :compilatorul javac apelat pentru fisierul ce contine appletul. javac FirstApplet.java 4. Rularea appletului : Applet-urile nu ruleaza independent. Ele pot fi rulate doar prin intermediul unui browser.

Grafica Java

15 June 2011

Programare orientata pe obiecte ORGANIZARE Ciclul de viata al unui applet


Incarcarea in memorie : Este creata o instanta a clasei principale a appletului si incarcata in memorie.

Applet-uri

Initializarea : Este apelata metoda init ce permite initializarea diverselor variabile, citirea unor parametri de intrare, etc. Pornirea : Este apelata metoda start Executia propriu-zisa : Consta in interactiunea dintre utilizator si componentele afisate pe suprafata appletului; Oprirea temporara: Daca utilizatorul paraseste pagina Web in care ruleaza appletul este apelata metoda stop a acestuia; Oprirea definitiva : La inchiderea tuturor instantelor browserului folosit pentru vizualizare, appletul va fi eliminat din memorie si va fi apelata metoda destroy a acestuia.

Ciclul de viata al unui applet

Grafica Java

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Structura generala a unui applet import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class StructuraApplet extends Applet { public void init() { } public void start() { } public void stop() {} public void destroy() {} }

Applet-uri

Ciclul de viata al unui applet

Grafica Java

15 June 2011

Programare orientata pe obiecte ORGANIZARE Grafica Java

Applet-uri

Pachetul Awt (Abstract Window Toolkit) contine toate clasele pentru crearea interfetelor cu utilizatorul si pentru desenarea graficelor sau a imaginilor. Clasa abstracta Graphics face parte din pachetul java.awt si se refera la ecranul grafic Java. Ecranul grafic Java se bazeaza pe pixeli si pe un sistem ortogonal de axe. Cele mai uzuale metode : public void drawString(String sir, int x, int y); public void drawLine(int x1, int y1, int x2, int y2) public drawRect(int x, int y, int lungime, int latime)

Ciclul de viata al unui applet

Grafica Java

15 June 2011

Programare orientata pe obiecte ORGANIZARE

Componente grafice AWT


Toate componentele AWT sunt definte de clase proprii ce se gasesc in pachetul java.awt. Button - butoane cu eticheta formata dintr-un text pe o singura linie; Checkbox - componenta ce poate avea doua stari; Choice - liste in care doar elementul selectat este vizibil ; Container - superclasa tuturor suprafetelor de afisare Label - etichete simple ce pot contine o singura linie de text List - liste cu selectie simpla sau multipla; Scrollbar - bare de defilare orizontale sau verticale; TextComponent - superclasa componentelor pentru editarea textului: TextField (pe o singura linie) si TextArea (pe mai multe linii).

Applet-uri

Ciclul de viata al unui applet

Grafica Java

15 June 2011

Programare orientata pe obiecte ORGANIZARE


Componentele AWT au peste 100 de metode comune, mostenite din clasa Component. Pozitie getLocation, getX, getY, getLocationOnScreen Dimensiuni getSize, getHeight, getWidth Culoare (text si fundal) getForeground, getBackground

Applet-uri

Ciclul de viata al unui applet

Grafica Java

15 June 2011

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