F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Föreläsning 13 Innehåll

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

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

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

Classes och Interfaces, Objects och References, Initialization

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

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

Objektorienterad Programmering (TDDC77)

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

OOP Objekt-orienterad programmering

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

OOP Objekt-orienterad programmering

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

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

TENTAMEN OOP

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

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

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

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

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

TENTAMEN OOP

DAT043 - Föreläsning 7

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Repetition av OOP- och Javabegrepp

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

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

Repetition av OOP- och Javabegrepp

Laboration 1: Figurer i hierarki

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

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

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

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

Laboration 1 - Grunderna för OOP i Java

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Polymorfi. Objektorienterad och komponentbaserad programmering

Repetition av viktiga begrepp inom objektorienterad programmering

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

Konstruktion av klasser med klasser

Introduktion till arv

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

1 Repetition av viktiga begrepp inom objektorienterad programmering

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

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

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

ID1004 Laboration 4, November 2012

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

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

OOMPA 2D1359 Föreläsning 8

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

Objektorienterad programmering

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.

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

Objektorienterad Programmering (TDDC77)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Programmering för språkteknologer II, HT2014. Rum

Klasshierarkier - repetition

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Lösningsförslag övning 2.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN OOP

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

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

TDDD78 Viktiga begrepp, del 2

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

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 (TDDC77)

Föreläsning 5-6 Innehåll

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

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

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Transkript:

F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se

Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod Specialisering

Arv och subklasser Object Händelse Fel Varning KritisktFel PasserbartFel

Arv och subklasser super Object Händelse Fel super Varning super KritisktFel PasserbartFel

Arv och subklasser relationen is-a Object Händelse Händelse är ett Object Fel är en Händelse och ett Object Fel Varning är en Händelse och ett Object Varning KritisktFel KritisktFel är ett Fel, en Händelse och ett Object PasserbartFel PasserbartFel är ett Fel, en Händelse och ett Object

Arv och subklasser protected vs private Object Händelse protected long time; private List elems; Fel long time protected String kind; Varning long time long time String kind KritisktFel PasserbartFel long time String kind

Arv och subklasser protected vs private Object Object Händelse Fel long time String kind Händelse protected long time; private List elems; KritisktFel Fel long time protected String kind; Varning long time long time String kind KritisktFel PasserbartFel long time String kind

Arv, härkomst och beteende Varje klass kan bara ärva från en förälder Strikt hierarki En klass kan implementera flera interface Flera separate beteenden

Åsidosatta metoder eng Overriding Methods En subklass kan ha en egen version av en metod definierad av någon förälder Subklassen åsidosätter förälderns version Object public String tostring() Klass Die har en egen version av tostring(). Metoden är åsidosatt av klass Die. Die public String tostring()

