laborator8.pdf
TRANSCRIPT
ROMÂNIA
Universitatea Politehnica din Bucuresti
Facultatea de Antreprenoriat, Ingineria si Managementul Afacerilor
Programarea Calculatoarelor - Laboratorul 8
Responsabil: Şl.dr.ing. Bogdan Ţigănoaia, [email protected]
Obiectivele laboratorului sunt urmatoarele:
Prezentarea notiunii de clasa
Lucrul cu clase in Java
1. Prezentarea notiunii de clasa
O clasa reprezinta o modalitate de a descrie un nou tip de date. Clasa este o descriere a unei
multimi de obiecte caracterizate prin structuri si comportamente similare. De aceea, o clasa
va cuprinde definitiile datelor si operatiilor ce caracterizeaza obiectele clasei respective.
Datele definite intr-o clasa se mai numesc atribute, iar operatiile se mai
numesc metode sau functii-membru. Atributele si metodele formeaza
membrii unei clase.
1
Sintaxa folosita pentru a defini o clasa in Java este:
class nume_clasa {
// date si metode
}
Valorile unui tip clasa se numesc obiecte sau instante ale clasei
respective. Scrierea unui program Java consta in proiectarea si
implementarea unui set de clase. La rulare, instante ale acestor clase vor
fi create si sterse ori de cate ori va fi necesar. O biblioteca de clase este o
colectie de clase de interes general ce pot fi folosite la dezvoltarea
programelor specifice anumitor domenii. Aceste clase asigura reutilizarea
codului la crearea unor noi aplicatii. Pachetul Java SDK vine cu o serie de
biblioteci standard reunite sub numele Java API (Application
Programming Interface).
Atributele unei clase sunt asemanatoare variabilelor. Ele servesc la
definirea starii unui obiect al clasei respective.
Atributele pot fi de tip variabila instanta sau variabila clasa. Atributele
de tip variabila instanta sunt retinute la nivelul fiecarei instante si deci
au valori diferite pentru instante diferite. Atributele de tip variabila clasa
sunt retinute la nivelul clasei si au o valoare unitara pentru toate
instantele clasei respective.
Metodele unei clase definesc comportamentul clasei respective. La
rularea programului, obiectele vor comunica intre ele prin intermediul
2
apelului acestor metode. Comunicarea intre obiecte este cunoscuta sub
denumirea de schimb de mesaje.
La definirea unei clase, programatorul poate prevedea una sau mai multe
metode speciale, numite constructori, al caror scop este acela de
initializare a starii unui obiect imediat dupa crearea sa.
Caracteristicile unei metode constructor: are acelasi nume cu clasa in
care este definita; un constructor nu returneaza nimic; va fi apelata
automat la crearea unui obiect de tipul respectiv. Un constructor trebuie
sa aiba modificatorul public in fata sa.Daca programatorul nu prevede
intr-o clasa nici un constructor, atunci compilatorul va prevedea clasa
respectiva cu un constructor implicit fara nici un argument si al carui
corp de instructiuni este vid. Daca programatorul include intr-o clasa cel
putin un constructor compilatorul nu va mai genera constructorul implicit
pentru acea clasa.
Pentru exemplificarea conceptului de clasa se considera modelul unei
entitati "Persoana":
Task 1: Compilati si rulati urmatorul program Java
/**
* Clasa Persoana descrie datele si comportamentul unei persoane
*/
3
public class Persoana {
/* Atributele clasei */
String nume; // numele de familie
String prenume; // prenumele persoanei
int varsta; // varsta in ani impliniti
double inaltimea; // inaltimea persoanei in cm
char sex; // sexul persoanei. Valori posibile 'F' sau 'M'
/* Metodele clasei */
public Persoana( String numePers, String prenumePers,
int varstaPers, double inaltimeaPers, char sexPers) {
nume = numePers;
prenume = prenumePers;
varsta = varstaPers;
inaltimea = inaltimeaPers;
sex = Character.toUpperCase(sexPers);
if (sex!='F' && sex!='M')
sex = 'F';
4
}
public Persoana( String numePers, String prenumePers ) {
nume = numePers;
prenume = prenumePers;
varsta = 0;
inaltimea = 0;
sex = 'F';
}
void afiseazaInformatii() {
System.out.println("-Date despre persoana -");
System.out.println("Numele: " + nume + " "+prenume);
System.out.println("Varsta: " + varsta);
System.out.println("Inaltimea: " + inaltimea);
System.out.println("Sexul: " + ((sex=='F') ? "feminin" : "masculin"));
}
public static void main(String argv[])
{
5
Persoana pers=new Persoana(“Ionescu", "George", 25, 180,'M');
pers.afiseazaInformatii();
return ;
}
}
2. Lucru cu clase in Java
Modificatori de vizibilitate si de drepturi de acces
Modificatorii sunt cuvinte cheie care se plaseaza in fata definitiei clasei, a atributelor si
metodelor si stabilesc drepturile de acces ale clientilor la membrii unei clase. Prin client se
intelege orice alta metoda sau clasa care refera sau utilizeaza membrul respectiv din
exterior.
ATENTIE: In interiorul unei clase toti membrii pot fi accesati nerestrictiv, fara a se tine cont
de modificatorii de acces.
Modificatorii de vizibilitate sunt:
public
private
protected
6
Clientii unei clase pot accesa doar acei membri care au ca modificator de acces cuvantul
public.
Membrii declarati cu modificatorul private nu sunt vizibili in afara (sunt ascunsi exteriorului
clasei). Ei nu pot fi nici folositi nici modificati din alta clasa.Modificatorul protected este
utilizat in contextul ierarhiilor de clase.
Regula pentru folosirea acestori modificatori este urmatoarea: atributele se vor declara in
general folosind modificatorul private iar metodele se vor declara publice. Acest lucru
permite ascunderea starii unui obiect, pentru a putea controla accesul si modificarea
acesteia din exterior.
Daca un membru este declarat fara nici un modificator de acces, el se considera accesibil la
nivelul pachetului curent.
Pentru a defini constante care sa desemneze atributele unei clase care nu isi pot modifica
valoarea se poate folosi modificatorul final inaintea lor.
Task 2: Compilati si rulati urmatorul program
/**
* Clasa Persoana descrie datele si comportamentul unei persoane
*/
public class Persoana {
/* Atributele clasei */
7
private String nume; // numele de familie
private String prenume; // prenumele persoanei
private int varsta; // varsta in ani impliniti
private double inaltimea; // inaltimea persoanei in cm
private char sex; // sexul persoanei. Valori posibile 'F' sau 'M'
public Persoana( String numePers, String prenumePers,
int varstaPers, double inaltimeaPers, char sexPers) {
nume = numePers;
prenume = prenumePers;
varsta = varstaPers;
inaltimea = inaltimeaPers;
sex = Character.toUpperCase(sexPers);
if (sex!='F' && sex!='M')
sex = 'F';
}
public String getNume() {
return nume+" "+prenume;
8
}
public int getVarsta() {
return varsta;
}
public double getInaltimea() {
return inaltimea;
}
public String getSex() {
String s;
switch (sex) {
case 'F': s = "feminin"; break;
case 'M': s = "masculin"; break;
default: s = "neprecizat";
System.out.println("Atributul sex are o valoare eronata!"); break;
}
return s;
}
9
public void setNume(String numeNou) {
if (sex=='F')
nume = numeNou;
else
System.out.println("Nu se permite schimbarea numelui unei persoane de sex masculin!");
}
public void setVarsta(int varstaNoua) {
if (varstaNoua>=0 && varstaNoua<150)
varsta = varstaNoua;
else
System.out.println("Varsta gresita!");
}
public void setInaltimea(double inaltimeaNoua) {
if (inaltimeaNoua>=10.0 && inaltimeaNoua<251.0)
inaltimea = inaltimeaNoua;
else
10
System.out.println("Inaltimea gresita!");
}
void afiseazaInformatii() {
System.out.println("- Date despre persoana -");
System.out.println("Numele: " + getNume());
System.out.println("Varsta: " + getVarsta());
System.out.println("Inaltimea: " + getInaltimea());
System.out.println("Sexul: " + getSex());
}
public static void main(String argv[])
{
Persoana pers=new Persoana("Bucur", "Simona",20,175,'F');
pers.setNume("Enculescu");
pers.setVarsta(25);
pers.setInaltimea(180);
pers.afiseazaInformatii();
return ;
11
}
}
Un modificator special este modificatorul static. El permite specificarea membrilor statici
sau membri de clasa. Acesti membri vor exista in exemplare unice pentru fiecare clasa, fiind
accesati in comun de toate instantele clasei respective. Mai mult, membrii statici pot fi
referiti chiar si fara a instantia clasa, ei nedepinzand de obiecte. Implicit membrii definiti
sunt non-statici (se mai numesc si membri ai instantelor) deoarece fiecare instanta isi are
propriile exemplare ale membrilor respectivi.
Pentru a defini un membru static se utilizeaza modifcatorul static, plasat dupa modificatorul
de acces:
modificator_acces static tip_membru nume_membru;
Referirea unui membru static nu se va face prin intermediul numelui obiectului, ci prin
intermediul numelui clasei:
nume_clasa.nume_membru_static
Intr-o metoda statica nu este permisa referirea simpla a unui membru non-static. Acest
lucru se explica prin aceea ca un membru non-static exista doar in interiorul unui obiect, pe
cand membrii statici exista independent de obiecte.
Crearea instantelor
In Java toate instantele unei clase se creaza in mod dinamic;
12
Declararea unei variabile care are ca si tip o clasa nu aloca memorie pentru o instanta a
acelei clase.
Persoana pers;
Declaratia anterioara creaza doar o variabila care poate referi o instanta a clasei respective.
Implicit valoarea variabilei este "null" (nu refera nici un obiect).
Crearea unei instante presupune aplicarea operatorului new de alocare dinamica:
p1 = new Persoana( "Popescu", "Adrian", 25, 180, 'M');
Operatorul new va aloca spatiul de memorie necesar instantei si apoi va chema
constructorul clasei respective pentru a face initializarile. Toate argumentele din paranteze
vor fi transmise constructorului.
Dupa initializare, referintele vor putea fi folosite pentru a accesa metodele si atributele
obiectelor create. Notatia foloseste indicatorul '.':
nume_referinta . nume_atribut
nume_referinta . nume_metoda ( lista_parametri)
Exemplu:
public static void main(String argv[])
{
Persoana pers=new Persoana("Bucur", "Simona",20,175,'F');
13
pers.setNume("Enculescu");
pers.setVarsta(25);
pers.setInaltimea(180);
pers.afiseazaInformatii();
return ;
}
3. Taskuri
Task 3. Creati un tablou cu persoanele ce alcatuiesc grupa din care faceti parte si aflati
varsta si inaltimea medie ale grupei impreuna cu o statistica privind numarul de fete si
numarul de baieti.
Bibliografie: http://www.opendrum.upt.ro/
14