Klasshierarkier - repetition



Relevanta dokument
Konstruktion av klasser med klasser

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Konstruktion av klasser med klasser

OOP Objekt-orienterad programmering

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

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

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 {... }

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

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

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

Aggregering. Arv och klasshierarkier. Arv. Arv (forts)

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Arv. Objektorienterad och komponentbaserad programmering

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

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

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

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

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

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

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

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

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

TENTAMEN OOP

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

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

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

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

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

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

TENTAMEN OOP

Föreläsning 13 Innehåll

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

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

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

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

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

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

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

DAT043 - Föreläsning 7

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

TENTAMEN OOP

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Laboration 1 - Grunderna för OOP i Java

OOP Objekt-orienterad programmering

Imperativ programmering. Föreläsning 4

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

Instuderingsuppgifter läsvecka 2

Objektorienterad programmering i Java

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Presentation av trafiksimuleringsprojektet

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Dynamisk bindning och polymorfism

Objektorienterad Programmering (TDDC77)

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

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

Arv och polymorfism i Java

Repetition av viktiga begrepp inom objektorienterad programmering

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

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

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

1 Repetition av viktiga begrepp inom objektorienterad programmering

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

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

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Föreläsning 5-6 Innehåll

Objektorienterad Programmering (TDDC77)

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

OOP Tenta

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

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

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

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

OOP Tentamen

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

Introduktion till arv

JAVAUTVECKLING LEKTION 11

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

PROGRAMMERINGSTEKNIK TIN212

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Polymorfi. Objektorienterad och komponentbaserad programmering

TDDC76 - Programmering och Datastrukturer

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