Åsidosatta metoder public class Hund { public String tostring(){ return En hund ; System.out.println(new Hund()); En hund public class Tax extends Hund{ System.out.println(new Tax()); En hund public class Boxer extends Hund{ public String tostring(){ return En boxer ; System.out.println(new Boxer()); En boxer

Åsidosatta metoder Object Hund tostring() tostring() Den mest specifika (lägsta) metoden anropas Boxer tostring() Hund mydog = new Boxer(); Boxer mydog.tostring()

Åsidosatta metoder - super Object Hund tostring() tostring() Den mest specifika (lägsta) metoden anropas. Men subklassen kan referera till sin förälder med super Boxer Hund mydog = new Boxer(); mydog.tostring() tostring() Boxer String tostring() { return En boxer, men även + super.tostring(); En boxer, men även En hund

Åsidosatta metoder super och this Object Hund this super super låter subklassen anropa förälderns version av metoden bara en nivå; super.super går inte this refererar alltid till instansen super används bl a för att köra förälderns konstruktor Boxer this super JFrame(String title) // konstruktor... public Chart extends JFrame {... public Chart(String title) { super(title);...

Förhindra åsidosättning final Metoder kan skyddas från åsidosättning Metoden deklareras då final public final String getvotingresult() {...

Skuggvariabler En klass har en variabel Subklasser kan använda den Subklasser kan deklarera en egen variabel med samma namn och typ Denna kallas då skuggvariabel Leder till förvirring och bör undvikas

Skuggvariabler public class Hund{ protected String name; protected float hunger=22;... skuggning public class Boxer extends Hund{ private float hunger=0.1;......println(hunger); skriver ut 0.1 Kompilatorn kan lätt hålla isär de två variablerna. Människor blir lätt förvirrade undvik skuggvariabler.

Klassen Object Alla klasser ärver från Object bl a: boolean equals(object o) obj1 == obj2 String tostring() Returnera en textrepresentation av objektet Object clone() Skapa och returnera en kopia av objektet

Klassen Object Alla klasser ärver från Object bl a: boolean equals(object o) obj1 == obj2 Definitionen av Object.equals() baseras på alias (samma referens) Ofta vill man hellre ha en likhet baserad på objektets tillstånd. Klassen måste då överlagra equals.

equals(object o) Likhet råder om det är samma objekt eller om objekten ser lika ut String str1 Software solutions String str2 str1 och str2 refererar till samma strängobjekt

equals(object o) Likhet råder om det är samma objekt eller om objekten ser lika ut String str1 String str2 Software solutions Software solutions str1 och str2 refererar till strängobjekt som ser lika ut

equals(object o) Likhet råder om det är samma objekt eller om objekten ser lika ut String str1 String str2 inte lika Software solutions Snyftware solutions str1 och str2 refererar till strängobjekt som ser olika ut

equals(object o) Klassdesignern bestämmer när två objekt ur samma klass är lika Att jämföra tillståndet mellan två objekt kan vara kostsamt (ta tid) a b h t x? a b h t x

Tree.equals(Tree t)? Nej, träden har olika arrangemang (ordning) Ja, träden innehåller samma data (mängd) a b h t x? a b h t x

Abstrakta klasser En abstrakt klass innehåller en eller fler abstrakta metoder En abstrakt klass kan inte instantieras Men det går att ärva från den En abstrakt klass innehåller en ofullständig beskrivning av en klass Subklasser måste komplettera den En abstrakt klass fungerar som mall för subklasser

Abstrakta klasser abstract class Shape { abstract void draw(){ Color getcolor() {... class Circle extends Shape { void draw(){... class Rectangle extends Shape { void draw(){...

Abstrakta klasser abstract class Shape { abstract void draw(){ Color getcolor() {... Det går inte att definiera hur Shape ska ritas, det måste subklasserna göra. Samtidigt vill man kunna anropa Shape.draw() class Circle extends Shape { void draw(){... class Rectangle extends Shape { void draw(){... En subklass som ärver från en abstrakt klass måste implementera (åsidosätta) alla abstrakta metoder. Om subklassen inte gör det, blir den själv abstrakt.

Synlighet - private En klass kan skydda variabler och metoder genom att deklarera dem private Subklasser kan inte se dem direkt Men de finns i varje instans, och ingår i tillståndet De nås indirekt genom förälderns tillgängliga metoder (protected eller public)

Synlighet - private class FoodItem { private int calories; public FoodItem(int cals){ calories = cals; Variabeln calories är private men får värde från subklassen class Pizza extends FoodItem { public Pizza(int slices){ super(slices * 220); Pizza anropar konstruktorn i föräldern

Designa för arv En subklass ska vara en mer specifik version av sin förälder Fokusera på återanvändning (kod, funktionalitet) Placera gemensamma särdrag så högt upp i klasshierarkin som det är praktiskt

Designa för arv Åsidosätt metoder för att anpassa beteendet till subklassens särdrag Lägg till nya variabler i subklassen om det behövs, men undvik skuggvariabler Låt varje klass själv hantera sina interna data

Designa för arv Använd super för att anropa förälderns konstruktor när så behövs Använd super för att anropa förälderns version av en åsidosatt metod Använd interface för att skapa en klass med flera beteenden/roller

Designa för arv Designa klasshierarkin för programmet men tänk även framåt Åsidosätt tostring() och equals() så att de ger rimliga resultat Abstrakta klasser tydliggör vertikal struktur och delfunktionalitet

Designa för arv Använd åtkomstskydd (private/protected) för att skapa vertikal inkapsling Använd final för att blockera arv och åsidosättning när så är motiverat public final class Standards { // This stuff stays this way

blink blink BILDSPEL UPPHÖR