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

Relevanta dokument
TDDD78 Objektorientering i Java, del 2

Ärvning av implementation. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva?

TDDD78 Objektorientering i Java, del 3. Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva?

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

TDDD78, TDDE30, 729A Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices

TDDD78 Objektorientering i Java, del 3

Sammansatta datatyper Generics: Parametrisk polymorfism

Objektorienterad Programmering (TDDC77)

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

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

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

"Ä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. Arv. Arv (forts) Arv och abstrakta klasser

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

TDDD78 Viktiga begrepp, del 2

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

Objektorientering: Lagring och livstid

TDDD78 Objektorientering i Java, del 2

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

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

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

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

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

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

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

TDDD78 Introduktion till OOP i Java

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Objektorientering: Lagring, räckvidd och livstid

Klasshierarkier - repetition

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

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

TDDD78 Objektorientering i Java, del 4. Hur vet man om två objekt är lika? Hur undviker man objekt och när?

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

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

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

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

TDDD78 Introduktion till OOP i Java

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

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

Viktiga programmeringsbegrepp: Kontrakt

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

Objektorienterad Programmering (TDDC77)

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Konstruktion av klasser med klasser

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 15: Repetition DVGA02

Introduktion till arv

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

Sammansatta datatyper Generics: Parametrisk polymorfism

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

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

TDDD78 Objektorientering: Lagring och livstid

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Monday, November 16, Senaste Labben

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

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

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

Föreläsning 13 Innehåll

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

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

TDDD78 Introduktion till OOP i Java

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

Analys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram

Klasser som datastrukturer

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

Generic type declarations. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

TUTORIAL: KLASSER & OBJEKT

Tentamen i Objektorienterad modellering och design

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

OOP Objekt-orienterad programmering

Felhantering TDDD78, TDDE30, 729A

DAT043 - Föreläsning 7

Outline. Objektorienterad Programmering (TDDC77) Abstrakta klasser. Abstrakta metoder. Abstrakta klasser. Gränssnitt. Uppräkningar (enum) Ahmed Rezine

Objektorienterad programmering. Grundläggande begrepp

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

Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

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

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

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

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

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

Objektorienterad Programmering (TDDC77)

Repetition av OOP- och Javabegrepp

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Föreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv?

Transkript:

TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser Hur används hierarkier för att modellera nära relaterade typer?

Nu: De viktigaste begreppen Pragmatisk användning av hierarkier, ärvning Nästa: Paus från ärvning Programmering av grafiska gränssnitt i Java Därefter: Hierarkier och ärvning del 2 Vad händer på ett djupare plan? Fler begrepp

Klasser med olikheter 4 Vi har pratat om klasser av objekt Tydliga olikheter separata klasser

Liknande objekt 5 Men om objekten är "ganska lika"? En klass: Generella motorfordon? Bra: Vi kan generalisera "Detta gäller alla motorfordon" Tre klasser: Bilar, bussar och lastbilar? Bra: Vi kan vara specifika "Detta gäller bara bussar" Fem klasser: Bil, lätt lastbil, tung lastbil, minibuss, buss?

Hierarkier av klasser 6 Vi kan ha hierarkier med både generella och specifika klasser! Fordon (gemensamma egenskaper) "is-a"-relation (en bil är en sorts motorfordon)

Hierarkier och delmängder 7 En bil är ett fordon Objekt av typ Fordon Objekt av typ Bil Alla bilar är fordon Cykel Buss Med denna hierarki: En Bil kan aldrig vara en Buss, är alltid ett Fordon

Liknande datatyper (1) 9 Flera sätt att lagra listor! "Linjärt i minnet Länkad lista Snabbt att slå upp element 92000: Adress = liststart + 92000 * elementstorlek Långsamt att stoppa in ett element: Måste flytta alla efterföljande element Långsamt att slå upp element 92000: Gå till start, följ pekare 92000 gånger Snabbt att stoppa in ett element: Ändra två pekare

Liknande datatyper (2) 10 Många olika implementationer: Mycket gemensamt t.ex. vilka metoder som finns Stora skillnader i kod (metoder, fält) olika klasser

