Sunteți pe pagina 1din 126

1.

Fie următoarea clasă Java:

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

StabiliŃi care dintre următoarele instrucŃiuni este corectă:

a) C ob = new C(1);
b) C ob = new C(1,1.0);
c) C ob = new C();
d) C ob = new C(1,1.0,true);

2. Fie următorul 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 afişată valoarea:

a) 3;
b) 2;
c) 1;
d) nicio valoare, deoarece programul este incorect sintactic şi nu va putea fi executat.

3. Fie următorul 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 afişată valoarea:

a) 0;
b) 2;
c) 1;
d) 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) javac Test
b) java Test.java
c) javac Test.class
d) javac Test.java

5. Un program Test scris în limbajul Java şi compilat, poate fi rulat folosind comanda:

a) javac Test.java
b) java Test
c) java Test.class
d) java Test.java

6. În Java o clasă poate extinde:

a) cel mult o interfaŃă


b) oricâte clase
c) cel mult o clasă
d) oricâte interfeŃe

7. În Java o interfaŃă poate extinde:

a) cel mult o interfată


b) oricâte interfeŃe
c) cel mult o clasă
d) oricâte clase

8. În Java o clasă poate implementa:

a) o clasă
b) oricâte clase
c) o interfaŃă
d) oricâte interfeŃe

9. Fie următorul 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 afişa:

a) ABC
b) A
c) CBA
d) C

10. Fie următorul 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 afişa:

a) 3 4
b) 3 2
c) 2 2
d) 3 3
11. Fie următorul 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 afişa:

a) 0 5
b) 5 1
c) 5 7
d) 0 1

12. Fie următorul 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, spaŃiile punctate
din metoda afisare a clasei Student_2 trebuie înlocuite cu:

a) afisare();
b) Student_1.afisare();
c) super.afisare();
d) nimic, deoarece se apelează automat metoda afisare a clasei Student_1.

13. Fie următorul 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 afişa Popescu 314 Java 10, spaŃiile punctate
din constructorul Student_2 al clasei Student_2 trebuie:

a) să fie înlocuite cu instrucŃiunea super(ns,g);


b) să fie înlocuite cu instrucŃiunile 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 interfeŃei Student este implementată în două clase diferite, Student_1 şi
Student_2.

14. Fie următoarele declaraŃii î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; }
}

StabiliŃi care dintre următoarele propoziŃii sunt adevărate:

a) definiŃia clasei Patrat_1 este incorectă deoarece nu implementeză metoda perimetru a


interfeŃei Patrat;
b) constructorul clasei Pătrat_2 este incorect deoarece nu are acces la pointerul this;
c) constructorul clasei Pătrat_2 este incorect deoarece nu are apelează constructorul
superclasei Patrat_1;
d) definiŃia clasei Patrat_2 este incorectă deoarece nu implementeză metoda aria a
interfeŃei Patrat.
15. Fie următorul 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());
}
}

StabiliŃi care dintre următoarele propoziŃii sunt adevărate:

a) programul este incorect deoarece în funcŃia main se instanŃiază o interfaŃă, ci nu o clasă;


b) programul este corect şi după rulare va afişa 140.0;
c) programul este incorect deoarece în clasa Patrat_1 se redefineşte ca şi data membru
constanta L din interfaŃa Patrat;
d) programul este corect şi după rulare va afişa 100.0 40.0.

16. Fie următorul 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());


}
}

StabiliŃi care dintre următoarele propoziŃii sunt adevărate:

a) programul este incorect deoarece apare un conflict de nume pentru ca în interfeŃele


Patrat şi Dreptunghi sunt definite metode cu aceiasi signatura, iar clasele
Patrulater_1 şi Patrulater_2 implementează fiecare ambele interfeŃe;
b) programul este incorect deoarece în interfeŃele 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 afişa 100.0 40.0 200.0 60.0;
d) programul este incorect deoarece în funcŃia main i se atribuie instanŃei d a interfeŃei
Dreptunghi un obiect din clasa Patrulater_1 , iar instanŃei p a interfeŃei Patrat un
obiect de tip Patrulater_2 (care, de fapt, abstractizează noŃiunea de dreptunghi).

17. Considerăm următorul 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 afişa:

a) 20 -22
b) 22 22
c) 35 10
d) 5 100

18. Considerăm următorul 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 afişa:

a) 5 7
b) 6 6
c) 2 10
d) 7 5
19. Considerăm următorul 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 afişa:

a) 1 1 1
b) 1 2 3
c) 1 2 6
d) 0 0 0

20. Considerăm următorul 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 afişa:

a) 0 0 0
b) 1 4 25
c) 1 -1 1
d) 2 4 16

21. Un fir de execuŃie poate intra în starea "blocat" (blocked) astfel:

a) prin apelul metodei sleep();


b) automat de către sistemul de operare;
c) prin apelul metodei block();
d) prin apelul metodei wait().
22. Prin modalitatea sa de tratare a excepŃiilor, Java are următoarele avantaje faŃă de
mecanismul tradiŃional de tratare a erorilor:

a) există o metodă care se ocupă de acest lucru;


b) separarea codului pentru tratarea unei erori de codul în care ea poate sa apară;
c) propagarea unei erori pâna la un analizor de excepŃii corespunzător;
d) gruparea erorilor dupa tipul lor.

23. O subclasă a unei clase abstracte poate fi instanŃiată numai dacă:

a) se foloseşte cuvantul cheie abstract;


b) suprascrie fiecare metodă declarată abstractă în superclasa sa şi furnizeaza implementări
pentru toate acestea;
c) se foloseşte moştenirea multiplă;
d) subclasă abstractă nu poate fi instanŃiată.

24. Care este rolul declaraŃiilor import?

a) Permite referirea claselor fără utilizarea de prefixe;


b) Permite importul imaginilor folosite;
c) Elimină necesitatea declarării variabilelor;
d) Elimină apelurile directe ale funcŃiilor fără clase.

25. IndicaŃi pe care dintre sistemele de operare următoare pot fi rulate aplicaŃiile Java:

a) Windows
b) UNIX
c) Mac OS X
d) Linux
Programare orientata pe obiecte

ORGANIZARE

Introducere in Java

Tipuri de aplicatii Programare orientata pe obiecte


Java

Structura unui fisier


sursa

Structura lexicala a
limbajului Java.

Tipuri de date

Controlul executiei

19 February 2011 1
Programare orientata pe obiecte

Introducere in Java
ORGANIZARE

Java este o tehnologie inovatoare lansata de compania Sun


