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

Relevanta dokument
Ä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?

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

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

TDDD78 Objektorientering i Java, del 2

Objektorientering: Lagring och livstid

Objektorientering: Lagring, räckvidd och livstid

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!

TDDD78 Objektorientering: Lagring och livstid

Sammansatta datatyper Generics: Parametrisk polymorfism

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

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

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

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

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

Objektorienterad programmering. Grundläggande begrepp

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

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

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

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

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

Laboration 1: Figurer i hierarki

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

TDDD78 Introduktion till OOP i Java

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

TDDD78, TDDE30, 729A Grafik: Att "rita" egna komponenter

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

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

Classes och Interfaces, Objects och References, Initialization

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

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

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

Viktiga programmeringsbegrepp: Kontrakt

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

Föreläsning 13 Innehåll

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

Arrayer. results

729G06 Föreläsning 1 Objektorienterad programmering

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

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

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

Föreläsning 15: Repetition DVGA02

DAT043 - Föreläsning 7

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

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

Grafiska användargränssnitt i Java

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

Introduktion till arv

Felhantering TDDD78, TDDE30, 729A

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Objektorienterad Programkonstruktion

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

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

Kopiering av objekt i Java

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

TENTAMEN I DATAVETENSKAP

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

DAT043 - föreläsning 8

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

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

OOP Objekt-orienterad programmering

Föreläsning REPETITION & EXTENTA

Föreläsning 4 Innehåll

Länkade strukturer. (del 2)

TDDD78 Viktiga begrepp, del 2

Övningar Dag 2 En första klass

TDDD78 Objektorientering i Java, del 3

Grafiska användargränssnitt i Java

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

ID1004 Laboration 4, November 2012

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

TUTORIAL: SAMLING & KONSOLL

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

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

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

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

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

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

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

TDDD78 Introduktion till OOP i Java

Fördjupande uppsats i datalogi

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

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

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

TDDD78 Att välja och planera ett projekt

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

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

Objektorienterad programmering i Java I

1.1 Runnable och Thread

Sammansatta datatyper Generics: Parametrisk polymorfism

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

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

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

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

Transkript:

TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices

Abstrakt klass eller gränssnitt? (1) 3 Gränssnitt Kan implementera flera Ingen kod, bara löften / kontrakt Kan vara både List och Queue Alla som implementerar måste ha kod för alla metoder kan ta godtycklig Vem som helst kan implementera Även om man också implementerar eller utökar en klass Gränssnitt ger ingen gemensam kod att ärva

Abstrakt klass eller gränssnitt? (2) 4 Abstrakta klasser Ger löften och kod Kan bara utöka en Klasser tillhandahåller kod som alla subklasser använder Ingen klass kan vara Reader och InputStream Subklasser till och ärver användbar kod

Abstrakt klass eller gränssnitt? (3) 5 Javas I/O-klasser har suboptimal design "Basen" i dessa hierarkier är abstrakta klasser, inte gränssnitt I/O-kod deklarerar parametrar, fält, variabler av klasstyperna och! För att skapa en ny strömtyp som metoden kan använda, måste man utöka InputStream Då kan klassen inte utöka något annat Hade List och Queue varit abstrakta klasser, kunde LinkedList inte ha varit både List and Queue!

Abstrakt klass eller gränssnitt? (4) 6 Bra teknik: Använd båda! Hierarkiernas "baser" är gränssnitt (List, Queue) används för deklarationer etc. Man kan implementera dessa direkt full frihet Om man har mycket gemensam kod, och kan tjäna på att ha en abstrakt klass

Abstrakt klass eller gränssnitt? (5) 7 Kan man bara "stoppa in" en abstrakt klass! Metoder kräver/returnerar fortfarande List, inte AbstractList kan ta/returnera en CheckedList skriven utan den abstrakta klassen

Personer 1: Klasser 9 Vi vill ha en persondatabas för universitetet Ett sätt att modellera: En klass för varje typ av person Problem: Doktorander är både anställda och studenter

Personer 2: Gränssnitt 10 OK, vi använder gränssnitt multipel ärvning! Problem: Hur byter man typ?

Personer 3: Byta typ 11 Många personer byter typ under sin livstid Student doktorand postdoktor lektor professor? Objekt kan inte byta typ Vi måste skapa nytt objekt Praktiskt problem: Det gamla objektet kan lagras på många platser Måste bytas ut mot det nya, överallt Begreppsproblem: Jag byttes inte ut mot en ny person!

Personer 4: Alternativ klassificering 12 Varför dela upp enligt just anställningsform? Andra klassificeringar: Prefekt, dekan, rektor en roll som en professor kan ha Medlem i utbildningsnämnd, eller inte? Medlem i institutionsstyrelse, eller inte? Ska allt detta motsvaras av egna gränssnitt?

Personer 4: Annan lösning 13 Försök inte tvinga in ärvning för ärvningens skull! Alternativ lösning: Anställningsform är en egenskap som kan ändras En eller flera roller, kan också ändras (Överkurs: Nästlad enum-klass fullständigt namn, användbart när en klass tydligt tillhör en annan)

Schack: En kontrast 14 Schackspel: Kan ha flera klass för pjäser: Varje pjäs har en typ Eget beteende (förflyttningsregler), kanske tillräckligt komplext för egen klass Pjäser byter sällan typ kan enkelt hanteras Nya typer tillkommer aldrig Kan välja att ha en klass Avvägning: Vilket blir mest läsbart, modulärt? Inte separata klasser för vitt/svart alltför lika beteende

Om du bara har en hammare, ser alla problem ut som spikar Men vi har flera verktyg än ärvning!

Skapa inte klasser för klassernas skull

Onödiga klasser 1.1 17 Subklasser ska ha eget beteende: Nya eller ändrade metoder! Här skiljer sig bara konstruktorn Inget beteende, bara data (värden) Dålig lösning: Onödiga klasser Kan anropa med parametrar slipper två klasser fördelar i flexibilitet

Onödiga klasser 1.2: Fabriksmetoder 18 Om man ändå vill ge namn för att förenkla: Använd fabriksmetoder Behöver inte alltid en egen "fabriksklass" Anropas * bara från? Då kanske de ska ligga i istället

Onödiga klasser 2.1 19 Här finns metoder med olika kod Men den enda skillnaden är i värden! Ska inte ha olika klasser

Onödiga klasser 2.2: Lösning 20 Bra, generell lösning: Kan lätt ange godtycklig hopplängd Kan hitta på hopplängder under programmets körning (ingen ny klass krävs) Använd inte klasser när värden räcker

Att vara eller icke vara 22 Är den, eller har den? Gör vi så här, ärver Circle funktionalitet från Point Trevligt! Gratismetoder! Är en cirkel en sorts punkt? Nej!

Att vara eller icke vara (2) 23 En cirkel har en punkt mittpunkten Vill vi erbjuda liknande metoder? Delegera!

Att vara eller icke vara (3) 24 Är den, eller har den? Gör vi så här, ärver Queue funktionalitet från ArrayList Trevligt! Gratismetoder! Är en kö en sorts lista? Nej! Listor kan stoppa in element var som helst, ta bort var som helst, En kö kan ha en lista (se labbar)

Om du bara har en hammare, ser alla problem ut som spikar Använd komposition när det passar!