Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Relevanta dokument
Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Classes och Interfaces, Objects och References, Initialization

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Objektorienterad programmering Föreläsning 12. Copyright Mahmud Al Hakim

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

Föreläsning 4. Polymorfism. Polymorfism Dynamisk bindning Inkapsling Information hiding Access-metoder och mutator-metoder

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 13 Innehåll

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Föreläsning 5-6 Innehåll

Malmö högskola 2007/2008 Teknik och samhälle

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Agenda. Objektorienterad programmering Föreläsning 13

Generics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Anteckningar 1: Grundläggande saker

Polymorfi. Objektorienterad och komponentbaserad programmering

TDDC76 - Programmering och Datastrukturer

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Objektorienterad Programmering (TDDC77)

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Föreläsning REPETITION & EXTENTA

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Generics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Arv. Objektorienterad och komponentbaserad programmering

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

OOP Objekt-orienterad programmering

TUTORIAL: KLASSER & OBJEKT

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

DAT043 - föreläsning 8

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Föreläsning 4 Polymorfism Dynamisk bindning Inkapsling Information hiding Access-metoder och mutator-metoder

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Mutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Föreläsning 2. Polyfmorfism Dynamisk bindning Interface och abstrakta klasser Överlagring Överskuggning Accessorer och mutatorer

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN OOP

Modeller, Objekt och Klasser

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

OOP Objekt-orienterad programmering

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Objekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018

Laboration 1: Figurer i hierarki

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

DAT043 - Föreläsning 7

Arv och polymorfism i Java

Statistik över heltal

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Introduktion till arv

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Föreläsning 9: Arv och UML

Kopiering av objekt i Java

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Objektorienterad programmering

Tillämpad programmering

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Imperativ programmering. Föreläsning 4

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

OOP Objekt-orienterad programmering

Separation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

TDDD78 Viktiga begrepp, del 2

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Objektorienterad Programmering (TDDC77)

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Föreläsning 4. Polymorfism Dynamisk bindning Inkapsling Information hiding Access-metoder och mutator-metoder. Abstraction & Information Hiding

TDDD78 Objektorientering: Lagring och livstid

TDA550 - Objektorienterad programvaruutveckling, fk

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Transkript:

Static vs Dynamic binding Override vs Overload Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Quiz: Gissa typen? Object o = new Square(100,100); Polygon p = new Square(200,200); Square s = new Square(300,300); Vilken typ har o, p respektive s? Är du helt säker?

Static type vs Dynamic type En referens-variabel har en declared type detta är dess statiska typ, och den kommer alltid att vara densamma (därav ordet statisk). En referens-variabel refererar till ett objekt i heapen. Det objektets typ är variabelns dynamiska typ. Denna kan förändras (därav ordet dynamisk), om variabeln ges ett nytt referensvärde som pekar på ett annat objekt med en annan typ.

Quiz: Svar Object o = new Square(100,100); Polygon p = new Square(200,200); Square s = new Square(300,300); o, p och s har statiska typer Object, Polygon respektive Square. Alla tre har (för närvarande) dynamisk typ Square.

Compile time vs run time Typinformation används vid två olika tillfällen: Kompilatorn utför statisk typkontroll (static type checking). Denna information används enbart vid kompileringen, för att garantera att allt kommer att gå rätt när programmet körs, och för att välja rätt metod(signatur). Informationen om statisk typ sparas inte efter kompileringen. Under exekvering görs dynamisk typkontroll (dynamic type checking), och den dynamiska typen används för att bestämma vilka metoder som faktiskt körs.

Overloading Overloading innebär att ett objekt (eller class) har flera metoder med samma namn, men olika signatur (dvs typer på dess parametrar). String.subString(int beginindex); String.subString(int beginindex, int endindex); Quiz: Hur och när bestäms vilken av signaturerna som används? Svar: Det bestäms statiskt, vid kompilering.

Overriding Overriding innebär att en subklass kan definiera en metod med samma namn och signatur som en metod i dess superklass. Polygon.paint(Graphics g); Triangle.paint(Graphics g); Quiz: Hur och när bestäms vilken av metoderna som används? Svar: Det bestäms dynamiskt, vid exekvering.

Override eller Overload? Antag att vi har följande: Polygon.scale(int factor); Rectangle.scale(int factorx, int factory); Quiz: Är detta overriding eller overloading? Svar: Overloading: Eftersom Rectangle inte definierar en egen scale(int factor) ärvs denna från Polygon, och Rectangle har således två scale-metoder med olika signatur.

Diagnostiskt prov På nästa föreläsning: jag kommer att fråga er om ett antal metodanrop, liknande övningen, och vill att ni ska svara rätt på vilken metod som används i varje fall. Provet är fullständigt harmlöst och bara för er egen skull (jag kommer inte att samla in resultat).

Övning Utgå från resultatet från föregående övning (kan laddas ner färdig från hemsidan om ni inte har er egen). Implementera tostring()-metoder för Polygon och alla dess subclasses. Det viktiga är att de skriver ut vilken typ objektet i fråga har. Lägg till en metod overlaps(polygon p): boolean i Polygon. Vi låtsas att denna metod beräknar huruvida två polygoner överlappar. För nu, låt den alltid returnera true men skriva ut (till System.out) tillräcklig information för att kunna avgöra vilken metod som anropas, och vilken typ operanderna har: E.g. Polygon.overlaps: Square vs Triangle använd tostring(). Skriv en main-metod som skapar några olika polygoner av olika slag och jämför med varandra med overlaps. Stämmer utskrifterna med vad ni förväntar dig? Kan ni förklara vad som händer i termer av statisk och dynamisk typ? Lägg till en overloaded metod overlaps(triangle t): boolean i Triangle, och motsvarande i övriga subclasses. Låt dessa skriva ut liknande information så ni kan se vilken metod som anropas. Testa igen att jämföra olika polygoner. Stämmer det med vad ni förväntar er? Skapa ytterligare en polygon (av någon specifik dynamisk typ), men låt denna hållas av en variabel av statisk typ Polygon. Testa att jämföra även denna, med sig själv och med övriga polygoner med mer specifik statisk typ. Testa den både som det objekt som overlap anropas på, och som argument. Kan ni förutsäga vilka utskrifter ni kommer få? Overridea metoden overlaps(polygon p): boolean i alla subclasses, med en särskiljande utskrift. Kör testerna igen. Kan ni förutsäga vilka utskrifter ni kommer få?