Introducere in Java
Microsystems in 1995.

Caracteristici principale:
Tipuri de aplicatii
Java  limbaj compilat si interpretat
Programele Java sunt mai intai compilate in fisiere intermediare (byte
Structura unui fisier code) dupa care sunt interpretate in mediul de executie Java.
sursa  limbaj independent de platforma
Masina virtuala Java (JVM) este mediul de executie al limbajului
Structura lexicala a Java.
limbajului Java. JVM este inglobata in platforma JDK (Java Develoment Kit)
 Simplitate
Tipuri de date Elimina supraıncarcarea operatorilor, mostenirea multipla, renunta la
utilizarea variabilelor pointer;
 Complet orientat obiect
Controlul executiei
 Este modelat dupa C si C++.

19 February 2011 2
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 2. Limbajul Java propriu-zis. Limbajul Java este orientat pe obiecte si

se aseamana din punct de vedere al sintaxei cu C++.


Structura unui fisier
sursa 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
Structura lexicala a fisiere cu extensia .class) care sunt “intelese” de masina virtuala.
limbajului Java.
4. Biblioteca de clase Java. Contine un set de componente utile care pot
fi reutilizate in diverse aplicatii informatice.
Tipuri de date

Controlul executiei

19 February 2011 3
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 4
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);
Tipuri de aplicatii 3). Aplicatii care se executa pe partea de server (servleturi);
Java
Aplicatii de sine statatoare:
Structura unui fisier - sunt programe care pot fi executate in afara contextului unui
sursa
browser Web.
- contine o clasa de baza declarata public iar denumirea acesteia
Structura lexicala a
limbajului Java. coincide cu numele fisierului;
- in cadrul clasei publice trebuie incapsulata functia principala
main () cu sintaxa :
Tipuri de date
public static void main (Strings args[])
Controlul executiei

19 February 2011 5
Programare orientata pe obiecte

ORGANIZARE

Crearea oricarei aplicatii Java presupune efectuarea urmatorilor


pasi:
Introducere in Java

1. Scriererea codului sursa


Tipuri de aplicatii - se pote utiliza orice editor obisnuit sau un mediu specializat
Java (NetBeans, Eclipse)

Structura unui fisier


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

Tipuri de date

Controlul executiei

19 February 2011 6
Programare orientata pe obiecte

ORGANIZARE

Introducere in Java 3. Compilarea aplicatiei

- pentru compilare se utilizeaza compilatorul javac din distributia JDK.


Tipuri de aplicatii Apelul compilatorului se face pentru fisierul ce contine clasa principala
Java a aplicatiei sau pentru orice fisier cu extensia java prin comanda:

javac nume.java
Structura unui fisier
sursa
In cazul in care compilarea a reusit va fi generat fisierul nume.class.

Structura lexicala a 4. Rularea aplicatiei


limbajului Java.
- se realizeaza cu interpretorul java, apelat pentru unitatea de compilare
corespunzatoare clasei principale cu comanda java nume
Tipuri de date Rularea unei aplicatii care nu foloseste interfata grafica, se va face intr-o
fereastra sistem.
Controlul executiei

19 February 2011 7
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 .
Tipuri de aplicatii
Java - un fisier sursa poate contine un numar nelimitat de definitii de
clase;
Structura unui fisier
sursa Exista trei elemente care pot sa apara in fisierul sursa:

- declaratii de pachete;
Structura lexicala a
limbajului Java.
- instructiuni de includere clase;

Tipuri de date - definitii de clase.

Controlul executiei

19 February 2011 8
Programare orientata pe obiecte

ORGANIZARE

Un pachet este o multime de clase pastrate in aceelasi


Introducere in Java director.
Exista mai multe pachete de baza cum ar fi : java.io,
java.lang, java.applet, java.awt ;
Tipuri de aplicatii
Java
Declararea unui pachet : package <nume_pachet>
Structura unui fisier
sursa Se poate importa fie un pachet fie doar o clasa dintr-un pachet
existent asfel:
Structura lexicala a import nume_pachet.*;
limbajului Java.
import nume_pachet.nume_clasa;

Tipuri de date

Controlul executiei

19 February 2011 9
Programare orientata pe obiecte

Structura lexicala a limbajului Java


ORGANIZARE

Introducere in Java Atomi lexicali : set de caractere, literali, separatori, operatori,


cuvinte rezervate.
Setul de caractere
Tipuri de aplicatii - limajul Java utilizeaza setul de caractere Unicode care
Java
foloseste pentru reperezentarea caracterelor 2 octeti (65536 de
semne);
Structura unui fisier
sursa - setul de caractere Unicode este divizat in subintervale numite
blocuri : Basi Latin, Greek, Ghotic etc. )
Structura lexicala a Literali
limbajului Java. - sunt reprezentarea codului sursa a unui tip primitiv, String sau
nul.
Tipuri de date

Controlul executiei

19 February 2011 1
Programare orientata pe obiecte

ORGANIZARE

Introducere in Java Literari Intregi


Sunt acceptate 3 baze de numeratie : baza 10, 16, 8 si pot fi de doua
tipuri:
Tipuri de aplicatii – normali - se reprezinta pe 4 octeti (32 biti)
Java
– lungi - se reprezinta pe 8 octeti (64 biti)
Structura unui fisier
sursa Literari Flotanti : reprezentare pe 32 de biti sau pe 64 de biti (pentru tipul
double)
Structura lexicala a
limbajului Java. Literari Logici : sunt reprezentati prin valorile true , false.

Tipuri de date Literari Caracter : reprezentarea se face fie folosind o litera, fie o secventa
escape scrisa ıntre apostrofuri ( ‘\n’, ‘\t’, ‘\b’ etc.)
Controlul executiei

19 February 2011 1
Programare orientata pe obiecte

ORGANIZARE

2. Operatori
Introducere in Java atribuirea =

Tipuri de aplicatii operatori matematici: +, -, *, /, %, ++, -- .


Java
operatori logici: &&(and), ||(or), !(not)
Structura unui fisier
sursa
operatori relationali: <, <=, >, <=, ==, !=
Structura lexicala a
limbajului Java. operatori pe biti: &(and), |(or), ^ (xor), ~ (not)

Tipuri de date operatori de translatie: <<, >>, >>> (shift la dreapta fara semn)
operatorul + pentru concatenarea sirurilor:
Controlul executiei “sir 1” +”sir2”

19 February 2011 1
Programare orientata pe obiecte

Tipuri de date si variabile


ORGANIZARE

