Sunteți pe pagina 1din 7

Laborator 3:

Introducere n Programarea Orientat pe Obiecte

ntocmit de: Adina Neculai


ndrumtor: Asist. Drd. Gabriel Danciu
23 octombrie 2011

I.

NOIUNI TEORETICE
A.

Clase i obiecte

Unul dintre conceptele care definete programarea orientat pe obiecte este obiectul. Obiectul
este caracterizat prin stare, modelat de atributele unei clase, i prin comportament, modelat de
metodele unei clase.
Un alt concept este clasa. Clasa este o colecie de obiecte care partajeaz aceeai lista de
atribute informaionale (de stare) i comportamentale. Aadar, aceasta reprezint att structura
unui obiect, ct i funcionalitatea acestuia. Mai mult, n acest context se spune c obiectul este o
instan a unei clase.
Forma general a unei clase:
[lista_Modificatori] class NumeClasa[extends NumeClasaDeBaza][implements lista_Interfata]
{
corp clasa
}

Definiia unei clase trebuie s conin obligatoriu cuvntul cheie class, numele clasei i corpul
clasei prins ntre acolade. Toi ceilali termeni pot lipsi. Vom discuta despre aceti termeni la
momentul potrivit.

B.

Suprancrcarea metodelor

Forma general a unei metode:


[lista_Modificatori] tip_de_returnat numeMetoda([lista_parametrii])
{
corp metoda
}

O metod se definete prin semntur i prin corp. Semntura const n tipul returnat, numele
metodei i lista de parametri, pe cnd corpul metodei este reprezentat de instruciuni.
n Java, n aceeai clas, se pot defini metode cu acelai nume, dar cu semnturi diferite.
Diferena poate consta n numrul de parametri, n tipul de date al acestora sau n ambele. Acest

proces se numete suprancrcare. Este important de reinut c Java nu ia n considerare tipul


valorii returnate pentru a face diferenierea metodelor suprancrcate.
Motivul pentru care se folosesc acest gen de metode este c se elimin nevoia de a defini metode
complet diferite care s fac n principiu acelai lucru. De asemenea, suprancrcarea face posibil
comportarea diferit a metodelor n funcie de argumentele primite.

C.

Constructori

ntr-o clas, pe lng atribute i metode, se pot defini i constructori. Acetia sunt un tip de
metod special cu urmtoarele caracteristici:
numele lor trebuie s fie identic cu cel al clasei din care fac parte;
nu au tip de returnat.
[lista_Modificatori] NumeClasa([lista_parametrii])
{
corp constructor
}

Constructorii sunt utilizai pentru instanierea unui obiect care face parte dintr-o anumit clas
i sunt apelai n funcie de variabilele pe care le primesc ca parametru. n cazul n care nu se
declar niciun constructor(doar n acest caz) compilatorul creeaz un constructor implicit, avnd
numele clasei, fr niciun parametru formal i avnd corpul constructorului fr instruciuni.
Metodele constructor pot fi i ele suprancrcate, la fel ca metodele obinuite, pentru a crea un
obiect care are proprieti specifice n funcie de argumentele transmise prin operatorul new.

D.

Motenire

Unul dintre principiile programrii orientate pe obiecte este motenirea. Acest principiu se
bazeaz pe extinderea comportamentului unei clase existente prin definirea unei clase noi care
motenete coninutul primei clase la care se adaug noi proprieti i funcionaliti.
Clasa existent, care va fi motenit, se numete clasa de baz, clas printe sau superclas.

Clasa care realizeaz extinderea se numete subclas, clas derivat, clas descendent sau clas
copil. Cuvntul predefinit care se utilizeaz pentru motenire este extends.
[lista_Modificatori] class NumeSubclasa [extends NumeClasaDeBaza]
{
corp subclasa
}

n ce privete tipul de motenire, n Java este permis doar cea simpl. Adic, o subclas poate
extinde o singur superclas. n aceeai ordine de idei, o superclas poate fi motenit de mai
multe subclase diferite. Motenirea multipl nu este permis n Java, dar este simulat cu ajutorul
interfeelor. Acest aspect l vom trata ulterior.
Prin operaia de derivare, constructorii clasei de baz nu se motenesc, n schimb fiecare
constructor al clasei derivate apeleaz un constructor al clasei de baz. Acest apel se poate face
implicit(adugat de compilator) sau explicit. Apelul explicit se face prin intermediul cuvntului
cheie super. n plus, constructorii se apeleaz n ordinea derivrii, de la superclas la sublcas.
public class NumeSubclasa extends NumeClasaDeBaza {
NumeSubclasa(){
super();
//alte instructiuni constructor
}
}

