konposizioa, herentzia eta polimorfismoa
DESCRIPTION
Programazioa II (2012): 3. gaiaTRANSCRIPT
![Page 1: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/1.jpg)
Konposizioa, herentziaeta polimorfismoa
Aitor [email protected]
Deustuko UnibertsitateaIngeniaritza fakultateahttp://www.deusto.es
2012/02/15
![Page 2: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/2.jpg)
Aurkezpena
1 Zertarako?
2 Konposizioa
3 HerentziaAtributuen herentziaMetodoen herentzia
![Page 3: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/3.jpg)
Aurkezpena
1 Zertarako?
2 Konposizioa
3 Herentzia
![Page 4: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/4.jpg)
Zertarako behar ditugu klaseak zuen ustez?
![Page 5: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/6.jpg)
Aurkezpena
1 Zertarako?
2 Konposizioa
3 Herentzia
![Page 7: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/7.jpg)
Klase baten atributuak
Zer atributu mota eduki ditzake?intboolean...¿?
![Page 8: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/8.jpg)
Pertsona baten atributuak
![Page 9: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/10.jpg)
Aurkezpena
1 Zertarako?
2 Konposizioa
3 HerentziaAtributuen herentziaMetodoen herentzia
![Page 12: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/12.jpg)
Zertarako behar dugu herentzia?
Kodea berrerabiltzekoez berridazteko eta mantenimendua errezteko.
Klaseak zehazteko edo konplexuagoak egiteko
![Page 13: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/13.jpg)
Herentzia Javan
Klase guztiak dira Object Klasearen “ondorengoak”Klase bakoitza Klase guraso bakarra du
ImplizitoaExplizitoa
![Page 14: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/14.jpg)
Herentzia motak
Deklarazio implizitoa (Objectik)
public class KlasearenIzena {
...
}
Deklarazio explizitoa
public class KlasearenIzena extends GurasoarenIzena {
...
}
![Page 15: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/15.jpg)
Zer heredatzen da?
![Page 16: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/16.jpg)
![Page 17: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/19.jpg)
Zer heredatzen da?
![Page 20: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/20.jpg)
![Page 21: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/29.jpg)
![Page 30: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/35.jpg)
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!
![Page 36: Konposizioa, herentzia eta polimorfismoa](https://reader033.vdocuments.net/reader033/viewer/2022052316/55890092d8b42a1e708b4628/html5/thumbnails/36.jpg)
Lizentzia
Irudien guztien jabetza intelektuala bere egileena* da,gainontzeko edukiak Creative Commons by-sa 3.0
lizentziapean daude.
* heididorf, jakecaptive, ArtFavor, J. Cameron (public domain), freecat,Marcelo Mathias Lima, owenbooth, mikebaird, ableman eta oberazzi.