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

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

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

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

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

DAT043 - Föreläsning 7

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

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

Imperativ programmering. Föreläsning 4

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

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

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

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

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

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

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

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

Laboration 2: Designmönster

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

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

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

TDDC Terminologi Uppdaterad Fö #1

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

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

Objektorienterad programmering, allmänt

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

Laboration 2: Designmönster

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

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

Objektorienterad Programkonstruktion. Föreläsning jan 2016

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Classes och Interfaces, Objects och References, Initialization

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

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

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

Prova på-laboration i Ruby

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

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

Objektorienterad programmering. Grundläggande begrepp

Objektorientering: Lagring och livstid

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

Tentamen. DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl Hjälpmedel: penna, suddgummi, linjal

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad programmering

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

Historik: OOP. Objektorientering. Historik: OOP (forts) En Dum Fråga

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

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

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

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

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

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

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

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

Objektorientering: Lagring, räckvidd och livstid

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

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

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Design och konstruktion av grafiska gränssnitt

Objektorienterad Programkonstruktion

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

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

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

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

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

Programmering = modellering

Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

OOMPA 2D1359 Föreläsning 2

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Klasshierarkier - repetition

Design och konstruktion av grafiska gränssnitt

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Föreläsning 10. ADT:er och datastrukturer

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Föreläsning 2 Datastrukturer (DAT037)

Lösningar till tentamen i EDAF25

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Design av en klass BankAccount som representerar ett bankkonto

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

Kursplanering Objektorienterad programmering

Föreläsning 2. Objektorienterad analys och design. Analys: att modellera världen. Design: att strukturera program.

Föreläsning 15: Repetition DVGA02

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Datastrukturer och algoritmer

Designmönster, introduktion. Vad är det? Varför skall man använda mönster?

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

Mjukvarudesign. Designprocessen. Teknisk design. Konceptuell design

Transkript:

TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator, Observer Singleton, MVC, Strategy Antimönster 1

Vart började vi? Ada gav oss funktioner, datastrukturer och paket.. function sum(a, b : in Integer) return Integer is begin return a + b; end sum; package body Package_Name is --... end Package_Name; 2

Vad lades till? Java byggde på med: Objektorientering Arv Polymorfi Klassmetoder Klassvariabler Klass Beskrivs av Instantierar Objekt Instansmetoder Instansvariabler 3

Ett naturligt följdsteg.. Abstrakt datatyp En datatyp där man bortser från implementationsspecifika egenskaper och istället uppmärksammar en eller några få egenskaper. ADT implementeras med lämpliga datastrukturer och algoritmer Abstraktion (subst.) En tankeprocess i vilken man bortser från vissa egenskaper hos en företeelse eller ett föremål och i stället uppmärksammar en eller några få egenskaper Källa: Nationalencyklopedin (förkortad form) Vad händer om vi tar abstraktion ett steg längre..? 4

Designmönster Design: Att tillgodose ej förhandlingsbara krav samt optimera de förhandlingsbara Mönster: Regelbundenhet, något som upprepar sig Designmönster: Kärnan till en lösning på ett vanligt förekommande problem Objektorientering för återanvändning av kod, designmönster för återanvändning av lösningar 5

Scenario Anna skriver ett program och behöver en specifik funktionalitet Hon börjar med att skapa en klass med tomma metoder och använder sedan dessa som om de var implementerade så länge Harry berättar att han implementerade något liknande i ett annat projekt. Anna får gärna använda hans lösning, bara hon inte ändrar något i koden Harrys metoder ser inte riktigt likadana ut som Annas men kan uträtta samma uppgifter 6

Lösning vilket designmönster? Koden för lösningen: class AnnasClass { int makeitso(string data) {...} } class HarrysClass { int doit(int times, String info) {...} } Mönster: Få klasser som annars är class AnnasAdapter extends AnnasClass { private HarrysClass adaptee = ; @Override int makeitso(string data) { return adaptee.doit(1, data); } } inkompatibla att jobba tillsammans Adapter Design Pattern! 7