1. Tipuri de date
Introducere in Java In Java tipurile de date se impart in doua categorii: tipuri
primitive si tipuri referinta.
Tipuri primitive
Tipuri de aplicatii • aritmetice
Java
– intregi: byte (1 octet), short (2), int (4), long (8)
Structura unui fisier – reale: float (4 octeti), double (8)
sursa • caracter: char (2 octeti)
• logic: boolean (true si false)
Structura lexicala a Tipuri de referinta
limbajului Java.
• vectorii;
• clasele;
Tipuri de date
• interfetele;
Controlul executiei Valoarea unei variabile de acest tip este o referinta (adresa de
memorie) .

19 February 2011 1
Programare orientata pe obiecte

ORGANIZARE

Variabile
Introducere in Java Variabilele pot fi de tip primitiv sau referinte la obiecte (tip
referinta).

Tipuri de aplicatii • Declararea variabilelor: Tip numeVariabila;


Java

Structura unui fisier • Initializarea variabilelor: Tip numeVariabila = valoare;


sursa
• Declararea constantelor: final Tip numeVariabila;
Structura lexicala a
limbajului Java.

Tipuri de date

Controlul executiei

19 February 2011 1
Programare orientata pe obiecte

ORGANIZARE

In functie de locul in care sunt declarate, variabilele se


Introducere in Java impart in urmatoatele categorii:
a.Variabile membre, declarate in interiorul unei clase,
Tipuri de aplicatii b.Parametri metodelor, vizibili doar in metoda
Java respectiva.
c.Variabile locale, declarate intr-o metoda, vizibile doar
Structura unui fisier in metoda respectiva.
sursa
d.Variabile locale, declarate intr-un bloc de cod, vizibile
Structura lexicala a doar in blocul respectiv.
limbajului Java.

Tipuri de date

Controlul executiei

19 February 2011 1
Programare orientata pe obiecte

ORGANIZARE Controlul executiei

Instructiuni de decizie;
Introducere in Java Instructiuni de salt;
Instructiuni pentru tratarea exceptiilor: try-catch-finally,
Tipuri de aplicatii throw
Java Alte instructiuni: break, continue, return, label.

Structura unui fisier


sursa 1. Instructiuni de decizie
a). if-else
Structura lexicala a
limbajului Java.

Tipuri de date

Controlul executiei

19 February 2011 1
Programare orientata pe obiecte

ORGANIZARE

b). switch-case
Introducere in Java switch (variabila) {
case valoare1:…break;
Tipuri de aplicatii case valoare2:...break;
Java

Structura unui fisier default:...
sursa
}
Variabilele care pot fi testate folosind instructiunea
Structura lexicala a
limbajului Java. switch nu pot fi decat de tipuri primitive.
2. Instructiuni de salt
Tipuri de date - for , while, do- while

Controlul executiei

19 February 2011 1
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 1
Programare orientata pe obiecte

Definirea claselor
ORGANIZARE

- in Java este obligatorie definirea a cel putin unei clase (clasa de


baza);
Definirea claselor

- nu este obligatorie crearea unei instante a clasei de baza, caz in


care se vor utiliza date si metode statice.
Ciclul de viata al
unui obiect
Sintaxa unei clase:
Domeniul de [modificator] class NumeClasa
vizibilitate al {// Corpul clasei}
membrilor unei clase

4 March 2011 2
Programare orientata pe obiecte

ORGANIZARE

Modificatorii pot fi:


- public : poate fi folosita din orice alta clasa, indiferent de
Definirea claselor 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
Ciclul de viata al subclase.
unui obiect
- final : nu se mai pot defini subclase.

Domeniul de
vizibilitate al Obs : daca modificatorul lipseste, clasa este implicita si poate fi
membrilor unei clase folosita doar de clasele din aflate in accelasi pachet.

4 March 2011 3
Programare orientata pe obiecte

ORGANIZARE Corpul unei clase

 Declararea si, eventual, initializarea variabilelor de


Definirea claselor 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).
Domeniul de
vizibilitate al  Declararea unor clase imbricate (interne).
membrilor unei clase
Observatie : implementarea metodei unei clase trebuie sa
se faca obligatoriu in corpul clasei.

4 March 2011 4
Programare orientata pe obiecte

ORGANIZARE Declararea datelor membre

Variabilele membre ale unei clase se declara de obicei inaintea


metodelor.
Definirea claselor
O variabila se declara astfel:
[modificatori] Tip numeVariabila [ = valoareInitiala ];

Ciclul de viata al unde un modificator poate fi :


unui obiect
• un modificator de acces : public, protected, private
• unul din cuvintele rezervate: static, final;
Domeniul de  Static : variabila este de clasa si nu de instanta;
vizibilitate al static tip variabilaClasa;
membrilor unei clase
 Final : indica faptul ca valoarea variabilei nu mai poate fi
schimbata (declararea constantelor ).
final double PI = 3.14 ;

4 March 2011 5
Programare orientata pe obiecte

ORGANIZARE Constructorii unei clase

- sunt metode speciale care au aceelasi nume cu cel clasei, nu


returneza nici o valoare si sunt folosite pentru initializarea
Definirea claselor
obiectelor clasei;

- o clasa poate avea mai multi constructori care trebuie sa


Ciclul de viata al difere prin lista argumentelor;
unui obiect
- daca in clasa nu se declara nici un constructor, sistemul ii
creaza automat un constructor implicit.
Domeniul de
vizibilitate al
membrilor unei clase Tipuri de constructori:
- fara argumente;
- cu argumente;

4 March 2011 6
Programare orientata pe obiecte

ORGANIZARE Declararea metodelor

- Metodele sunt responsabile cu descrierea comportamentului


unui obiect.
Definirea claselor
- Metodele se pot gasi doar in cadrul claselor.

O metoda se declara astfel:


