Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afEllen Hedegaard Redigeret for ca. et år siden
1
Klassehierarkier Specialisering vha. subklasser
2
dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller, Skuespillerelev,... –Udlånsemne, CD, Video, DVD,... Specialisering/generalisering –Generalisere: sætte uden for parantes –Definere fælles egenskaber i superklasser (metoder og attributter) –Implementere opførsel på generelt niveau –Specialisere opførsel i subklasser –Tilføje egenskaber i subklasser (metoder og attributter)
3
dIntProg, E05Klassehierarkier.3 Subtyperelation for objekttyper Aktoer SkuespillerKoreograf klap (heltal n) drej (heltal n) skrivAntalTricks() ElevGnavpotKarakter… Aktoer Koreograf ≤ Skuespiller ≤ Aktoer ≤ Object Elev ≤ Karakter... ≤ Skuespiller Gnavpot ≤
4
dIntProg, E05Klassehierarkier.4 Specialisering i UML Item udlånTil(l: låner) hjemlån() erHjemme() Book forfatter() forlag() ISBN() Video producer() format() spilletid() Generelt begreb Specielle begreber
5
dIntProg, E05Klassehierarkier.5 Specialisering i Java class Item { void udlånTil(Låner l) { // kode for udlån } void hjemlån() { // kode for hjemlån } boolean erHjemme() { // kode for erHjemme }... } class Book extends Item { String forfatter() {... } String forlag() {... } String ISBN() {... }... } class Video extends Item { String producer() {... } String format() {... } int spilletid() {... }... }
6
dIntProg, E05Klassehierarkier.6 Kodegenbrug: Sætte uden for parantes A*B + A*C = A * (B+C) I Java bliver dette til Fordelen er at vi kun skal skrive A én gang A og B A og C A BC
7
dIntProg, E05Klassehierarkier.7 Polymorfi Den væsentligste fordel er dog at vi får mulighed for at operere uniformt på alle objekter af en bestemt kategori: A BC Klient DE *
8
dIntProg, E05Klassehierarkier.8 Klient class Klient { private List items; public Klient() { items = new ArrayList (); } public addItem(A a) { items.add(a); } public void doSomething() { for ( A a : items ) { // behandl alle items som om de er // A-objekter uanset om de faktisk // er B-, C-, D- eller E-objekter }
9
dIntProg, E05Klassehierarkier.9 Konstruktører class A { private... public A() { // initialisering af A-del af objekt } class B extends A { private...; public B() { super(); // initialisering af B-del af objekt } Kaldet af super skal stå først; hvis der ikke er et kald af su- per, genereres der automatisk et!
10
dIntProg, E05Klassehierarkier.10 Objektlayout class A { private int a1; private int a2;... } class B extends A { private int b1; private int b2; } A a = new A(); B b = new B(); a b :A 7 9 a1: a2: :B 7 9 a1: a2: 11 13 b1: b2: A B A
11
dIntProg, E05Klassehierarkier.11 Associering vs. specialisering AB :A:B Associering: relation på klasser og objekter A B :B A B Specialisering: relation på klasser, struktur af objekt
12
dIntProg, E05Klassehierarkier.12 Specialisering af opførsel class A { private...; public String toString() { return...; } class B extends A { private...; public String toString() { return... + super.toString() +...; }
13
dIntProg, E05Klassehierarkier.13 Nye egenskaber i subklasse class A { private...; public void pip() {...; } } class B extends A { private...; public void pip() {...; } public void pap() {...; } } A a = new A(); B b = new B(); a.pip(); // Lovligt ? a.pap(); // Lovligt ? b.pip(); // Lovligt ? b.pap(); // Lovligt ? a.pip(); // hvilken pip? b.pip(); // hvilken pip? a = b; a.pip(); // hvilken pip?
14
dIntProg, E05Klassehierarkier.14 Sammenfatning Specialisering –Begrænsninger på arvede egenskaber (redefinering af metoder) –Tilføjelse af nye egenskaber –Understøttes i Java af extend-relationen på klasser og interfaces –Er en relation på klasser (super- og subklasse) –Definerer struktur af objekt (super-del og sub-del)
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.