Konposizioa, herentzia eta polimorfismoa

461 views

Published on

Programazioa II (2012): 3. gaia

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
461
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Konposizioa, herentzia eta polimorfismoa

  1. 1. Konposizioa, herentzia eta polimorfismoa ´ Aitor Gomez-Goiri aitor.gomez@deusto.es Deustuko Unibertsitatea Ingeniaritza fakultatea http://www.deusto.es 2012/02/15
  2. 2. Aurkezpena 1 Zertarako? 2 Konposizioa 3 Herentzia Atributuen herentzia Metodoen herentzia
  3. 3. Aurkezpena 1 Zertarako? 2 Konposizioa 3 Herentzia
  4. 4. Zertarako behar ditugu klaseak zuen ustez?
  5. 5. Zertarako behar ditugu klaseak zuen ustez? Errealitatea modelatzeko Atributuak: zer Metodoak: nola Javan ia edozer da objektu bat baina badaude programatzeko beste erak
  6. 6. Aurkezpena 1 Zertarako? 2 Konposizioa 3 Herentzia
  7. 7. Klase baten atributuak Zer atributu mota eduki ditzake? int boolean ... ¿?
  8. 8. Pertsona baten atributuak
  9. 9. Ikusgarritasuna private Bakarrik erabili ahal dugu definituta dagoen klasearen barnean. protected Bakarrik erabili ahal dugu klase berberan, ondorengoetan edo pakete bereko klaseetan. public Edonondik erabili dezakegu.
  10. 10. Aurkezpena 1 Zertarako? 2 Konposizioa 3 Herentzia Atributuen herentzia Metodoen herentzia
  11. 11. Zertarako behar dugu herentzia? Kodea berrerabiltzeko ez berridazteko eta mantenimendua errezteko. Klaseak zehazteko edo konplexuagoak egiteko
  12. 12. Herentzia Javan Klase guztiak dira Object Klasearen “ondorengoak” Klase bakoitza Klase guraso bakarra du Implizitoa Explizitoa
  13. 13. Herentzia motak Deklarazio implizitoa (Objectik) public class KlasearenIzena { ... } Deklarazio explizitoa public class KlasearenIzena extends GurasoarenIzena { ... }
  14. 14. Zer heredatzen da?
  15. 15. Atributuen herentzia Klase baten protected edo public atributu guztiak bere seme-alabek heredatuko dituzte Ez private! Seme-alabek gurasoek definitu ez dituzten atributuak definitu ditzakete Seme-alabek ezin dute gurasoak definitutako atributuak kendu
  16. 16. 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;
  17. 17. Zer heredatzen da?
  18. 18. Metodoen herentzia protected edo public diren metodo guztiak klase seme-alabetan heredatzen dira private ez! Klase seme-alabak metodo berriak definitu ditzake Gurasotik heredatutako kodea berdefinitu dezake Ezin du kendu, baina bai guztiz aldatu
  19. 19. 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();
  20. 20. 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();
  21. 21. Super Konstruktorean Lehenengo sententzia klase gurasoaren konstruktorearen deia da super(param1, param2); Ez bada idazten, Javak inplizituki parametrorik gabeko konstructoreari deituko dio super(); Edozein metodoaren barnean, ”super.” erabiliz “this” erabiltzen dugun moduan super.metodo1(); // aitaren ‘‘metodo1’’ deitzen du
  22. 22. Polimorfismoa Metodo bat deitzen duen objektuaren motaren arabera era desberdinean 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());
  23. 23. Bateragarritasuna B klasea Aren semea bada, edozei B klasekoa den edozein objektu, A klasekoa izango da baita ere Gutxienez, B klaseko objektua A klaseko baten atributu eta metodo berdinak izango ditu Beraz, A klaseko objektuekin egin dezakegun edozein gauza, B klasekoekin ere egin dezakegu ¿Eta alderantziz? A obj1 = (A) obj2; // obj2 B klasekoa izanda Kastinga ez du aldatzen objektuaren balioa, bakarrik ikusten dugu ”beste ikuspegi batetik”, baina objektu bera da Bakarrik egin dezakegu hierarkian zehar, ez ”horizontalki”
  24. 24. Bateragarritasuna Izen berdina duten zenbait metodo existitu daiteke Baldin eta parametro desberdinak jasotzen badute Kasurik argienak konstruktoreak dira public void pantailanErakutsi(String izena) { System.out.println(izena); } public void pantailanErakutsi(String izena, String abizena) { System.out.println(izena+" "+abizena); }
  25. 25. Abstract Kontzeptuak modelatzeko Klase abstraktua Ezin da instantziatu (new KlaseAbs()), baina ondorengoak izan ahal ditu Ez ditu zertan metodo abstraktuak eduki behar Metodo abstraktua Implementaziorik 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 hori abstraktua deklaratu beharko da ere.
  26. 26. 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...
  27. 27. 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;
  28. 28. Galderak: abstrakzioa Zein izan daiteke posible? Klase abstraktua A abstract da, A aldagaia = new A(); A ez da abstract, baina b() abstact metodoa du A abstract klasea da eta b() metodoa ez da abstract A abstract da eta b() metodo abstract-a du B ondorengoa du, eta honek e() eta d() metodoak definitzen ditu B aldagaia = new B();
  29. 29. Galderak: herentzia a.a(); a.b(); Honako klase hierarkia edukita... a.d(); A klasea (a eta b metodoak) a.e(); B klasea (d metodo abstraktua) b.a(); C (e metodoa duena) b.b(); Posiblea da... b.d(); A a = new A(); b.e(); B b = new C(); c.a(); C c = new C(); c.b(); c.d(); c.e();
  30. 30. Galderak: polimorfismoa (1) Honako hierarkia dugu Klase 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(); }
  31. 31. 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!
  32. 32. 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.

×