Ciclul de viata al [modificatori] TipReturnat numeMetoda ( [argumente] )
unui obiect
{// Corpul metodei}

Domeniul de unde un modificator poate fi :


vizibilitate al • un specificator de acces : public, protected, private .
membrilor unei clase
• unul din cuvintele rezervate: static, abstract, final.

4 March 2011 7
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


Ciclul de viata al in care a fost definita.
unui obiect
In limbajul Java argumentele sunt transmise doar prin valoare
Domeniul de - daca argumentul are tip primitiv de date, metoda nu ii poate
vizibilitate al schimba valoare decat local;
membrilor unei clase - daca argumentul este de tip referinta, metoda nu poate
modifica valoarea referintei obiectului .

4 March 2011 8
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:
Definirea claselor
 Declararea
Presupune specificarea tipului acelui obiect, cu alte cuvinte
specificarea clasei acestuia
Ciclul de viata al NumeClasa numeObiect;
unui obiect  Instantierea
Se realizeaza prin intermediul operatorului new si are ca efect
crearea efectiva a obiectului cu alocarea spatiului de memorie
Domeniul de corespunzator.
vizibilitate al
membrilor unei clase numeObiect = new NumeClasa();

4 March 2011 9
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
Definirea claselor
executarea unor actiuni.
obiect.NumeVariabila sau obiect.NumeMetoda

Ciclul de viata al Observatie : programare orientata pe obiecte descurajeaza


unui obiect 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).
Domeniul de
vizibilitate al
membrilor unei clase obiect. x=3; // setare inconstienta
obiect.set_x =3; //metode setter

4 March 2011 1
Programare orientata pe obiecte

ORGANIZARE

3. Distrugerea obiectelor
- in limajul Java programele nu mai au responsabilitatea
distrugerii obiectelor.
Definirea claselor

- in momentul rularii unui program , simultan cu interpretatorul


Java , ruleaza un proces care se ocupa cu distrugerea obiectelor
Ciclul de viata al numit garbage collector (dispus pe platforma de lucru Java ).
unui obiect
- un obiect este eliminat din memorie atunci cand nu mai exista
nici o referinta la acesta.
Domeniul de
vizibilitate al
membrilor unei clase

4 March 2011 1
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
Definirea claselor
daca tipul de clasa este accesibil.
a). daca membrul este declarat public se permite accesul de
oriunde;
Ciclul de viata al b). daca membrul este declrat protected atunci accesul este
unui obiect permis doar daca:
- accesul este cerut din pachetul clasei in care este
declarat;
Domeniul de - accesul apare dintr-o subclasa a clasei.
vizibilitate al
membrilor unei clase 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.

4 March 2011 1
Programare orientata pe obiecte

ORGANIZARE

Definirea claselor

Ciclul de viata al
unui obiect

Domeniul de
vizibilitate al
membrilor unei clase

4 March 2011 1
Programare orientata pe obiecte

ORGANIZARE

Extinderea claselor

Programare orientata pe obiecte


Polimorfism

Modificatori de acees

Variabile si metode
de instanta si de
clasa

4 March 2011 1
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;

Modificatori de acees - radacina arborelui este clasa Object din pachetul java.lang

Sintaxa extinderii:
Variabile si metode class clasa1 extends clasa2,
de instanta si de unde clasa1 este subclasa si clasa2 este superclasa.
clasa

4 March 2011 2
Programare orientata pe obiecte

ORGANIZARE

- relatia de derivare a claselor este tranzitiva.


Extinderea claselor
class C1{int x;}
Polimorfism class C2 extends C1{int y;}

C1 este clasa derivata din clasa Object si este supercalasa pentru


Modificatori de acees clasa C2.
Clasa C2 este subclasa directa a clasei C1 si subclasa indirecta a
clasei Object.
Variabile si metode
de instanta si de
clasa

4 March 2011 3
Programare orientata pe obiecte

ORGANIZARE Clasa Object

- in limbajul Java, clasa Object este superclasa pentru toate


clasele.
Extinderea claselor Clasa Object defineste si implementeaza comportamentul
comun al tuturor celorlalte clase Java prin metode specifice:
Polimorfism
• returnarea clasei din care face parte un obiectul curent
getclass( )
• reprezentarea obiectiului curent intr-un String.
Modificatori de acees
toString( )

Variabile si metode
de instanta si de
clasa

4 March 2011 4
Programare orientata pe obiecte

ORGANIZARE Constructorii subclaselor

Instantierea unui obiect din clasa extinsa implica instantierea


Extinderea claselor unui obiect din clasa parinte.

Polimorfism Fiecare constructor al subuclasei trebuie sa aiba un constructor


cu aceeasi signatura in parinte sau sa apeleze explicit un
constructor al clasei extinse .

Modificatori de acees
Apelul explicit al unui constructor din superclasa se realizeaza
cu expresia:
super([argumente])
Variabile si metode
de instanta si de
clasa

4 March 2011 5
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
Extinderea claselor diferite.
• supradefinirea (overriding): o subclasa poate rescrie o metoda a
clasei parinte prin implementarea unei metode cu acelasi nume
Polimorfism si aceeasi signatura ca ale superclasei.

Observatii:
Modificatori de acees - 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
Variabile si metode parinte.
de instanta si de - in Java nu este posibila supraincarcarea operatorilor.
clasa

4 March 2011 6
Programare orientata pe obiecte

ORGANIZARE Mofificatorii de acees

- o subclasa mosteneste de la parintele sau toate variabilele si


Extinderea claselor metodele care nu sunt private.

Polimorfism

Modificatori de acees

Variabile si metode
de instanta si de
clasa

4 March 2011 7
Programare orientata pe obiecte

ORGANIZARE Variabile de instanta si de clasa

O clasa Java poate contine doua tipuri de variabile si metode :


