laborator8.pdf

14
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

Upload: alex-serban

Post on 10-Feb-2016

214 views

Category:

Documents


0 download

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