Transkript:

Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet har tre Lanes och två Lights public class TrafficSystem { private Lane r0; private Lane r1; private Lane r2; private Light s1; private Light s2; //metoder... Eller I arv, är-relation. Exempel: SyntaxException är ett RuntimeException public class SyntaxException extends RuntimeException (2009-04-28 7.1 )

Klasshierarkier - repetition Exempel på har-relation: TrafficSystem r0: Lane r1: Lane r3: Lane s1: Light s2: Light ============== //metoder... Light period: int green: int time: int ========= //metoder Lane thelane [] Vehicle ============== //metoder Vehicle borntime: int destination: char ============= //metoder (2009-04-28 7.2 )

Klasshierarkier - repetition Exempel på är-relation: Fordon maxhastighet:double Spark Cykel växel : int växla(int) : void Bil vikt : double Personbil pantal : int Lastbil maxlast : double (2009-04-28 7.3 )

Klasshierarkier - repetition Terminologi I basklass subklass I en subklass är en specialiseringar/utökning av basklassen: en subklass är en basklass som... I en subklass ärver alla attribut och metoder från basklassen (från alla nivåer) I en subklass kan skriva över (dölja) basklassens attribut och metoder samt, naturligtvis, tillfoga egna (2009-04-28 7.4 )

Repetition forts I kod: nyckelordet är extends public class Fordon { double maxhastighet = 100; public void print() { System.out.print("Fordon"); public class Cykel extends Fordon { double maxhastighet = 45; int växel = 1; public void print() { System.out.print("Cykel med " + växel + " växlar"); public void växla(int v) { växel = v; public class Spark extends Fordon { (2009-04-28 7.5 )

Skyddsnivåer I private Endast åtkomligt från klassens egna metoder I public Åtkomligt för alla I protected Åtkomligt från egna subklasser och klasser i samma paket I package Om ingen skyddsnivå anges så ges alla klasser i samma paket åtkomsträttighet (2009-04-28 7.6 )

Konstruktorer, ett exempel Konstruktorer ärvs inte men basklassens konstruktorer kan anropas med super. public class Fordon { double maxhastighet = 100; public Fordon (double mh) { maxhastighet = mh; //mer kod... public class Cykel extends Fordon { int växel = 1; public Cykel(int v, double mh) { super(mh); //anropar konstruktor i basklassen växel = v; public Cykel(int v) { this(v,50); //anropar konstruktor i den egna klassen //mer kod... (2009-04-28 7.7 )

Konstruktorer vid arv Konstruktorer ärvs inte När ett objekt ur en subklass skapas så sker följande: 1. Instansvariablerna får sina defaultvärden 2. En konstruktor för superklassen anropas. Man använder super för att specicera vilken av basklassens konstruktor som skall användas. Om super inte används anropas basklassens parameterlösa konstruktor som då måste nnas. 3. Eventuella initieringsuttryck evalueras och tilldelas respektive instansvariabler 4. Satserna i subklassens konstruktor exekveras Använd super i stället för att upprepa kod! (2009-04-28 7.8 )

Mer arv För att referenserna till metoden m och attributet a i koden class C extends B {...... C r = new C(); r.m(); r.a = 4; skall vara korrekta så måste m och a vara deklarerade i klassen C eller i någon basklass till C (t ex i B) (2009-04-28 7.9 )

Mer arv En variabel deklarerad att referera objekt av en viss klass får också referera objekt av klassens subklasser (men inte tvärtom). Exempel: Cykel c = new Cykel(); //Tillåtet Fordon f = new Cykel(); //Tillåtet I Om en metod är denierad på era nivåer så är det objektets verkliga typ som används vid valet av variant (dynamisk eller sen bindning) Exempel: f.print(); // Cykelklassens print-metod anropas. c.print(); // Cykelklassens print-metod anropas. I Om ett attribut är denierat på era nivåer så är det deklarationen av referensen som avgör vilket som väljs (statisk eller tidig bindning) Exempel: System.out.println(f.maxHastighet); // Fordonklassens attribut System.out.println(c.maxHastighet); // Cykelklassens attribut (2009-04-28 7.10 )

Metoder som bara nns i vissa klasser Fordon maxhastighet: double Spark Cykel växel : int växla(int) : void Bil vikt : double Personbil pantal : int skatt() : double Lastbil maxlast : double skatt() : double Bilar beskattas men beräkningen görs på olika sätt för person- och lastbilar. (2009-04-28 7.11 )

Användning av skatt-metoden Bil b = new Lastbil(3., 2.);... if (...) { b = new Personbil(1.2, 5);... double s; s = b.skatt(); s = ((Lastbil) b).skatt(); // Illegalt! Skatt inte finns i b // Riskabelt! Fungerar ej om if utförts if ( b instanceof Lastbil ) // OK men klumpigt och s = ((Lastbil) b).skatt(); // oflexibelt else if ( b instanceof Personbil ) s = ((Personbil) b).skatt(); else s = 0; (2009-04-28 7.12 )

Använd polymorsm - sen bindning (dynamisk bindning) Fråga: varför är inte skatt en instansvariabel? OBS! compare-metoderna har alla ett Fordon-objekt i parameterlistan => sen bindning. Fordon ================== ------------------------------- skatt() : double compare(fordon): void Cykel ================= växel: int ------------------------------ skatt() : double compare(fordon): void Bil ================= ------------------------------ skatt() : double compare(fordon): void Personbil ================= pantal : int ------------------------------ skatt() : double print : void compare(fordon): void Lastbil ================== maxlast : double ------------------------------- skatt() : double print : void compare(fordon) : void (2009-04-28 7.13 )

Använd polymorsm - sen bindning (dynamisk bindning) public class Fordon { public double skatt() { return 50; public void compare (Fordon annat) { System.out.println("Fel."); //mer kod... public class Bil extends Fordon { public double skatt() { return 40; public void compare(fordon annat) { if (this.skatt() > annat.skatt()) System.out.println("Bilen betalar mer: " + this.skatt()); else if (this.skatt() == annat.skatt()) System.out.println("De betalar lika mycket."); else System.out.println("Den andra betalar mer."); //mer kod... (2009-04-28 7.14 )

Använd polymorsm - sen bindning (dynamisk bindning) public class Lastbil extends Bil { double maxlast; public double skatt() { return 30; public void compare(fordon annat) { if (this.skatt() > annat.skatt()) System.out.println("Lastbilen betalar mer:" + this.skatt()); else if (this.skatt() == annat.skatt()) System.out.println("De betalar lika mycket."); else System.out.println("Den andra betalar mer."); //mer kod... (2009-04-28 7.15 )

Använd polymorsm - (fortsättning) public class TestFordon { public static void main(string[] arg) { Bil b = new Bil(); Lastbil l = new Lastbil(); Fordon f = new Bil(); System.out.print("Jämför bilen med lastbilen: "); b.compare(l); System.out.print("Jämför bilen med fordonet: "); b.compare(f); System.out.print("Jämför lastbilen med fordonet: "); l.compare(f); Typen på compare-metodens parameter bestäms av java-interpretatorn, inte vid kompilering. Utskrift från programkörning: Jämför bilen med lastbilen: Bilen betalar mer: 40.0 Jämför bilen med fordonet: De betalar lika mycket. Jämför lastbilen med fordonet: Den andra betalar mer. (2009-04-28 7.16 )

OOP, objektorienterad programmering De tre viktigaste programmeringsmekanismerna för OOP: I inkapsling I arv I polymorsm <> sen bindning: variablers förmåga att ha mer än en typ, vilket tillåter olika objekt exibiliteten att svara olika på samma anrop. (2009-04-28 7.17 )

Standardprogramvara i Java Hela Java-miljön bygger på arv och klasshierakier! Exempel: 1. Klasserna för undantag: Throwable med underklasserna Error och Exception med underklasserna... 2. Graska komponenter: Component med underklasser Button, Checkbox, Container,... där t ex Container har underklasserna Panel, Window... 3. Avbildningar: Map med bl a underklassen HashMap 4. Samlingsklasserna: Collection med bl a underklassen och List som bl a har underklasserna Vector och LinkedList (Map, Collection och List är egentligen interface och inte klasser) (2009-04-28 7.18 )

Arv - abstrakta metoder och klasser Det nns ingen meningsfull implementation av print() och compare() i Fordon! Deklarera dessa metoder och klassen Fordon som abstract. Inget fordon är bara ett fordon, det är antingen en bil eller en cykel eller... //klassen måste deklareras abstract eftersom den har abstrakta metoder public abstract class Fordon { public double skatt() { return 50; public abstract void compare (Fordon annat); //en abstrakt metod public abstract void print(); //en abstrakt metod (2009-04-28 7.19 )