Extinderea claselor • de instanta: specifice fiecare instante create dintr-o clasa .
• de clasa: declarate cu modificatorul static, specifice clasei.
Polimorfism
class Exemplu { int x ; //variabila de instanta};

Modificatori de acees - 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();
Variabile si metode o1.x=100;
de instanta si de Exemplu o2 = new Exemplu();
clasa
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

- pentru variabilele de clasa (statice) sistemul aloca o singura


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

4 March 2011 9
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
Diferenta intre cele doua tipuri de metode este urmatoarea:
Polimorfism • 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


Modificatori de acees
clasei.

Variabile si metode
de instanta si de
clasa

4 March 2011 1
Programare orientata pe obiecte

ORGANIZARE

Clase abstracte
Programare orientata pe obiecte
Metode abstracte

Interfete Java

11 March 2011 1
Programare orientata pe obiecte

ORGANIZARE Clase si metode abstracte

- este utilizata pentru a definii un concept abstract folosit la


dezvoltarea ulterioara a altor clase ce pot fi instantiate;
Clase abstracte
- 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:


Interfete Java
[public] abstract class ClasaAbstracta
{// Declaratii uzuale
// Declaratii de metode abstracte
}

11 March 2011 2
Programare orientata pe obiecte

ORGANIZARE

- poate avea specificatorul public caz in care poate fi extinsa de


orice clasa din afara pachetului;
Clase abstracte

- poate contine date membre la care se adauga declaratii de


metode neimplementate.
Metode abstracte

- clasa care extinde o clasa abstracta trebuie sa implementeze


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

11 March 2011 3
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
Interfete Java void metoda(); // Eroare}

11 March 2011 4
Programare orientata pe obiecte

OBSERVATII
ORGANIZARE

• O clasa abstracta poate sa nu aiba nici o metoda abstracta.


Clase abstracte • Orice clasa care are o metoda abstracta trebuie declarata ca
fiind abstracta.

Platforma de lucru Java cuprinde numeroase exemple de ierarhii


Metode abstracte
care folosesc la nivelele superioare clase abstracte:
• Number: superclasa abstracta a tipurilor referinta numerice;
• Reader, Writer: superclasele abstracte ale fluxurilor de
Interfete Java 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.

11 March 2011 5
Programare orientata pe obiecte

ORGANIZARE Interfete

Interfetele permit, alaturi de clase, definirea unor noi tipuri de


date.
Clase abstracte

O interfata Java este o colectie de metode fara implementare si


declaratii de constante.
Metode abstracte

O clasa care implementeaza o interfata trebuie obligatoriu sa


Interfete Java specifice implementari pentru toate metodele interfetei.

11 March 2011 6
Programare orientata pe obiecte

ORGANIZARE Definirea unei interfete

Definirea unei interfete se face prin intermediul cuvantului


cheie interface:
Clase abstracte
[public] interface NumeInterfata
[extends SuperInterfata1, SuperInterfata2...]
{ Corpul interfetei:}
Metode abstracte

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 7
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;
Clase abstracte
-nici un alt modificator nu este permis in declaratia unei
variabile dintr-o interfata.

Metode abstracte
Constantele unei interfete trebuie obligatoriu initializate.
interface Exemplu {
int MAX = 100;
Interfete Java // Echivalent cu:
public static final int MAX = 100;
int MAX; // Incorect, lipseste initializarea
private int x = 1;// Incorect, modificator nepermis
}

11 March 2011 8
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
Clase abstracte
a unei interfete.

interface Exemplu {
Metode abstracte
void metoda();
// Echivalent cu:
public void metoda();
Interfete Java protected void metoda2(); // Incorect, modificator nepermis

11 March 2011 9
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, ...
Metode abstracte

O clasa poate implementa mai multe interfete.

Interfete Java
Modificarea unei interfete implica modificarea tuturor claselor
care implementeaza acea interfata.

11 March 2011 1
Programare orientata pe obiecte

ORGANIZARE
Mostenire multipla prin interfete

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


- o clasa poate avea oricate subclase dar numai o superclasa;
Clase abstracte - o clasa poate extinte mai multe interfete.

class NumeClasa implements Interfata1, Interfata2, ...


Metode abstracte Interface NumeInterfata extends Interfata1, Interfata2, ...

O interfata mosteneste atat constantele cat si declaratiile de


Interfete Java metode de la superinterfetele sale.
O clasa mosteneste doar constantele unei interfete si
responsabilitatea implementarii metodelor sale.

11 March 2011 1
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


Metode abstracte
si folosirea lor intr-o maniera unitara;

 definirea unor grupuri de constante;


Interfete Java

11 March 2011 1
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

Declararea vectorului:
Metode abstracte Tip[] numeVector;
Tip numeVector[];

Interfete Java Exemple int[] intregi;


String adrese[];

11 March 2011 1
Programare orientata pe obiecte

ORGANIZARE

Instantierea unui tablou


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

11 March 2011 1
Programare orientata pe obiecte

ORGANIZARE

Tablouri
Programare orientata pe obiecte

Siruri de caractere

15 June 2011 1
Programare orientata pe obiecte

ORGANIZARE Tablouri

- tabloul este un obiect creat dinamic care poate fi assignat


variabilelor de tip Object;
Tablouri - toate elementele unui tablou au aceelasi tip;

Declararea vectorului
Se realizeaza prin expresii de forma:
Tip[] numeVector;
Siruri de caractere
Tip numeVector[];
Exemplu:
int[] intregi;
String adrese[];

15 June 2011 2
Programare orientata pe obiecte

ORGANIZARE

- delararea unui tablou nu creaza obiectul tablou si nici nu aloca


spatiu de memorie pentru componente;
Tablouri
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:
Siruri de caractere
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 3
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
Tablouri
realizeaza automat).
String culori[] = {"Rosu", "Galben", "Verde"};
int []factorial = {1, 1, 2, 6, 24, 120};

Tabluri mutidimensionali
Siruri de caractere
- 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.

15 June 2011 4
Programare orientata pe obiecte

ORGANIZARE
Operatii asupra unui tablou

- dimeniunea unui tablou se poate calcula cu ajutorul variabilei


length.
Tablouri
int []a = new int[5];
// a.length are valoarea 5
int m[][] = new int[5][10];
// m[0].length are valoarea 10
Siruri de caractere - 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 5
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
Tablouri
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}
Siruri de caractere
¾ binarySearch - cautarea binara a unei anumite valori intr-un
vector sortat;

¾ equals - testarea egalitatii valorilor a doi vectori.

15 June 2011 6
Programare orientata pe obiecte

ORGANIZARE Siruri de caractere

In Java, un sir de caractere poate fi reprezentat astfel:


- printr-un vector format din elemente de tip char;
Tablouri
-un obiect de tip String;
-un obiect de tip StringBuffer

Exemple echivalente de declarare a unui sir:


Siruri de caractere String s = "abc";
String s = new String("abc");
char data[] = {’a’, ’b’, ’c’};

15 June 2011 7
Programare orientata pe obiecte

ORGANIZARE Observatii

String sir=“Primul sir”;


sir= “Al doilea sir”
Tablouri - 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
Siruri de caractere 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 8
Programare orientata pe obiecte

ORGANIZARE
Operatii asupra unui String

- Concatenarea sirurilor de caractere se face prin intermediul


operatorului “+”
Tablouri
String s1 = "abc" + "xyz";
String s2 = "123";
String s3 = s1 + s2;
Metode publice din clasa String :
Siruri de caractere - 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 9
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;
Tablouri
- 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:
Siruri de caractere
StringBuffer( ); //un sir cu capacitatea de 16 caractere
StringBuffer(int capacitate);
StringBuffer(String sir)

Exemplu : StringBuffer a = new StringBuffer(“Un sir de tip


buffer”);

15 June 2011 1
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 1
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() .
Tablouri

- conversia unui sir de caractere String la un tip de data primitiva


se realizeaza cu metoda:

tip.parseTip(String sir);
Siruri de caractere

Exemplu: int.parseInt(sir);
double.parseDouble(sir).

