Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Størrelse: px
Starte visningen fra side:

Download "Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion"

Transkript

1 Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning)

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) polymorfi.2

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(); polymorfi.3

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); polymorfi.4

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; s.draw(); s = e; s.draw(); r = e; // legal? // legal? // legal? polymorfi.5

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 abstrakt større eller mindre procentdel af metoderne der er abstrakte polymorfi.6

7 Eksempel: redefineret metode public static void run() { Cat hop() Tiger hop() Cat garfield = new Cat(); Tiger sherekhan = new Tiger(); Cat c; garfield.hop(); sherekhan.hop(); c = garfield; c.hop(); c = sherekhan; c.hop(); Cat c polymorfi.7

8 Eksempel: redefineret metode public static void run() { Cat hop() Tiger hop() Cat garfield = new Cat(); Tiger sherekhan = new Tiger(); Cat c; garfield.hop(); sherekhan.hop(); c = garfield; c.hop(); c = sherekhan; c.hop(); Cat c polymorfi.8

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)! polymorfi.9

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? polymorfi.10

11 Eksempel: heterogen collection public hopall(collection<cat> coll) { for ( Cat c : coll ) { c.hop(); Hvilken hop-metode? polymorfi.11

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, overriding, 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... polymorfi.12

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 polymorfi.13

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(); polymorfi.14

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 r.method(...); er det den dynamiske type af objektreferencen r der afgør hvilken metode der udføres, ikke den statiske! polymorfi.15

16 Polymorfiens polymorfi Men først lidt om Coercion

17 Coercion (primitive typer) Typekonvertering på primitive typer i Java implicit (forfremmelse) eksplicit (begrænsning) Typer.17

18 Forfremmelse og begrænsning (1) Forfremmelse En værdi af en subtype kan ved en implicit typekonvertering (automatisk) forfremmes til en værdi af en supertype Begrænsning En værdi af en supertype kan ved en eksplicit typekonvertering (et såkaldt type cast ) begrænses til en værdi af en subtype Eksempel: 9 + (int) ((6 * 2) / 2.5) 9 + (int) ( 12 / 2.5) 9 + (int) ( 12.0 / 2.5) 9 + (int) Typer.18

19 Generel typeregel for assignment Assignmentsætningen giver kun mening når typen af udtrykket på højresiden er en subtype af variablen på venstresiden. v = exp; Også for primitive typer T(v) T(Exp) Det giver mening at assigne et cykelobjekt til en variabel af typen Køretøj, men det giver ikke mening at assigne et køretøj (der kan være mange forskellige ting) til en variabel af typen Cykel. Køretøj Cykel Typer.19

20 Forfremmelse og begrænsning (2) int double (int er subtype af double) double d1, d2; int i; d2 = 3.14; d1 = 7; i = d1; i = d2; i = (int) d1; i = (int) d2; // ok? // ok? // ok? // ok? // ok? // ok? Typer.20

21 Konstanter (literals) Literal Type 2 int 2.0 double 2 char 2 String two String Typer.21

22 Advarsel: Java behandler tegn som tal Javas subtyperelation: char int double Forfremmelse automatisk hvis det er nødvendigt evaluerer til evaluerer til 51!!! Begrænsning kun ved eksplicitte cast (int) ( ) evaluerer til 3 (char) ( 2 + 1) evaluerer til 3 Typer.22

23 Polymorfiens polymorfi ;-) Polymorfi Ad hoc polymorfi Coercion (forfremmelse og begrænsning) Overloading (et navn, flere betydninger) Generel polymorfi (universel polymorfi) Inklusionspolymorfi (subtyperegel ved assignment, specielt objekttyper) dynamisk binding,... Parametrisk polymorfi (typeparametrisering, <T>) polymorfi.23

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Fundamentale sprogbegreber

Fundamentale sprogbegreber Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn) Oversigt Sætninger simple sætninger (assignment, metodekald) sammensatte sætninger (selektion,

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Objekt-orienteret programmering uden klasser: Self.

Objekt-orienteret programmering uden klasser: Self. Objekt-orienteret programmering uden klasser: Self. Sammenligning klasse-baseret og klasseløs programstrukturering. Basale forhold Singulære objekter Dynamisk nedarvning Variable i forhold til metoder.

Læs mere

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Rename og redefine. Abstrakte klasser. Dynamisk binding. 11 Nedarvning II. Enkeltnedarvning i Eiffel. Rename og redefine. Initialisering af superklasse-dele af et objekt. Interfaces til klienter og subklasser. Typesammenlignelighed og polymorfi. Abstrakte klasser.

Læs mere

Objektorienteret design med arv og polymorfi:

Objektorienteret design med arv og polymorfi: Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Objektorienteret design med arv og polymorfi: Substitutionsprincippet Composite Design Pattern Finn Nordbjerg Side 1 Objektorienteret

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser. 10 Nedarvning I. Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Dynamisk binding og virtuelle operationer. Decentraliseret/centraliseret

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til [email protected]. Besvarelsen skal

Læs mere

Programmering 2 eksamensnoter

Programmering 2 eksamensnoter Programmering 2 eksamensnoter Andreas Troelsen [email protected] Mathias Bak Bertelsen [email protected] December 24, 2012 Contents 0.1 Læs dette først!........................................ 3 0.2 Generelt

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

Læs mere

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

Objektorienteret Programmering

Objektorienteret Programmering Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel på brug af ArrayList

Læs mere

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber Klasser Grundlæggende Programmering med Projekt Peter Sestoft Tirsdag 2. september 2008 (Tak til Jakob Bardram for nogle slides) Dagens begreber Felt (field) Metode (method) Parameter (parameter) Sætning,

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Crash Course i Programmering. HumTek, RUC

Crash Course i Programmering. HumTek, RUC Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget

Læs mere

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et

Læs mere

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

Videregående Programmering for Diplom-E Noter

Videregående Programmering for Diplom-E Noter Videregående Programmering for Diplom-E Noter 1. Uddelegering Ét af de væsentlige principper i objektorienteret programmering er, at enhver klasse selv skal kunne "klare ærterne". Enhver klasse skal altså

Læs mere

Projekt arbejde til kurset Advanced Models and Programs, SASP-AMP 2008 Poul Brønnum, IT Universitetet i København, Maj 2008. Indholdsfortegnelse

Projekt arbejde til kurset Advanced Models and Programs, SASP-AMP 2008 Poul Brønnum, IT Universitetet i København, Maj 2008. Indholdsfortegnelse Udvidelse af MicroC compileren til at kunne håndtere struct- og union typer samt switch-, break- og continue statement. Yderligere er ovenstående konstruktioner anvendt til at indføre malloc og free kald

Læs mere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen [email protected] i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, [email protected] 1 Dagens program Opsamling

Læs mere

Matematisk modellering og numeriske metoder

Matematisk modellering og numeriske metoder Matematisk modellering og numeriske metoder Morten Grud Rasmussen 5. september 2016 1 Ordinære differentialligninger ODE er 1.1 ODE er helt grundlæggende Definition 1.1 (Ordinære differentialligninger).

Læs mere

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22.

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22. Klasser og Objekter i Python Uge 46 Learning Python: kap 15-16, 19-22. Klasser og objekter En klasse beskriver en klump af samhørende funktioner og variable En klasse er en beskrivelse. En kage form Klassens

Læs mere

Metoder Klasser Arv. Operatorer Løkker. Praksis eksempel. Grundlæggende programmering Lektion 3

Metoder Klasser Arv. Operatorer Løkker. Praksis eksempel. Grundlæggende programmering Lektion 3 Praksis eksempel Operatorer Løkker Metoder Klasser Arv Grundlæggende programmering Lektion 3 Praksis eksempel Et program der benytter Unity til at lave et 3D spil Praksis eksempel Spil der benytter Unity

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere