36
Konposizioa, herentzia eta polimorfismoa Aitor G ´ omez-Goiri [email protected] Deustuko Unibertsitatea Ingeniaritza fakultatea http://www.deusto.es 2012/02/15

Konposizioa, herentzia eta polimorfismoa

Embed Size (px)

DESCRIPTION

Programazioa II (2012): 3. gaia

Citation preview

Page 1: Konposizioa, herentzia eta  polimorfismoa

Konposizioa, herentziaeta polimorfismoa

Aitor [email protected]

Deustuko UnibertsitateaIngeniaritza fakultateahttp://www.deusto.es

2012/02/15

Page 2: Konposizioa, herentzia eta  polimorfismoa

Aurkezpena

1 Zertarako?

2 Konposizioa

3 HerentziaAtributuen herentziaMetodoen herentzia

Page 3: Konposizioa, herentzia eta  polimorfismoa

Aurkezpena

1 Zertarako?

2 Konposizioa

3 Herentzia

Page 4: Konposizioa, herentzia eta  polimorfismoa

Zertarako behar ditugu klaseak zuen ustez?

Page 5: Konposizioa, herentzia eta  polimorfismoa

Zertarako behar ditugu klaseak zuen ustez?

Errealitatea modelatzekoAtributuak: zerMetodoak: nola

Javan ia edozer da objektu batbaina badaude programatzeko beste erak

Page 6: Konposizioa, herentzia eta  polimorfismoa

Aurkezpena

1 Zertarako?

2 Konposizioa

3 Herentzia

Page 7: Konposizioa, herentzia eta  polimorfismoa

Klase baten atributuak

Zer atributu mota eduki ditzake?intboolean...¿?

Page 8: Konposizioa, herentzia eta  polimorfismoa

Pertsona baten atributuak

Page 9: Konposizioa, herentzia eta  polimorfismoa

Ikusgarritasuna

privateBakarrik erabili ahal dugu definituta dagoen klasearenbarnean.

protectedBakarrik erabili ahal dugu klase berberan, ondorengoetanedo pakete bereko klaseetan.

publicEdonondik erabili dezakegu.

Page 10: Konposizioa, herentzia eta  polimorfismoa

Aurkezpena

1 Zertarako?

2 Konposizioa

3 HerentziaAtributuen herentziaMetodoen herentzia

Page 12: Konposizioa, herentzia eta  polimorfismoa

Zertarako behar dugu herentzia?

Kodea berrerabiltzekoez berridazteko eta mantenimendua errezteko.

Klaseak zehazteko edo konplexuagoak egiteko

Page 13: Konposizioa, herentzia eta  polimorfismoa

Herentzia Javan

Klase guztiak dira Object Klasearen “ondorengoak”Klase bakoitza Klase guraso bakarra du

ImplizitoaExplizitoa

Page 14: Konposizioa, herentzia eta  polimorfismoa

Herentzia motak

Deklarazio implizitoa (Objectik)

public class KlasearenIzena {

...

}

Deklarazio explizitoa

public class KlasearenIzena extends GurasoarenIzena {

...

}

Page 15: Konposizioa, herentzia eta  polimorfismoa

Zer heredatzen da?

Page 16: Konposizioa, herentzia eta  polimorfismoa
Page 17: Konposizioa, herentzia eta  polimorfismoa

Atributuen herentzia

Klase baten protected edo public atributuguztiak bere seme-alabek heredatuko dituzte

Ez private!

Seme-alabek gurasoek definitu ez dituztenatributuak definitu ditzaketeSeme-alabek ezin dute gurasoak definitutakoatributuak kendu

Page 18: Konposizioa, herentzia eta  polimorfismoa

Nola heredatu atributuak?

public class Gurasoa {

protected int atrributu1;

protected String atributu2;

...

}

...

public class SemeAlaba extends Gurasoa {

protected int atributu3;

...

}

...

Gurasoa gu = new Gurasoa();

SemeAlaba sa = new SemeAlaba();

sa.atributu1 = 24;

sa.atributu3 = 4;

// ez!!! => gu.atributu3 = 23;

Page 19: Konposizioa, herentzia eta  polimorfismoa

Zer heredatzen da?

Page 20: Konposizioa, herentzia eta  polimorfismoa
Page 21: Konposizioa, herentzia eta  polimorfismoa

Metodoen herentzia

protected edo public diren metodo guztiak klaseseme-alabetan heredatzen dira

private ez!

Klase seme-alabak metodo berriak definitu ditzakeGurasotik heredatutako kodea berdefinitu dezake

Ezin du kendu, baina bai guztiz aldatu

Page 22: Konposizioa, herentzia eta  polimorfismoa

Nola heredatu metodo bat? I

public class Gurasoa {

...

public void metodoa1() {

System.out.println("Gurasoan nago definituta!");

}

...

}

...

public class SemeAlaba extends Gurasoa {

... // ez du metodoa1 definitzen

}

...

SemeAlaba sa = new SemeAlaba();

sa.metodoa1();

Page 23: Konposizioa, herentzia eta  polimorfismoa

Nola heredatu metodo bat? II

public class Gurasoa {

...

public void metodoa1() {

System.out.println("Gurasoan nago definituta!");

}

...

}

...

public class SemeAlaba extends Gurasoa {

...

// birdefinitu

public void metodoa1() {

System.out.println("Semean nago definituta!");

}

}

...

SemeAlaba sa = new SemeAlaba();

sa.metodoa1();