15 June 2011 1
Programare orientata pe obiecte

ORGANIZARE

Exceptii si erori
Programare orientata pe obiecte

Tratarea exceptiilor

Ierarhia claselor ce
descriu exceptii

15 June 2011 1
Programare orientata pe obiecte
Erori si Exceptii
ORGANIZARE

Erorile si exceptiile reprezinta situatii particulare si anormale


care pot sa apara in timpul executiei unei aplicatii Java de
Exceptii si erori intrare/iesire, imposibilitate de conversie de la un tip la altul).
9 Erorile sunt situatii grave care , daca apar, duc la intreruperea
executiei programului (VirtualMachineError).
9 Exceptiile sunt situatii care pot aparea mai frecvent si, de
regula, problemele aparute se pot remedia. De regula, aplicatiile
trateaza aceste situatii particulare.
Tratarea exceptiilor
Cand se produce o eroare in timpul executiei se creaza un obiect
de tip exceptie ce va contine:
Ierarhia claselor ce
descriu exceptii - informatii despre exceptia respectiva;

- starea programului in momentul producerii acelei exceptii.

15 June 2011 2
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


Tratarea exceptiilor
(”catch the exception”).

In Java tratarea erorilor nu mai este o optiune ci o


Ierarhia claselor ce constrangere.
descriu exceptii

15 June 2011 3
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
Exceptii si erori astfel:
try {
// Instructiuni care pot genera exceptii }
catch (TipExceptie1 variabila) {
// Tratarea exceptiilor de tipul 1}
Tratarea exceptiilor
catch (TipExceptie2 variabila) {
// Tratarea exceptiilor de tipul 2}
...
Ierarhia claselor ce
descriu exceptii finally {
// Cod care se executa indiferent daca apar sau nu
exceptii }

15 June 2011 4
Programare orientata pe obiecte

ORGANIZARE
“Aruncarea” exceptiilor

- o metoda poate sa “arunce” exceptii catre alte metode;


- metodele apelante fie implementeaza tratarea lor , fie la randul
Exceptii si erori 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, ...
Tratarea exceptiilor
{...}

O metoda care nu trateaza o anumita exceptie trebuie


Ierarhia claselor ce
descriu exceptii obligatoriu sa o ”arunce”.

15 June 2011 5
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:
9 Separarea codului pentru tratarea unei erori de codul in care ea
Exceptii si erori poate sa apara.

9 Propagarea unei erori pana la un analizor de exceptii


corespunzator.

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

15 June 2011 6
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. )
Exceptii si erori Clasa Throwable are patru constructori:

public Throwable(String message)


public Throwable(String message)
public Throwable(String message, Throwable cause)
Tratarea exceptiilor
public Throwable(Throwable cause).

message = un mesaj care descrie succcint problema survenita;


Ierarhia claselor ce
descriu exceptii cause = situatia de exceptie

15 June 2011 7
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 8
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
Exceptii si erori trateze aparitia acestor erori
• Exception: sunt exceptiile standard (soft) care trebuie tratate de
catre programele Java.

Tratarea exceptiilor

Ierarhia claselor ce
descriu exceptii

15 June 2011 9
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 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;
Tratarea exceptiilor
NullPointerException
• accesarea eronata a elementelor unui vector.
ArrayIndexOutOfBoundsException
Ierarhia claselor ce
descriu exceptii

15 June 2011 1
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);
Tratarea exceptiilor // Apeleaza constructorul superclasei Exception
}
}
Ierarhia claselor ce
descriu exceptii

15 June 2011 1
Programare orientata pe obiecte

ORGANIZARE

Intrari si Iesiri
Programare orientata pe obiecte

Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011 1
Programare orientata pe obiecte

Intrari si iesiri
ORGANIZARE

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;}
Fluxuri de procesare inchide canal comunicatie;

Clasele si intefetele standard pentru lucrul cu fluxuri se gasesc in


Fluxuri de tip fisier pachetul java.io.

15 June 2011 2
Programare orientata pe obiecte

ORGANIZARE

Clasificarea fluxurilor

• Dupa directia canalului de comunicatie deschis fluxurile se


Intrari si Iesiri impart in:
– fluxuri de intrare (pentru citirea datelor)
– fluxuri de iesire (pentru scrierea datelor)
Fluxuri primitive • 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).
Fluxuri de procesare • Dupa actiunea lor:
– fluxuri primare de citire/scriere a datelor ;
– fluxuri pentru procesarea datelor.
Fluxuri de tip fisier

15 June 2011 3
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.
Intrari si Iesiri In functie de tipul sursei datelor, ele pot fi impartite astfel:
¾ Fisier
FileReader, FileWriter
Fluxuri primitive FileInputStream, FileOutputStream

¾ Memorie
CharArrayReader, CharArrayWriter
Fluxuri de procesare
ByteArrayInputStream, ByteArrayOutputStream
- sunt folosite pentru scrierea/citirea informatiilor in/din
memorie si sunt create pe un vector existent deja.
Fluxuri de tip fisier

15 June 2011 4
Programare orientata pe obiecte

ORGANIZARE

Fluxuri de procesare
- sunt responsabile cu preluarea datelor de la un flux primitiv si
procesarea acestora.
Intrari si Iesiri
¾ ”Bufferizare”
BufferedReader, BufferedWriter
BufferedInputStream, BufferedOutputStream
Fluxuri primitive - sunt folosite pentru a introduce un buffer in procesul de
citire/scriere a informatiilor.

¾ Filtrare
Fluxuri de procesare
FilterReader, FilterWriter
FilterInputStream, FilterOutputStream
Fluxuri de tip fisier -filtreaza automat datele citite sau scrise.

15 June 2011 5
Programare orientata pe obiecte

ORGANIZARE

¾ Conversie octeti-caractere
InputStreamReader, OutputStreamWriter
¾ Conversie tipuri de date
Intrari si Iesiri DataInputStream, DataOutputStream
Folosite la scrierea/citirea datelor de tip primitiv intr-un format
binar.
Fluxuri primitive ¾ Concatenare
SequenceInputStream
Concateneaza mai multe fluxuri de intrare intr-unul singur .

Fluxuri de procesare
Un flux de procesare nu poate fi folosit decat impreuna cu un
flux primitiv.
Fluxuri de tip fisier

15 June 2011 6
Programare orientata pe obiecte

ORGANIZARE

Crearea unui flux


- orice flux este un obiect al clasei ce implementeaza fluxul
respectiv.
Intrari si Iesiri Crearea unui flux primitiv de date :
FluxPrimitiv numeFlux = new FluxPrimitiv(dispozitivExtern);

