Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.

Slides:



Advertisements
Lignende præsentationer
07 – Kort om OO Introduktion.
Advertisements

Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Object-Orienteret Programmering og Design. 2 Nordjyllands Erhvervakademi – 2009 Indhold “Classes, objects and object-oriented programming (OOP) play a.
Selve objektet versus referencen til objektet Nedarvning
Objektorienteret programmering
08 – Mere OO Indkapsling Arv og polymorfi (OOP’s 3 hovedprincipper)
09 – Arv og polymorfi i java
Hvordan man skriver koden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
Delphi og C++ Builder C++ Referencer og pointere.
FEN NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)
Forelæsning 3.1 Collections Javas for-each løkke
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Fundamentale datastrukturer
Eksempel på realisering af domænemodel
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
Repetition: Introduktion til OOP med C# og .NET
GP7, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 7 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Forelæsning 2.2 Tilstand og opførsel (repetition)
Fundamentale sprogbegreber
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
Forelæsning 7.1 – repetition
FEN NOEA - Nordjyllands Erhvervsakademi1 Objektorienteret programmering Indkapsling Arv og polymorfi (OOP’s 3 hovedprincipper)
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn)
Variabler, klassevariabler, identitet og lighed, collections
 Jens Bennedsen 2002Objektorienteret systemudvikling Persistens.
DAIMIIntroducerende Objektorienteret Programmering1 Polymorfi og nedarvning Motivation for arv og “mange former”
 1999, Henrik B. ChristensenIntroducerende objektorienteret programmering8A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
 Jens Bennedsen 2001Multimedie programmering10A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik Bærbak, 2000Introducerende objektorienteret programmering11B.1 Destilleret UML Oversættelse fra UML til Java.
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
DAIMIIntroducerende Objektorienteret Programmering8A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
Grafik Modeller, objekter og opførsel. dIntProg, F08Grafik.2 Nye begreber Repetition (iteration) –gentagelse af opførsel Parametrisering –generalisering.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge46 Ancestor.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
DAIMI, AUIntroducerende objektorienteret programmering11A.1 Destilleret UML Oversættelse fra UML til Java.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Forelæsning Uge 6 – Mandag
Forelæsning Uge 12 – Torsdag
Forelæsning Uge 6 – Mandag
Forelæsning Uge 3 – Mandag
Klasser og objekter (Afsnit i manualen).
Forelæsning Uge 2 – Mandag
Præsentationens transcript:

Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type

dIntProg, E05polymorfi.2 Oversigt Abstrakt klasse –abstrakt metode => abstrakt klasse Substitution (forfremmelse) –Statisk type vs. dynamisk type –Statisk type: compile-time check (hvad er lovligt) –Dynamisk check: hvilken metode udføres –Specialisering af opførsel (redefinering af metode) –final (variabel, metode, klasse)

dIntProg, E05polymorfi.3 Et figurhierarki public abstract class Shape { private int x, y; public Shape(int x, int y) { this.x = x; this.y = y; } public void move(int dx, int dy) { erase(); x += dx; y += dy; draw(); } public abstract void draw(); public abstract void erase(); }