Page 24: Konposizioa, herentzia eta  polimorfismoa

Super

KonstruktoreanLehenengo sententzia klase gurasoaren konstruktorearendeia da

super(param1, param2);

Ez bada idazten, Javak inplizituki parametrorik gabekokonstructoreari deituko dio

super();

Edozein metodoaren barnean, ”super.” erabiliz“this” erabiltzen dugun moduan

super.metodo1(); // aitaren ‘‘metodo1’’ deitzen du

Page 25: Konposizioa, herentzia eta  polimorfismoa

Polimorfismoa

Metodo bat deitzen duen objektuaren motaren arabera eradesberdinean jokatzea ahalbidetzen duen propietatea da.

IrudiGeometrikoa fig = new Zirkulua(3);

// zirkuluaren azalera erakusten du

System.out.println(fig.area());

IrudiGeometrikoa fig = new Errektangelua(5, 7);

// Errektangeluaren azalera erakusten du

System.out.println(fig.area());

Page 26: Konposizioa, herentzia eta  polimorfismoa

Bateragarritasuna

B klasea Aren semea bada, edozei B klasekoa denedozein objektu, A klasekoa izango da baita ere

Gutxienez, B klaseko objektua A klaseko baten atributu etametodo berdinak izango dituBeraz, A klaseko objektuekin egin dezakegun edozeingauza, B klasekoekin ere egin dezakegu

¿Eta alderantziz?A obj1 = (A) obj2; // obj2 B klasekoa izandaKastinga ez du aldatzen objektuaren balioa, bakarrikikusten dugu ”beste ikuspegi batetik”, baina objektu bera daBakarrik egin dezakegu hierarkian zehar, ez ”horizontalki”

Page 27: Konposizioa, herentzia eta  polimorfismoa

Bateragarritasuna

Izen berdina duten zenbait metodo existitu daitekeBaldin eta parametro desberdinak jasotzen baduteKasurik argienak konstruktoreak dira

public void pantailanErakutsi(String izena) {

System.out.println(izena);

}

public void pantailanErakutsi(String izena, String abizena) {

System.out.println(izena+" "+abizena);

}

Page 28: Konposizioa, herentzia eta  polimorfismoa

Abstract

Kontzeptuak modelatzekoKlase abstraktua

Ezin da instantziatu (new KlaseAbs()), baina ondorengoakizan ahal dituEz ditu zertan metodo abstraktuak eduki behar

Metodo abstraktuaImplementaziorik gabe deklaratzen den metodoa da(giltzarik gabe, ondoren puntu eta koma bat jarriz):

abstract void moveTo(double deltaX, double deltaY);

Klase batek metodo abstraktuak baldin baditu, klase horiabstraktua deklaratu beharko da ere.

Page 29: Konposizioa, herentzia eta  polimorfismoa
Page 30: Konposizioa, herentzia eta  polimorfismoa

Galderak: bateragarritasuna (I)

Klase hierarkia hau edukita:Eta honako objektuak baditugu...

A a = new A();

B b = new B();

C c = new C();

D d = new D();

E e = new E();

Posiblea da...

Page 31: Konposizioa, herentzia eta  polimorfismoa

Galderak: bateragarritasuna (II)

A m = b;

A n = c;

B o = d;

B p = c;

B q = (B) e;

A r = (A) d;

D s = (D) a;

B t = (B) n;

C u = (C) e;

C v = (E) e;

C w = (C) a;

C y = (C) n;

C z = (C) m;

B h = (B) m;

Page 32: Konposizioa, herentzia eta  polimorfismoa

Galderak: abstrakzioa

Zein izan daiteke posible?Klase abstraktua

A abstract da, A aldagaia = new A();A ez da abstract, baina b() abstact metodoa duA abstract klasea da eta b() metodoa ez da abstractA abstract da eta b() metodo abstract-a du

B ondorengoa du, eta honek e() eta d() metodoak definitzendituB aldagaia = new B();

Page 33: Konposizioa, herentzia eta  polimorfismoa

Galderak: herentzia

Honako klase hierarkia edukita...A klasea (a eta b metodoak)B klasea (d metodo abstraktua)C (e metodoa duena)

Posiblea da...A a = new A();B b = new C();C c = new C();

a.a();

a.b();

a.d();

a.e();

b.a();

b.b();

b.d();

b.e();

c.a();

c.b();

c.d();

c.e();

Page 34: Konposizioa, herentzia eta  polimorfismoa

Galderak: polimorfismoa (1)

Honako hierarkia duguKlase abstraktua

A klasea

public A() { sysout("konstruktore1"); }

public A(String e) { sysout("konstruktore2"); }

public A(int e) { this(); sysout("konstruktore3"); }

public erakutsi() { sysout("ABC"); }

public erakutsi(String a) { sysout(a); }

B klasea (A-ren ondorengoa dena)

public B() {}

public B(String e) { super(e); }

public B(float e) { super((int) e); };

public erakutsi() { sysout("DEF"); }

public erakutsi(String a) { super.erakutsi(); }

Page 35: Konposizioa, herentzia eta  polimorfismoa

Galderak: polimorfismoa (2)

Zer gertatuko litzateke...

A a = new A();

B b = new B();

A c = new A("eo");

A d = new B("eo");

B e = new B(33f);

B f = new B(33);

A g = new A(33f);

A h = new A(33);

d.erakutsi();

c.erakutsi();

b.erakutsi("aa");

a.erakutsi("eo");

Ordenagailuan frogatu!