Vilket designmönster? Avsikt: Tillhandahålla ett gränssnitt för att skapa familjer av liknande eller beroende objekt utan att specificera deras konkreta klasser. Motivering: Skapandet av ett objekt kan vara en komplex process som inte bör ligga hos den som sedan hanterar objektet. Valet av vilket objekt som ska skapas kan vara svårbestämt, och kan ändras ofta. 8

Designmönstret Factory Tillämpning: Använd när En klass inte kan förutse vilken klass som ska instantieras En klass vill att dess subklasser ska specificera klassen som instantieras Skapandet av objekt är för komplext för konstruktorer 9

Vilket designmönster? Avsikt: Komma åt element i en objeksamling utan att synliggöra den underliggande representationen. Motivering: Traversera samlingen på olika sätt, baklänges, filtrera Flera samtidiga traverseringar Det är omständigt att låta samlingen själv innehålla traverseringsmetoder Struligt att behöva skriva särskild kod för att traversera olika typer av samlingar 10

Designmönstret Iterator Tillämpning: Dölj den inre representationen Stöd flera typer av traverseringar Enhetligt sätt att traversera samlingsstrukturer 11

Vilket designmönster? Avsikt: Definiera en "en till många"-relation mellan objekt, sådant att när ett objekt ändrar tillstånd meddelas alla beroende objekt Motivering: Svårt att hålla nära beroende objekt i synk Man vill inte påverka återanvändbarheten => Lös, detaljoberoende koppling 12

Designmönstret Observer Tillämpning: Använd när En abstraktion har flera aspekter, den ena beroende av den andra När en händelse i ett objekt kräver aktion i andra, och det är svårt att uppskatta exakt vilka andra När ett objekt behöver meddela intresserade om att något hänt 13

Vilket designmönster? Avsikt: Försäkra sig om att en klass bara har en enda instans och att det finns en global tillgång till denna. Motivering: I somliga program ska en klass bara instantieras en gång. Till exempel kan det finnas många skrivare i ett system, men bara en skrivarkö. 14

Designmönstret Singleton Tillämpning: Använd när Det bara får finnas en instans av en klass, som måste vara tillgänglig för hela programmet. Denna instans ska gå att utöka m.h.a. subklassning Obs: Använd bara med goda skäl.. 15

Vilket designmönster? Avsikt: Ge möjligheten att byta beteende under programmets körning, genom att t.ex. byta den algoritm som används för att lösa ett problem. Motivering: Ibland är vissa lösnings-strategier bättre för vissa typer av problem, samtidigt som andra varianter av samma problem kan lösas bättre av andra algoritmer. 16

Designmönstret Strategy Tillämpning: Använd när Flera olika lösningsstrategier är tillgängliga Det ska gå att byta fritt mellan olika lösningsstrategier Alla lösningar kan arbeta med samma modell 17

Vilket designmönster? Avsikt: Dela upp de övergripande ansvarsområdena för programkod inom ett avancerat, grafiskt program. Motivering: Ju större ett program blir, desto större blir behovet av en konsistent, lättbegriplig struktur som är lätt att följa och modifiera. 18

Designmönstret MVC MVC Model View Controller Tillämpning: Använd när Ett program kan delas upp i: Model Datastrukturen och de algoritmer som hör till View Utritningen Controller Tar input från vyn och översätter den till operationer på modellen 19

Antimönster En programmerare utvecklar inte bara goda vanor. En del dåliga mönster antimönster, dyker upp ibland Spaghetti code Hoppig kod utan överskådlig struktur God object En klass som fått alltför mycket ansvar, växt sig för stor Ofta ett symptom på bristande objektorientering eller för mycket global variabel-tänk Object orgy Bristande inkapsling leder till att objekts beteende blir oförutsägbart Klassens kontrakt kan inte längre garanteras Fler? Se http://en.wikipedia.org/wiki/anti-pattern (kom ihåg, allt är inte sant på internet) 20

Antimönster (2) Repeating yourself Samma kodstycke dyker upp på flera platser i programmet Motsatsen till principen Don t Repat Yourself (DRY) Programming by permutation Problem löses genom att skriva kod och se om det funkar Ofta ett symptom på att man inte är nog insatt i koden eller problemet Premature optimization Enkel och elegant design offras för att istället optimera We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil Donald Knuth 21

Vad mer kan vi hitta på..? + =? 22