Fluxuri primitive //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");
Fluxuri de procesare

Fluxuri de tip fisier

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

Fluxuri primitive
//crearea unui flux de intrare printr-un buffer
BufferedReader in = new BufferedReader(
new FileReader("fisier.txt"));
Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011 8
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 :
Intrari si Iesiri FileReader, FileWriter - caractere
FileInputStream, FileOutputStream – octeti
Constructorii clasei FileReader sunt:
Fluxuri primitive public FileReader(String fileName)
public FileReader(File file)
Constructorii clasei FileWriter:
public FileWriter(String fileName)
Fluxuri de procesare public FileWriter(File file)

Fluxuri de tip fisier

15 June 2011 9
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
Intrari si Iesiri exceptiile : FileNotFoundException, IOException.

- un fisier se inchide cu ajutorul metodei close.


Fluxuri primitive

Fluxuri de procesare

Fluxuri de tip fisier

15 June 2011 1
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
Intrari si Iesiri Clasele pentru citirea/scrierea cu zona tampon sunt:
BufferedReader, BufferedWriter - caractere
BufferedInputStream, BufferedOutputStream – octeti
Fluxuri primitive Constructorii cei mai folositi ai acestor clase sunt urmatorii:
BufferedReader(Reader in)
BufferedReader(Reader in, int dim_buffer)
BufferedWriter(Writer out)
Fluxuri de procesare
BufferedWriter(Writer out, int dim_buffer)
BufferedInputStream(InputStream in)
Fluxuri de tip fisier

15 June 2011 1
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)
Fluxuri primitive for(int i=0; i<1000; i++)
out.write(i);
//bufferul nu este plin, in fisier nu s-a scris nimic
out.flush();
Fluxuri de procesare
//bufferul este golit, datele se scriu in fisier

Fluxuri de tip fisier

15 June 2011 1
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"))
Fluxuri primitive String linie;
while ((linie = br.readLine()) != null)
{
//proceseaza linie}
Fluxuri de procesare br.close();
}

Fluxuri de tip fisier

15 June 2011 1
Programare orientata pe obiecte

ORGANIZARE

Clasele DataInputStream si DataOutputStream

- fluxurile mai sunt privite la nivel de octet, ci ca succesiuni de date


Intrari si Iesiri
primitive sau şiruri de caractere.
- clasele care ofera un astfel de suport implementeaza interfetele
DataInput, respectiv DataOutput.
Fluxuri primitive - aceste vor furniza metode pentru citirea si scrierea datelor la nivel de
tip primitiv si nu la nivel de octet.

Metode uzuale:
readBoolean /writeBoolean;
Fluxuri de procesare
readInterger /writeInteger
readDouble/ writeDouble

Fluxuri de tip fisier

15 June 2011 1
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”.
Intrari si Iesiri
Constructorii clasei sunt:
- public StreamTokenizer(Reader r)
- public StreamTokenizer(InputStream is)
Fluxuri primitive 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
Fluxuri de procesare
• TT NUMBER - atom de tip numar
• TT WORD- atom de tip cuvant
Fluxuri de tip fisier • nval- valoarea unui atom numeric
sval – valoarea unui cuvant

15 June 2011 1
Programare orientata pe obiecte

ORGANIZARE

Clasa File
- pune la dispozitie metode pentru manipularea fisierelor si
directoarelor : metode pentru testarea existentei unui
Intrari si Iesiri fisier/director, stergerea, redenumirea unui fisier/director,
listarea fisierelor dintr-un director.
File f=new File(“fiser”)
Fluxuri primitive FileInputStream in = new FileInputStream(f);
Clasa Scanner
- disponibila in pachetul java.util şi permite regăsirea într-un
text a tipurilor primitive şi a şirurilor, folosind expresii regulate.
Fluxuri de procesare

Scanner sc = new Scanner(new File("fisier"));


Fluxuri de tip fisier

15 June 2011 1
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 1
Programare orientata pe obiecte

Colectii de date
ORGANIZARE

O colectie este un obiect care grupeaza mai multe elemente intr-


o singura unitate.
Colectii de date Tipul de date al elementelor dintr-o colectie este Object
(include obiecte de orice tip).

Interferte de descriu In Java colectiile de date sunt organizate in ierarhii astefel:


colectii de date ¾ Interfete: tipuri abstracte de date ce descriu colectiile si permit
utilizarea lor independent de detaliile implementarilor.
¾ Implementari: implementari concrete ale interfetelor ce descriu
Implementare colectii colectii.
de date ¾ Algoritmi: metode care efectueaza diverse operatii utile
(cautarea , sortarea).
Algoritm

15 June 2011 2
Programare orientata pe obiecte

Interfete ce descriu colectii de date


ORGANIZARE

Interfata Collection - modeleaza o colectie de date la nivelul cel


