Kapittel 9
description
Transcript of Kapittel 9
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();
Dette er OK dersom Bishop arvar ChessPiece
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
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
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
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
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
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
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
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
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
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
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å