Liknande datatyper (3) 11 Om vi måste ange exakt typ för parameter, returvärde:

Duck Typing Python 12 Duck Typing: When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck James Whitcomb Riley När jag ser ett objekt med get(), set(), extend(), då kallar jag det objektet en lista Även om vi har en ArrayList-klass: Parametertyp anges inte kontrollera vid körning om objektet har extend()!

Utan Duck Typing 13 Java Måste ange parametertyp Behöver annat sätt att ange ArrayList eller LinkedList eller

Hierarkier 14 Lösning: Vill ha hierarkier även här Objekt av typ List ArrayList LinkedList SkipList

Interface: Intro 16 Ett interface (gränssnitt) är specifikation utan implementation Metodsignaturer och dokumentation anger krav för alla som påstår sig vara av typ List (Koppling till abstrakta datatyper!) Metodsignaturer: Returtyp, namn, parametrar Inga fält, ingen metodkod Gränssnitt kan inte instansieras Det finns ingen kod för dess metoder! Metoder i ett gränssnitt är alltid (underförstått): tillgängliga för alla ej implementerade här

Interface: Hierarkier 1 17 Möjliggör en hierarki av datatyper! List: Detta ska alla listor klara Säger inte hur! LinkedList: Vanlig klass som uppfyller List-specifikationen

Interface: Hierarkier 2 18 Terminologi: List är supertyp till LinkedList LinkedList är subtyp till List supertyp = supertype subtyp = subtype

Interface: Vad vinner vi? 19 Kräv mindre! Lova mindre!

Interface 2: Implementation 20 En Java-klass kan implementera ett gränssnitt Ett löfte att uppfylla vad gränssnittet lovar ("kontrakt") Kompilatorn verifierar att metoderna från List finns Programmeraren verifierar att kontraktet i övrigt är uppfyllt Kan ha fler metoder än gränssnittet (håller ändå vad den lovar) implementera = implement

Interface 3: Typhierarki 21 En klass kan implementera flera gränssnitt Sortable och List är supertyper till LinkedList LinkedList är en subtyp till Sortable och List

UML: Klassdiagram med gränssnitt 22 UML-diagram: Klassrelationen realisering Ett gränssnitt är bara en beskrivning Klasser realiserar gränssnittet: Ger en konkret implementation Streckad pil, tom pilspets Medlemmar visas: Där de deklareras första gången Där de implementeras

Om man har flera "klassvarianter" med gemensam bas: Oftast bör man ha ett gränssnitt, så den gemensamma basen kan användas

Hierarkier av klasser 25 Hierarkier kan ha flera nivåer Fordon (har toppfart) "is-a"-relation (en bil är en sorts motorfordon) Motorfordon (har motorstyrka)

Hierarkier och delmängder 26 Fortfarande alla x är y : Fordon Motorfordon Alla motorfordon är fordon Cykel Bil Buss

Interface-ärvning 1: Hierarkier 27 Vi såg typhierarkier i två nivåer Gränssnitt anger funktionalitet: Vad som är gemensamt för alla listor Klasser ger oss implementationer

Interface-ärvning 2: Gemensamt 28 Men har också något gemensamt med Hur deklarerar vi en variabel som kan peka på en lista eller en mängd?

Interface-ärvning 3: En nivå till 29 Genom ytterligare en nivå!

Interface-ärvning 4 Detta är interface-ärvning 30 Collection är ett superinterface till List List utökar eller ärver från Collection List är ett underinterface till Collection List extends or inherits from Collection List is a subinterface of Collection Ärver Adderar kontrakt/löften: Collection lovar att ha en add()-metod, egna löften: List lovar också

Interface-ärvning 5: Multipel ärvning 31 Multipel ärvning tillåts för gränssnitt multipel ärvning = multiple inheritance

UML-klassdiagram: Generalisering 32 Klassrelation: Generalisering (ärvning) List specialiserar Collection (lägger till nya krav, nya metoder) Collection generaliserar List Vanlig linje, tom pilspets

Ärvning av implementation, inklusive abstrakta klasser Hur ska vi ärva? När ska vi ärva?

