laborator9.pdf

5
ROMÂNIA Universitatea Politehnica din Bucuresti Facultatea de Antreprenoriat, Ingineria si Managementul Afacerilor Programarea Calculatoarelor - Laboratorul 9 Responsabil: Şl.dr.ing. Bogdan Ţigănoaia, [email protected] Obiectivele laboratorului sunt urmatoarele: Prezentarea notiunii de mostenire Lucrul cu ierarhii de clase in Java 1. Prezentarea notiunii de mostenire Moștenirea permite definirea şi crearea unor clase specializate plecând de la clase (generale) care sunt deja definite. Ea permite construirea unor clase noi, care păstrează caracteristicile şi comportarea, deci datele şi funcţiile membru, de la una sau mai multe clase definite anterior, numite clase de bază, fiind posibilă redefinirea sau adăugarea unor date şi funcţii noi. O clasă ce moşteneşte una sau mai multe clase de bază se numeşte clasa derivată. Atat variabilele, cat si metodele pot fi statice sau nestatice. 1

Upload: alex-serban

Post on 07-Dec-2015

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Laborator9.pdf

ROMÂNIA

Universitatea Politehnica din Bucuresti

Facultatea de Antreprenoriat, Ingineria si Managementul Afacerilor

Programarea Calculatoarelor - Laboratorul 9

Responsabil: Şl.dr.ing. Bogdan Ţigănoaia, [email protected]

Obiectivele laboratorului sunt urmatoarele:

Prezentarea notiunii de mostenire

Lucrul cu ierarhii de clase in Java

1. Prezentarea notiunii de mostenire

Moștenirea permite definirea şi crearea unor clase specializate plecând de la clase (generale)

care sunt deja definite. Ea permite construirea unor clase noi, care păstrează caracteristicile şi

comportarea, deci datele şi funcţiile membru, de la una sau mai multe clase definite anterior,

numite clase de bază, fiind posibilă redefinirea sau adăugarea unor date şi funcţii noi.

O clasă ce moşteneşte una sau mai multe clase de bază se numeşte clasa derivată.

Atat variabilele, cat si metodele pot fi statice sau nestatice.

1

Page 2: Laborator9.pdf

Proprietatea de moştenire: proprietatea claselor prin care o clasă nou construită poate prelua

datele şi metodele clasei mai vechi.

Clasa derivată se află întotdeauna pe un nivel imediat inferior celui corespunzător clasei de

bază.

În Java există doar moştenire simplă, o ierarhie de clase în care fiecare clasă derivată are o

singură clasă de bază.

Exemplu:

Paralelogram

Dreptunghi Romb

Pătrat

Clasa dreptunghi este o clasă derivată (subclasă) a clasei paralelogram, iar clasa

paralelogram este o clasă de bază (supraclasă) a clasei dreptunghi. Astfel, o ierarhie de

concepte conduce la o ierarhie între clasele care implementează conceptele ierarhice

respective.

2. Lucrul cu ierarhii de clase in Java

Unul dintre avantajele oferite de tehnologia POO este posibilitatea de a extinde

comportamentul unei clase existente prin definirea unei clase noi care mosteneste

continutul primei clase, adaugand la acesta elemente specifice.

Clasa existenta, care va fi mostenita se mai numeste clasa de baza sau superclasa. Clasa care

realizeaza extinderea se numeste subclasa, clasa derivata sau clasa descendenta.

2

Page 3: Laborator9.pdf

Relatia de mostenire este o relatie de forma "este un fel de", adica subclasa "este un fel de"

superclasa. De altfel, daca se pune problema de a decide daca o anumita clasa trebuie sau

nu sa mosteneasca o alta clasa, decizia se va lua in functie de raspunsul la intrebarea: este

prima clasa "un fel de" cealalta clasa? Practic, relatia de mostenire intre clase este o

reflectare a ierarhizarii existente intre entitatile modelate de clasele respective.

Pentru a specifica faptul ca o subclasa mosteneste o clasa de baza, in Java se utilizeaza

urmatoarea constructie:

class nume_subclasa extends nume_superclasa {

//continut specific subclasei

}

In ceea ce priveste gradul relatiei de mostenire, in Java: o subclasa poate extinde o singura

superclasa, adica avem de a face cu mostenire simpla; aceeasi superclasa poate fi extinsa de

mai multe subclase distincte.

O subclasa, la randul ei, poate constitui superclasa pentru o alta clasa. O clasa de baza

impreuna cu toate descendentele ei formeaza o ierarhie de clase.

In metodele unei subclase pot fi referiti acei membri mosteniti care in superclasa au fost

precedati de modificatorii protected sau public. Referirea membrilor mosteniti se face

direct la fel ca si pentru membrii specifici. Acest lucru este foarte normal, deoarece si

membrii mosteniti sunt continuti in subclasa, doar ca ei nu au fost declarati explicit.

Includerea lor se face automat, ca efect al clauzei extends.

3

Page 4: Laborator9.pdf

In clientii unei subclase pot fi referiti acei membri, mosteniti sau locali, care sunt precedati

de modificatorul public. Membrii declarati ca protected sunt accesibili doar daca clientul se

afla in acelasi pachet cu subclasa respectiva.

Task 1: Compilati si rulati programul urmator

/**

* Clasa Student - derivata din clasa Persoana

*

*/

public class Student extends Persoana {

static int nr_ani = 5;

int an_studiu;

public Student(String numePers, String prenumePers,

int varstaPers, double inaltimeaPers, char sexPers) {

super(numePers, prenumePers, varstaPers, inaltimeaPers, sexPers);

an_studiu = 1;

}

public Student(String numePers, String prenumePers) {

super(numePers, prenumePers);

an_studiu = 1;

}

public void afiseazaInformatii() {

super.afiseazaInformatii();

System.out.println("Anul de studiu: "+an_studiu);

4

Page 5: Laborator9.pdf

}

public static void main(String args[]) {

Student s1 = new Student("Dragos","Elena");

Persoana p1;

p1 = s1;

s1.afiseazaInformatii();

p1.afiseazaInformatii();

}

}

3. Taskuri

Task 2: Adaugati metode de citire de la tastatura si, respectiv afisare la consola a unei

persoane, respectiv a unui student. Metodele din clasa Student vor folosi apelul la

metodele de citire/scriere din clasa Persoana si vor adauga doar ce este necesar.

Task 3: Creati o noua clasa Angajat derivata din clasa Persoana, la care se vor adauga

atribute si metode specifice.

Bonus: Scrieti un program care citeste o serie de 5 persoane, le retine intr-un tablou si apoi

afiseaza datele despre ele prin parcurgerea liniara a tabloului. Pentru citire/afisare date se vor

apela metodele adaugate la Task2.

Bibliografie: http://www.opendrum.upt.ro/ , Note de curs Nirvana Popescu

5