Sunteți pe pagina 1din 6

TEHNOLOGII JAVA

PENTRU DEZVOLTAREA APLICAIILOR


LUCRARE DE LABORATOR 5

Clase i obiecte n Java.


Crearea obiectelor. Constructori. Variabile clas
I.

SCOPUL LUCRRII

Lucrarea de fa are rolul de a prezenta i familiariza studentul cu noiuni de baz


ale limbajului Java: clase i crearea obiectelor, rolul constructorilor, semnificaia i
utilizarea variabilelor clas.
La sfritul acestei lucrri, studentul va avea posibilitatea s scrie programe Java n
care s foloseasc noile noiuni.

II.

NOIUNI TEORETICE

1. Crearea obiectelor
Vezi Curs 5, seciunea 4.1.

S considerm urmtorul exemplu:


public class
{
public
public
public
public
public

Vehicul
String categoria;
String marca;
int nrRoti;
boolean aerCond;
boolean volan;

public Vehicul(String nume,boolean aerCond) {


categoria="automobil";
marca=nume;
nrRoti=4;
this.aerCond=aerCond;
volan=true;
}
public Vehicul(String nume) {
categoria="bicicleta";
marca=nume;
nrRoti=2;
aerCond=false;
volan=false;
}
public void afisare() {
System.out.println("Categorie vehicul "+contor+": "
+categoria);

System.out.println("Denumire "+categoria+": "+marca);


System.out.println("Nr roti: "+nrRoti);
System.out.print("Aer conditionat: ");
if(aerCond)
System.out.println("da");
else
System.out.println("nu");
System.out.print("Volan: ");
if(volan)
System.out.println("da");
else
System.out.println("nu");
System.out.print("\n");
}
public static void main(String args[ ]) {
Vehicul b1,m1,m2;
b1=new Vehicul("Pegas");
m1=new Vehicul("Dacia",false);
m2=new Vehicul("Cielo",true);
b1.afisare();
m1.afisare();
m2.afisare();
}
}

Observaii:
Un fiier surs java care conine o clas public trebuie salvat cu numele
clasei respective la care se adaug extensia .java.
ntr-un fiier surs java poate exista cel mult o clas declarat public.
Astfel programul de mai sus se va salva ntr-un fiier cu numele Vehicul.java.
Altfel, la compilare se va semnala eroare.
Clasa Vehicul conine doi constructori. Utilizarea mai multor constructori pentru
aceeai clas se recomand atunci cnd se urmrete iniializarea obiectelor clasei n
moduri diferite. Astfel, n main( ) se vor crea obiecte (vehicule) ce reprezint biciclete i
automobile, n funcie de utilizarea unui constructor sau al altuia.
Unul din contextele n care utilizarea notaiei bazate pe this (this este referina
ctre obiectul curent) este necesar, este atunci cnd se definete un parametru sau o
variabil local cu acelai nume ca o dat membru a clasei. Astfel, pentru a se face
diferena ntre variabila local sau parametru i data membru a clasei, aceasta din urm
este accesat explicit prin referina this (vezi primul constructor al clasei Vehicul:
this.aerCond=aerCond).
ntr-un constructor se poate referi ca prim instruciune un constructor al clasei
curente. Este singura poziie din definiia unui constructor n care poate s apar o
referire la un alt constructor. Un astfel de apel apare sub forma:
this(listaDeArgumente); // constructor din aceeasi clasa

unde listaDeArgumente reprezint lista valorilor parametrilor constructorului invocat.


Exemplu:

public class
{
public
public
public

Floare
String denumire;
int nrPetale;
String zonaClima="-";

public Floare(String denum,int nrP) {


denumire=denum;
nrPetale=nrP;
}
public Floare(String denum,int nrP,String clima) {
this(denum,nrP);
zonaClima=clima;
}
public void afisare() {
System.out.println("Denumire: "+denumire);
System.out.println("Numar petale : "+nrPetale);
System.out.println("Zona climatica: "+zonaClima+"\n");
}
public static void main(String args[ ]) {
Floare floare1=new Floare("narcisa",7);
Floare floare2=new Floare("orhidee",30,"tropicala");
floare1.afisare();
floare2.afisare();
}
}

Observaii:
Variabilele membru se pot iniializa cnd sunt declarate. Se recomand ca
iniializarea s se fac n constructor (n principal, pentru ca fiecare obiect al clasei s
poat avea valori diferite pentru datele membru). n cazul n care o dat membru membru
este iniializat la declarare iar apoi i n constructor, atunci valoarea sa va fi cea pe care
o primete n constructor. Dac n constructor nu mai primete nici o valoare, atunci
valoarea sa va rmne cea de la declarare.
Astfel, obiectul floare1 va avea pentru data membru zonaClima valoarea -
deoarece n primul constructor (cel care este utilizat pentru crearea acestui obiect),
aceasta dat membru nu primete nici o valoare. Obiectul floare2, n schimb, este creat
cu ajutorul celui de-al doilea constructor, care iniialiazeaz data membru zonaClima la
valoarea celui de-al treilea parametru al sau care este tropicala.

2. Variabile clas
Vezi Curs 5, seciunea 4.2.

S considerm clasa Vehicul prezentat n seciunea anterioar. O vom modifica