Implementationsarv 1: Klassnivåer 34 Nu kan vi ha godtyckligt antal nivåer men bara en klassnivå. Vill vi ha mer? Varför?

Implementationsarv 2: Nya medlemmar 35 En anledning: Addera egenskaper + funktionalitet till en klass Vill ibland lagra geometriska cirklar x y radie Ha kvar rena cirklar: Geometriklasser ska bara ha geometri, renare design Lägre minnesåtgång Kommer från klassbibliotek, kan inte ändras Vissa ska vara grafiska Outlinefärg Fyllfärg Ritmetod Utökad version!

Implementationsarv 3: Nya medlemmar 36 Adderar Ärver Ärver Adderar GraphicCircle utökar eller ärver från Circle GraphicCircle är en subklass till Circle Circle är en superklass till GraphicCircle

Implementationsarv 4: Visualisering 37 getcircum getarea setradius code code code getcircum getarea setradius draw code code code code

Implementationsarv 5: Overriding 38 Anledning 2: Ändra eller utöka nedärvd funktionalitet Kan override:a ("ersätta") metoder: Ge dem en ny implementation Fråga superklassen vad den tycker Kräver identiska parametertyper annars blir det overloading

Implementationsarv 6: super() 39 Modellering med super() 3. skulle vi inte få med framtida ändringar i Circle:s isvalid()! 2. Om vi istället skrev här: if (r < 0) return false; 1. Modellering: Inte bara bekvämlighet Superklassen vet när dess fält är giltiga vi måste fråga den! Sedan kan vi gå vidare med vårt ansvarsområde

UML-klassdiagram: Generalisering 40 Klassrelation: Generalisering (ärvning) Som för gränssnitt

Annoteringar vid overriding 41 Java: Kan ange "extra information om koden" via annoteringar Exempel: @override kan stoppas in automatiskt av IDEA Den här implementationen ersätter en annan! Stava fel, använd fel typer, ta bort get() från superklassen kompileringsfel!

Multipel ärvning? 43 Multipel ärvning i vissa språk: Utöka flera klasser Användbart och förvirrande Om båda superklasser har implementerat Vilken implementation ska ärva? Förbjudet i Java

Multipel implementation av gränssnitt 44 Men en klass kan implementera flera gränssnitt Finns ingen implementation att ärva Färre fallgropar

Rötter i klasshierarkin 46 I vissa språk har klasshierarkin flera rötter Vissa klasser är relaterade via ärvning, andra fristående Java: Alla klasser finns under Object!

Enkelrotad klasshierarki 47 Utan extends Med extends Så småningom kommer vi till Object! Fördel: En Object-variabel kan peka på vilket objekt som helst Användbart i generella datatyper Set, List, Vet inte typen av element i förväg

Konstruktorer och arv 1 49 Först: minnesallokering, defaultvärden, för alla fält Ingen får komma åt "gammalt skräp" Sedan släpps konstruktorer in: -delen "konstruerar sig" Kryss = null (pekar ingenstans) -delen "konstruerar sig" I vilken ordning? Superklassen först Ingen får komma åt -fälten (x,y,r) innan initialiserat dem Inte ens dess egen subklass!

Konstruktorer och arv 2 50 Men vi anropade ju Det första GraphicCircle gör: Anropa superklassens konstruktor Circle får initialisera sig Sedan får GraphicCircle sin chans att titta på objektet Sedan får vi objektet från konstruktorn, och kan titta på det Strunta i super( ) kompilatorn stoppar in super() utan argument Men Circle() finns inte: Kompileringsfel!

Konstruktorer: Skicka vidare! 51 Glöm inte att skicka vidare parametrar! Ibland ser vi följande: Tom Circle-konstruktor Anropar tom Circle-konstruktor Petar själv in värden i Circle-delen Dålig modellering! Circle får inte bestämma över sig själv Kan inte validera sina parametrar, Kan inte ändra sin implementation Upprepad kod i alla Circle-subklasser

Konstruktorer: Försvara klassen! 52 Se till att Circle kan försvara sig! Skapa bara konstruktorer som kräver rätt argument Underklasser kan inte låta bli att skicka x, y, r