mai general.
Colectii de date Unele implementari ale colectiilor de date pot permite duplicari
ale elementelor.
public interface Collection {
Interferte de descriu // Metode cu caracter general
colectii de date int size();
boolean isEmpty();
void clear();
Implementare colectii // Operatii la nivel de element
de date
boolean add(Object element);
boolean remove(Object element);
Algoritm

15 June 2011 3
Programare orientata pe obiecte

ORGANIZARE

Interfata Set - modeleaza notiunea de multime in sens


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

15 June 2011 4
Programare orientata pe obiecte

ORGANIZARE

public interface List extends Collection {


// Acces pozitional
Object get(int index);
Colectii de date Object set(int index, Object element);
void add(int index, Object element);
Object remove(int index);
Interferte de descriu // Cautare
colectii de date
int indexOf(Object o);
int lastIndexOf(Object o);
// Iterare
Implementare colectii
de date ListIterator listIterator();
ListIterator listIterator(int index);
Algoritm // Extragere sublista
List subList(int from, int to);
}

15 June 2011 5
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
Colectii de date ierarhia derivata din Collection.
public interface Map {
// Operatii la nivel de element
Interferte de descriu Object put(Object key, Object value);
colectii de date Object get(Object key);
Object remove(Object key);
// Vizualizari ale colectiei
Implementare colectii public Set keySet();
de date
}
Clase care implementeaza interfata Map sunt HashMap,
Algoritm
TreeMap si Hashtable.

15 June 2011 6
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
Colectii de date reprezentarea.

Interfata Clasa
Interferte de descriu Set HashSet
colectii de date
SortedSet TreeSet
List ArrayList, LinkedList
Implementare colectii Vector
de date
Map HashMap
Hashtable
Algoritm SortedMap TreeMap

15 June 2011 7
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.
Colectii de date Metodele mai des folosite din clasa Collections sunt:
• sort - sorteaza ascendent o lista;
• shuffle - amesteca elementele unei liste - opusul lui sort;
Interferte de descriu • binarySearch - efectueaza cautarea binara a unui element intr-
colectii de date lista ordonata;
• min , max;
• swap - interschimba elementele de la doua pozitii specificate
Implementare colectii ale unei liste;
de date

Algoritm

15 June 2011 8
Programare orientata pe obiecte

ORGANIZARE
Iteratori

Iteratorii sunt obiecte care permit parcurgerea secventiala a


unei colectii de date.

Colectii de date Iteratorii sunt descrisi de interfetele Enumeration, Iterator,


ListIterator.
Metode uzuale:
Interferte de descriu boolean hasMoreElements( ) // daca mai sunt elemente de
colectii de date enumerat
E nextElement( )
boolean hasNext() //daca mai sunt elemente de parcurs
Implementare colectii
de date

Algoritm

15 June 2011 9
Programare orientata pe obiecte

ORGANIZARE

Serializarea datelor
primitive
Programare orientata pe obiecte

Serializarea
obiectelor

15 June 2011 1
Programare orientata pe obiecte

ORGANIZARE Serializarea obiectelor

Serializarea datelor Serializarea este o metoda ce permite transformarea unui obiect


primitive 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 2
Programare orientata pe obiecte

ORGANIZARE

Utilitatea serializarii:

Serializarea datelor ¾ persistenta obiectelor : pot fi memorate pentru a fi folosite şi


primitive după încheierea aplicaţiei care le-a creat;

¾ transmiterea datelor in retea - aplicatiile ce ruleaza in retea pot


Serializarea comunica intre ele folosind fluxuri pe care sunt trimise, respectiv
obiectelor
receptionate obiecte serializate;

¾ RMI (Remote Method Invocation) - este o modalitate prin care


metodele unor obiecte de pe o alta masina pot fi apelate ca si
cum acestea ar exista local pe masina pe care ruleaza aplicatia.

15 June 2011 3
Programare orientata pe obiecte

ORGANIZARE

Serializarea datelor primitive


Serializarea datelor
primitive Serializarea tipurilor primitive poate fi realizata fie prin
intermediul fluxurilor:

Serializarea 9 DataOutputStream/DataInputStream care implementeaza


obiectelor interfeta DataInput, care implementeaza interfeta DataOutput.
9 ObjectOutputStream/ObjectInputStream.

Interfetele ce declara metode de tipul readTipPrimitiv, respectiv


writeTipPrimitiv pentru scrierea/citirea datelor primitive si a
sirurilor de caractere.

15 June 2011 4
Programare orientata pe obiecte

ORGANIZARE

Serializarea obiectelor

Serializarea datelor Serializarea obiectelor se realizeaza prin intermediul fluxurilor:


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

15 June 2011 5
Programare orientata pe obiecte

ORGANIZARE

Applet-uri
Programare orientata pe obiecte

Ciclul de viata al
unui applet

Grafica Java

15 June 2011 1
Programare orientata pe obiecte

ORGANIZARE
Applet-uri

Definitie Un applet reprezinta un program Java de dimensiuni


reduse ce gestioneaza o suprafata de afisare (container) care
Applet-uri poate fi inclusa intr-o pagina Web.

ƒ contine cel putin o clasa, numita principala, care extinde clasa


Applet.
Ciclul de viata al
unui applet ƒ clasa principlala trebuie specificata in documentul HTML ce
descrie pagina Web in care dorim sa includem appletul.
ƒ este executat de de browserul in care este incarcata pagina Web.
Grafica Java ƒ pachetul care ofera suport pentru crearea de appleturi este
java.applet, cea mai importanta clasa fiind Applet.

15 June 2011 2
Programare orientata pe obiecte
Crearea unui applet simplu
ORGANIZARE

1. Scrierea codului : pentru a putea fi executata de browser,


clasa principala a appletului trebuie sa fie publica.
Applet-uri
2. Salvarea fisierelor sursa : denumire_fisier.java.

Ciclul de viata al 3. Compilarea :compilatorul javac apelat pentru fisierul ce


unui applet contine appletul.
javac FirstApplet.java
4. Rularea appletului : Applet-urile nu ruleaza independent. Ele
Grafica Java pot fi rulate doar prin intermediul unui browser.

15 June 2011 3
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

Ciclul de viata al Executia propriu-zisa : Consta in interactiunea dintre utilizator si


unui applet componentele afisate pe suprafata appletului;

Oprirea temporara: Daca utilizatorul paraseste pagina Web in care


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

15 June 2011 4
Programare orientata pe obiecte

ORGANIZARE

Structura generala a unui applet

import java.applet.Applet;
Applet-uri import java.awt.*;
import java.awt.event.*;
public class StructuraApplet extends Applet {
Ciclul de viata al public void init() { }
unui applet
public void start() { }
public void stop() {}
public void destroy() {}
Grafica Java
}

15 June 2011 5
Programare orientata pe obiecte
Grafica Java
ORGANIZARE

Pachetul Awt (Abstract Window Toolkit) contine toate clasele pentru


crearea interfetelor cu utilizatorul si pentru desenarea graficelor sau a
Applet-uri imaginilor.

Clasa abstracta Graphics face parte din pachetul java.awt si se refera la


ecranul grafic Java.
Ciclul de viata al Ecranul grafic Java se bazeaza pe pixeli si pe un sistem ortogonal de
unui applet axe.
Cele mai uzuale metode :

Grafica Java 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)

15 June 2011 6
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
Applet-uri linie;
• Checkbox - componenta ce poate avea doua stari;
• Choice - liste in care doar elementul selectat este vizibil ;
Ciclul de viata al Container - superclasa tuturor suprafetelor de afisare
unui applet • 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;
Grafica Java • TextComponent - superclasa componentelor pentru editarea
textului: TextField (pe o singura linie) si TextArea (pe mai
multe linii).

15 June 2011 7
Programare orientata pe obiecte

ORGANIZARE

Componentele AWT au peste 100 de metode comune, mostenite


din clasa Component.
Pozitie
Applet-uri getLocation, getX, getY, getLocationOnScreen

Dimensiuni
Ciclul de viata al getSize, getHeight, getWidth
unui applet
Culoare (text si fundal)
getForeground, getBackground
Grafica Java

15 June 2011 8

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