adugndu-i o dat membru static numit contor care numr obiectele clasei ce sunt
create n program. Aceast nou variabil, fiind declarat static, este asociat clasei, ci
nu instanelor clasei. O variabil clas poate fi accesat prin numele clasei, deci nu este
nevoie de crearea unei instane a clasei doar pentru a o accesa. O variabil static este
creat o singur dat, la ncrcarea clasei.
3

public class
{
static
public
public
public
public
public

Vehicul
int contor=0;
String categoria;
String marca;
int nrRoti;
boolean aerCond;
boolean volan;

public Vehicul(String nume,boolean aerCond)


{
categoria="automobil";
marca=nume;
nrRoti=4;
this.aerCond=aerCond;
volan=true;
contor++;
}
public Vehicul(String nume)
{
categoria="bicicleta";
marca=nume;
nrRoti=2;
aerCond=false;
volan=false;
contor++;
}
public void afisare()
{
System.out.println("Categorie vehicul "+contor+": "
+categoria);
System.out.println("Denumire "+categoria+": "+marca);
System.out.println("Nr roti: "+nrRoti);
System.out.print("Aer conditionat: ");
if(aerCond)
System.out.println("da");
else
System.out.println("nu");
System.out.print("Volan: ");
if(volan)
System.out.println("da");
else
System.out.println("nu");
System.out.print("\n");
}
public static void main(String args[ ]) {
Vehicul b1,m1,m2;
b1=new Vehicul("Pegas");
b1.afisare();
m1=new Vehicul("Dacia",false);
m1.afisare();
m2=new Vehicul("Cielo",true);

m2.afisare();
System.out.println("\nExista "+Vehicul.contor+" obiecte
ale clasei Vehicul");
}
}

S considerm un alt exemplu:


class Salariat
{
public static final double impozit=0.15;
public String nume;
public String functia;
public int varsta;
public double salariuBrut;
public Salariat(String num,String func,int ani,double sal)
{
nume=num;
functia=func;
varsta=ani;
salariuBrut=sal;
}
public double salariuNet()
{
return salariuBrut*(1-impozit);
}
public void afisare()
{
System.out.println("Nume salariat: "+nume);
System.out.println("Functia: "+functia);
System.out.println("Varsta: "+varsta);
System.out.println("SalariuBrut: "+salariuBrut+" lei");
System.out.println("SalariuNet: "+salariuNet()+" lei \n");
}
}
public class UtilSal
{
public static void main(String args[ ])
{
Salariat s1=new Salariat("Popa Ion","contabil",36,7300000);
Salariat s2=new Salariat("Rada Alina","secretara",28,6000000);
System.out.println("Impozit: "+(int)(Salariat.impozit*100)+"% \n");
s1.afisare();
s2.afisare();
}
}

Observaii:
Am utilizat n clasa Salariat o dat membru impozit care este declarat i static
i final, ceea ce nseamn c este considerat o constant de ctre compilator (valoarea sa
nu poate fi modificat).
Programul de mai sus trebuie salvat ntr-un fiier surs cu numele UtilSal.java.

III.

MODUL DE LUCRU

1. Se editeaz codul surs al programului Java folosind un editor de text disponibil(de


ex., se poate utiliza Notepad).
2. Se salveaz fiierul cu extensia .java. Fiierul trebuie salvat la urmtoarea locaie:
c:\JBulider7\jdk1.3.1\bin
3. Compilarea mini-aplicaiei Java se va face din linia de comand. Se poate proceda
astfel. Se deschide o fereastr MS-Dos: Start ->Run, se tiprete command n csua
de text i se apas butonul OK. Printr-o schimbare de directoare i subdirectoare se
trece la locaia: c:\JBulider7\jdk1.3.1\bin. Sau, se lanseaz WindowsCommander.
Se trece la locaia c:\JBulider7\jdk1.3.1\bin. Se deschide o fereastr MS-Dos:
Commander ->Run Dos.
4. Pentru compilare, se tiprete la prompter javac nume_fiier_surs.java i se apas
Enter. De ex., dac fiierul se numete Test.java, se va scrie javac Test.java. n cazul
n care programul conine erori acestea vor fi semnalate i afiate n fereastra
MS-Dos, dup care va apare iar prompter-ul. Dac programul nu conine erori i
compilarea se face cu succes, atunci va apare numai prompter-ul.
5. Pentru rularea aplicaiei Java, se lanseaz interpretorul Java. Se tiprete la prompter
urmtoarea comand java nume_clas_care_conine_main i se apas Enter. De
ex., dac clasa din program care conine metoda main( ) se numete Test, se va scrie
java Test.

IV.

TEM

1. Se vor parcurge toate exemplele prezentate n platforma de laborator testndu-se


practic.
2. Modificai clasa Salariat astfel nct salariul fiecrui angajat s poat fi exprimat i
n dolari. De asemenea, programul s afieze i cursul de schimb al dolarului
utilizat n calcule.
3. Scriei clasa Student. Fiecare student are un nume, an, grup, i dou note obinute
la o anumit materie - una pe semestrul 1 iar cealalt pe semestrul 2. Clasa conine
un constructor ce iniializeaz datele membru ale clasei la valorile parametrilor si,
o funcie care calculeaz i returneaz media celor dou note, i o funcie de afiare
ce afieaz valorile datelor membru i valoarea mediei. Scriei un program complet
n care s utilizai obiecte ale clasei Salariat.