II.

PREZENTAREA LUCRRII DE LABORATOR

A.

Suprancrcarea metodelor i constructorilor

Codul surs urmtor exemplific conceptul de clas i obiect, mpreun cu ideea de suprancrcare att a constructorilor unei clase, ct i a metodelor unei clase. Clasa Point are ca atribute
coordonatele in plan ale unui punct i calculeaz distana ntre dou puncte. Metoda care descrie
funcionalitatea clasei Point (computeDistance()) este suprancrcat. Acest lucru s-a realizat prin
schimbarea numrului de parametri ai acesteia i tipul lor.(observai linia de cod 29)

1 public c l a s s
2

Point {

public double x , y ;

3
4

public P o i n t ( ) { // c o n s t r u c t o r

//

this

e s t e un c u v a n t

numeste
6

fara

cheie

ce

parametri
reprezinta

obiectul

curent

al

clasei ,

i n t r u c a t nu s e

s t i e cum s e

obiectul

this . x = 0;

this . y = 0;

9
10

// c o n s t r u c t o r cu 2 p a r a m e t r i ;

11

public P o i n t ( double x , double y ) {

12

constructorul a fost

supraincarcat

this . x = x ;

13

this . y = y ;

14

15
16

// c o n s t r u c t o r cu un p a r a m e t r u ;

17

public P o i n t ( double x ) {

18

constructorul a fost

supraincarcat

this . x = x ;

19

this . y = 0;

20

21
22

// metoda c a l c u l e a z a

23

public s t a t i c double c o m p u t e D i s t a n c e ( P o i n t p1 ,

24

// s e

folosesc

distanta

metode a l e

i n t r e 2 puncte

c l a s e i Math d i n

return Math . s q r t ( Math . pow ( p1 . x p2 . x ,

25
26

aflate

in

plan

P o i n t p2 ) {

pachetul

java . lang

2 ) + Math . pow ( p1 . y p2 . y ,

2) ) ;

27
28

// metoda e s t e

29

public s t a t i c double c o m p u t e D i s t a n c e ( double x1 , double y1 , double x2 , double y2 ) {

supraincarcata

return Math . s q r t ( Math . pow ( x1 x2 ,

30
31

2 ) + Math . pow ( y1 y2 ,

2) ) ;

32
public s t a t i c double c o m p u t e D i s t a n c e ( P o i n t p1 ) { / metoda e s t e

33
34

return Math . s q r t ( Math . pow ( p1 . x ,

35

2 ) + Math . pow ( p1 . y ,

s u p r a i n c a r c a t a /

2) ) ;

36
37

public S t r i n g

38

toString (){

return " x= "+x+" ; y= "+y ;

39

40 }

Urmtoarea clas creeaz obiecte de tipul Point. Aceste obiecte sunt instaniate n moduri
diferite. De asemenea, se apeleaz metoda static computeDistance() cu parametri diferii.
1 public c l a s s
2

TestPoint {

public s t a t i c void main ( S t r i n g [ ]

args ) {

P o i n t p1 = new P o i n t ( ) ;

System . o u t . p r i n t l n ( " I n s t a t i e r e o b i e c t p r i n c o n s t r u c t o r f a r a p a r a m e t r i : P1 : "+p1 . t o S t r i n g ( ) ) ;

P o i n t p2 = new P o i n t ( 2 ,

System . o u t . p r i n t l n ( " I n s t a t i e r e o b i e c t p r i n c o n s t r u c t o r cu 2 p a r a m e t r i : P2 : "+p2 . t o S t r i n g ( ) ) ;

2) ;

P o i n t p3 = new P o i n t ( 3 ) ;

System . o u t . p r i n t l n ( " I n s t a t i e r e o b i e c t p r i n c o n s t r u c t o r cu 1 p a r a m e t r u : P3 : "+p3 . t o S t r i n g ( ) ) ;

9
10

System . o u t . p r i n t l n ( " C a l c u l e a z a d i s t a n t a i n t r e P2 s i P3 : "+P o i n t . c o m p u t e D i s t a n c e ( p2 , p3 ) ) ;

11

System . o u t . p r i n t l n ( " C a l c u l e a z a d i s t a n t a i n t r e P2 s i P3 : "+P o i n t . c o m p u t e D i s t a n c e ( p2 . x , p2 . y , p3 . x , p3


. y) ) ;

12

System . o u t . p r i n t l n ( " C a l c u l e a z a d i s t a n t a i n t r e P ( 0 , 0 ) s i P2 : "+P o i n t . c o m p u t e D i s t a n c e ( p2 ) ) ;

13

14 }

B.

Motenire

Pentru a exemplifica principiul motenirii se d clasa de baz Fruct.


1 public c l a s s F r u c t {
2

private S t r i n g

tipFruct ;

3
4

public F r u c t ( S t r i n g

tipFruct ) {

this . tipFruct = tipFruct ;

System . o u t . p r i n t l n ( " C o n s t r u c t o r F r u c t . . . " ) ;

8
9

// metoda g e t T i p F r u c t

e s t e una de t i p

final ,

adica

a c e a s t a nu mai p o a t e

fi

m o d i f i c a t a de

clasele

care o

mostenesc
10

final

11

String

getTipFruct () {

return t h i s . t i p F r u c t ;

12

13 }

Clasa Para este subclas a clasei Fruct. Para este un fruct, aadar se respect principiul motenirii. n clasa Para se adaug noi atribute informaionale (greutate, culoare) i un nou comportament
reprezentat de metodele getGreutate(), getCuloare().
1 public c l a s s Para extends F r u c t {
2

// a t r i b u t e l e

p r i v a t e double g r e u t a t e ;

sunt

private ,

private S t r i n g

deci

domeniul

lor

de

vizibilitate

se

afla

doar i n

cadrul

clasei

Para

culoare ;

5
6

public Para ( S t r i n g

t i p F r u c t , double g r e u t a t e ,

super ( t i p F r u c t ) ;

System . o u t . p r i n t l n ( " C o n s t r u c t o r Para . . . " ) ;

this . greutate = greutate ;

10

// a p e l a r e

S t r i n g forma ) {

explicita a constructorului

clasei

de baza cu p a r a m e t r u l

tipFruct

t h i s . c u l o a r e = forma ;

11

12
13

// m e t o d e l e s u n t

14

public double g e t G r e u t a t e ( ) {

15

publice

si

deci

pot

fi

vazute

si

in

afara

clasei ,

spre

d e o s e b i r e de a t r i b u t e

return g r e u t a t e ;

16

17
18

public S t r i n g

19

getCuloare () {

return c u l o a r e ;

20

21 }

Clasa TestFruct instaniaz un obiect de tip Para, implicit de tip Fruct. De aceea avem acces
i la metoda getTipFruct() care nu aparine propriu-zis clasei Para.
6

1 public c l a s s
2

TestFruct {

public s t a t i c void main ( S t r i n g [ ]

args ){

Para obPara = new Para ( " p a r a " , 3 , " g a l b e n " ) ;

System . o u t . p r i n t l n ( " Tip F r u c t : "+obPara . g e t T i p F r u c t ( ) ) ;

System . o u t . p r i n t l n ( " g r e u t a t e : "+obPara . g e t G r e u t a t e ( ) ) ;

6
7

// r e f e r i n t a

de

tipul

para

// a p e l a r e metoda d i n
// a p e l a r e metoda d i n

c l a s a de baza
sublclasa

System . o u t . p r i n t l n ( " c u l o a r e : "+obPara . g e t C u l o a r e ( ) ) ;


}

8 }

Observai n urma rulrii aplicaiei ordinea n care se apeleaz constructorii.

III.

TEM

1. S se construiasc o clas Fractie care s implementeze operaiile de adunare, scdere, nmulire, mprire i simplificare. S se foloseasc aceast clas ntr-un program.
2. S se construiasc o clas Forma2D i o clas Cerc care motenete clasa Forma2D. S se
afieze lungimea cercului i suprafaa acestuia.