Kapittel 9

13
Kapittel 9 Polymorfi

description

Kapittel 9. Polymorfi. 9.1 Sein binding. Ofte er det perfekt match mellom typen til ein variabel og objektet han refererer til ChessPiece bishop; ... bishop = new ChessPiece(); Men det må ikkje nødvendigvis vere slik ChessPiece bishop; ... bishop = new Bishop(); - PowerPoint PPT Presentation

Transcript of Kapittel 9

Page 1: Kapittel 9

Kapittel 9

Polymorfi

Page 2: Kapittel 9

9.1 Sein binding Ofte er det perfekt match mellom typen til ein

variabel og objektet han refererer til ChessPiece bishop; ... bishop = new ChessPiece();

Men det må ikkje nødvendigvis vere slik ChessPiece bishop; ... bishop = new Bishop();

Dette er OK dersom Bishop arvar ChessPiece

Page 3: Kapittel 9

Sein binding Polymorfi betyr ‘ha mange former’ Ein polymorf referanse er ein som

kan referere til objekt av ulike klasser over tid

På denne måten kan to metodekall for same variabel gi ulik oppførsel ved at ulike versjonar av same metode blir kjørt

Page 4: Kapittel 9

Sein binding Binding refererer til tidspunktet når eit

metodekall blir kopla til koden som skal kjørast Kan skje under kompilering dersom alt er kjent Skjer under kjøring når polymorfe referanser er

i bruk Late binding, dynamic binding Kopling til kode kan ikkje skje før vi veit kva klasse

det er snakk om Kan vere avhengig av inn-data og bli avgjort under

kjøring To måtar å oppnå polymorfi: arv og

interface

Page 5: Kapittel 9

9.2 Polymorfi ved arv Vi deklarerer ein variabel med eit spesielt

klassenamn Variabelen kan referere til objekt av

denne spesielle klasen Han kan også referere til objekt av klasser

som arver denne spesielle klassen Eksempel side 483 Vi må bruke cast om vi vil tilordne eit Mammal-

objekt til Horse-referansen Lite aktuelt i praksis

Page 6: Kapittel 9

Polymorfi ved arv

Firm-eksemplet Klassehierarki der StaffMember er

abstrakt Arv i fleire ledd Alle har pay() som returnerer ein double

Ekstra data og metoder etter behov Merk at vi må bruke cast for å kalle

metoder som er definert i subklasser

Page 7: Kapittel 9

9.3 Polymorfi ved interface I staden for arv kan vi bruke interface

for å oppnå polymorfi Variable kan deklarerast med namn på

eit interface Ein slik variabel kan referere til objekt

av alle klasser som implementerer interfacet

Cast når vi kaller på metoder som er definert på klassenivå (ikkje i interfacet)

Namn på interface kan også brukast som type på parameter til metoder

Page 8: Kapittel 9

9.4 Sortering Typisk område der vi bruker polymorfi

Vi bryr oss ikkje om kva klasse objekta vi sorterer, tilhøyrer

Poenget er at vi kan samanlikne dei Dermed bruker vi Comparable-interfacet

som argumenttype Sortering er algoritme-stoff som blir

behandla grundigare i In295 Vi går fort gjennom Selection Sort og

Insertion Sort

Page 9: Kapittel 9

9.5 Søking

Same argument for bruk av polymorfi som ved sortering

Lineært søk Binærsøk Kompleksitet?

Meir i In295 og MAT200

Page 10: Kapittel 9

9.6 Å designe for polymorfi

Oppførsel varierer med type Ulike typer kan utføre det same,

men på ulike måtar Polymorfi, arv og interface heng

tett saman Det er ofte liten vits i å bruke arv

utan samtidig å legge opp til polymorfi

Page 11: Kapittel 9

9.7 Event processing Korleis blir polymorfi brukt?

Vi lagar ein listener og legg denne til eit grafisk objekt for å fange opp events generert av objektet, f eks ein JButton

Metoden addActionListener() har ingen kjennskap til vår listener-klasse

Interfacet ActionListener er spesifisert som parametertype

Referanser til objekt av alle klasser som implementerer interfacet kan dermed brukast

Om vi lagar ein listener ved arv, så arver vi ein klasse som implementerer ActionListener

Page 12: Kapittel 9

9.8 og 9.9 Fleire dialogboksar

File choosers og color choosers er ferdiglaga komponentar for spesielle formål File chooser for å finne og velge ei fil

frå harddisk, cd eller diskett Color chooser for å velge farge frå ein

palett

Page 13: Kapittel 9

9.10 Slider

Vi kan bruke ein slider for å la brukaren velge ein verdi innanfor bestemte grenser

Praktisk, sidan vi unngår mange feilsituasjonar

Slideren genererer change events som vi kan fange opp og reagere på