dIntProg, E05polymorfi.4 Et figurhierarki (2) public class Rectangle extends Shape { private int a, b; public Rectangle(int x, int y, int a, int b) { super(x, y); this.a = a; this.b = b; } public void draw() { Crayon c = new Crayon(); for ( int i=0; i<2; i++ ) { c.move(a); c.turn(90); c.move(b); c.turn(90); }

dIntProg, E05polymorfi.5 Et figurhierarki (3) public void run() { Rectangle r = new Rectangle(10, 10, 5, 7); Ellipse e = new Ellipse(5, 5, 3, 7); Shape s; s = r; // legal? s.draw(); s = e; // legal? s.draw(); r = e; // legal? }

dIntProg, E05polymorfi.6 Abstrakte og konkrete klasser Klassen Shape giver god mening som superklasse, men instansiering heraf giver ikke mening En sådan klasse kaldes en abstrakt klasse I Java er en klasse abstrakt hvis den erklæres som sådan En ikke-abstrakt klasse kaldes en konkret klasse (en der kan instansieres) En abstrakt klasse kan være “mere eller mindre abstrrakt” –større eller mindre procentdel af metoderne der er abstrakte

dIntProg, E05polymorfi.7 Eksempel: redefineret metode public static void run() { Cat garfield = new Cat(); Tiger shereKhan = new Tiger(); Cat c; garfield.hop(); shereKhan.hop(); c = garfield; c.hop(); c = shereKhan; c.hop(); } Cat c Cat hop() Tiger hop()

dIntProg, E05polymorfi.8 Eksempel: redefineret metode public static void run() { Cat garfield = new Cat(); Tiger shereKhan = new Tiger(); Cat c; garfield.hop(); shereKhan.hop(); c = garfield; c.hop(); c = shereKhan; c.hop(); } Cat c Cat hop() Tiger hop()

dIntProg, E05polymorfi.9 Dynamisk binding (method dispatch) Om typer –Den statiske type er typen der optræder i erklæringen af en variabel (objektreference) –Den dynamiske type er typen af selve objektet Variabler –Den dynamiske type kan være en vilkårlig subtype af den statiske type Metodekald –Den dynamiske type afgør hvilke metoder der bliver kaldt, og denne type er først kendt på kørselstidspunktet (run-time)!

dIntProg, E05polymorfi.10 Metodeopslag (method lookup) c.hop() –referencen c følges til objektet –objektets klasse (dynamiske type) bestemmes –hvis metoden hop er (re-)defineret i klassen, benyttes denne implementation –hvis det ikke er tilfældet ledes i superklassen og så fremdeles –den første implementation der findes, er den som udføres Bemærk at vi er sikre på at finde en implementation af metoden på stien fra objektets klasse mod klassen Object. Hvorfor?

dIntProg, E05polymorfi.11 Eksempel: heterogen collection public hopAll(Collection coll) { for ( Cat c : coll ) { c.hop(); } Hvilken hop-metode?

dIntProg, E05polymorfi.12 Redefinering af metode (specialisering) En metode kan være åben eller lukket (virtual/non-virtual) –i udgangspunktet er alle metoder åbne Hvis en metode er åben, har det to konsekvenser –Metoden kan redefineres i subklasser –Binding af besked til metode foretages først på kørselstidspunktet (dynamic dispatch) Vær omhyggelig ved redefinering af metode –Redefinering foretages ved at specificere præcis samme signatur (metodenavn, formelle parametre og returtype) som i superklassen –ADVARSEL: Hvis signaturen afviger, er der tale om overloading. Der er altså ingen advarsel eller fejlmeddelelse til programmøren i tilfælde af en simpel skrivefejl...

dIntProg, E05polymorfi.13 final final-erklæring –lukning –bindingen gøres endelig Variabel –variablen lukkes –bindingen af værdi til variabel er endelig –med andre ord: en final-variabel er en konstant Metode –metoden lukkes –bindingen af signatur til krop (opførsel) er endelig –med andre ord: en final-metode kan ikke redefineres i subklasser Klasse –klassen lukkes –bindingen af subtyper til klassenavnet er endelig –med andre ord: en final klasse kan ikke ”extendes”

dIntProg, E05polymorfi.14 Eksempel på final-metode public abstract class Shape { protected int x, y; public Shape(int x, int y) { this.x = x; this.y = y; } public final void move(int dx, int dy) { erase(); x += dx; y += dy; draw(); } public abstract void draw(); public abstract void erase(); };

dIntProg, E05polymorfi.15 Sammenfatning Abstrakt metode –Metode uden implementation (krop) Akstrakt metode => abstrakt klasse –Kan ikke instansieres, –men kan være superklasse der samler fælles egenskaber ved subklasser Redefinering af metoder og dynamisk binding –Ved metodekaldet –er det den dynamiske type af objektreferencen r der afgør hvilken metode der udføres, ikke den statiske! r.method(...);