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

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

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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. 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 4 8 nov 2016

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

Introduktion till arv

Lösningar till tentamen i EDAF25

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Properties. Användbara metoder som kan anropas i propertychanged:

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

Imperativ programmering. Föreläsning 4

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

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

OOP Objekt-orienterad programmering

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

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

DAT043 - Föreläsning 7

Model View Controller. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Introduktion. Lagom är bäst. OO eller ej? TDP004 Objektorienterad Programmering Fö 7 Objektorienterad design, tips och råd

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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

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

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

Lösningar till tentamen i EDAF25

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

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

Klasshierarkier - repetition

PROGRAMMERINGSTEKNIK TIN212

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

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

TENTAMEN OOP

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

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

Objektorienterad Programkonstruktion. Föreläsning dec 2015

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

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

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

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

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

Designmönster/Design patterns

Classes och Interfaces, Objects och References, Initialization

Design Patterns. En kort introduktion

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

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

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

Föreläsning 5-6 Innehåll

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

DAT043 - föreläsning 8

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

TENTAMEN OOP

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

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

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

Objektorientering: Lagring och livstid

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

OOP Objekt-orienterad programmering

Laboration 1 - Grunderna för OOP i Java

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Objektorienterad programmering

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

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

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

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

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

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Kopiering av objekt i Java

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Transkript:

Objektorienterad Programkonstruktion Föreläsning 6 23 nov 2015

Designmönster Färdiga "recept" för att lösa (del-)problem i struktureringen av ens program Mönster kan beskriva små komponenter eller stora strukturer Idéen kommer ursprungligen från arkitekturvärlden på 70- och 80-talet, där man använde funktionella beskrivningar av olika komponenter för att sätta ihop mönsterlösningar Formulerades för datalogin 1994 i boken "Design Patterns", av Gamma, Helm, Johnson och Vlissides (GoF) Har sedan utvecklats och blivit en genomgående tema i framför allt objektorienterad programmering och "software engineering" Exempel på hur man inte bör göra kallas "Anti-Patterns" efter en bok med samma namn av Brown et al.

Argument för och emot Det finns färdiga lösningar på många problem man slipper återuppfinna hjulet Det är lättare att diskutera och förstå program när man har en gemensam terminologi för strukturer Designmönster kan leda till stel programmering, där man forcerar en dålig struktur på sin program bara för att det inte fanns någon bättre att tillgå i listan över färdiga mönster Vissa (t.ex LISP-programmerare som Paul Graham) hävdar att designmönster bara täcker över brister i språket, och inte behövs i bra programmeringspråk Svårt att återanvända mönster direkt i koden, måste ofta implementeras på nytt

Olika sorters mönster Creational Patterns - beskriver olika sätt att skapa objekt på Structural Patterns - beskriver olika sätt att realisera relationer mellan objekt Behaviorial Patterns -beskriver olika sätt att implementera kommunikation mellan objekt Architectural Patterns - beskriver olika sätt att strukturera program Concurrency Patterns - beskriver olika sätt att hantera samtidighet och turordningar i flertrådade program

Singleton Creational Pattern Ett objekt som det bara finns (kan finnas) en enda instans av, ex filsystem, fönsterhanterare, kontrollobjekt (se MVC) Gör det lättare att göra rätt genom bra design

Singleton Creational Pattern Ett objekt som det bara finns (kan finnas) en enda instans av, ex filsystem, fönsterhanterare, kontrollobjekt (se MVC) Gör det lättare att göra rätt genom bra design Dålig lösning: skriv i dokumentationen att man bara får skapa ett objekt av denna klass en gång

Singleton Creational Pattern Ett objekt som det bara finns (kan finnas) en enda instans av, ex filsystem, fönsterhanterare, kontrollobjekt (se MVC) Gör det lättare att göra rätt genom bra design Dålig lösning: skriv i dokumentationen att man bara får skapa ett objekt av denna klass en gång Bättre lösning: Gör så att det bara går att skapa ett objekt, försök att skapa fler går inte ens att kompilera Gör det lättare att göra rätt genom att göra det omöjligt att göra fel!

Singleton Man kan hindra användaren från att skapa fler objekt genom att göra konstruktorn privat. Nu får man inte längre anropa new MySingleton() Skapa i stället en publik metod som returnerar det enda objektet som kan finnas

Singleton i Java, version 1 public class MySingleton { private static MySingleton theinstance = new MySingleton(); private MySingleton() {... public static MySingleton getinstance() { return theinstance;

Singleton i Java, version 2 public class MyLazySingleton { private static MyLazySingleton theinstance = null; private MyLazySingleton() {... public static MyLazySingleton getinstance() { if (theinstance == null) theinstance = new MyLazySingleton(); return theinstance;

Singleton Det finns inget explicit hinder mot att ärva från en singletonklass om man inte gör konstruktorn privat Det går att överskugga de egenskaper som gör klassen till en singleton, så ärvande klasser ärver inte singletonegenskapen Om man inte vill att det ska gå att ärva från ens singletonklass, kan det vara bra att deklarera klassen som final för att förhindra förvirrande arv

Eget arv av singleton Om man vill ha egna subklasser som är singleton, med den ytterligare egenskapen att det bara får finnas en instans totalt, kan man använda sig av ett paket Man skriver en abstrakt publik klass som har en metod för att returnera ett och endast ett objekt, men vid skapandet av objektet väljs vilken sort det skall vara De klasser som ärver är inte publika, och kan inte instansieras utifrån paketet Den abstrakta klassen är synlig utifrån, men går inte att instansiera eftersom den är abstrakt

package singleton; public abstract class Singleton { private static Singleton theinstance; Singleton() { public static Singleton getinstance() { if(theinstance == null) { // Välj subklass och skapa objekt return theinstance; package singleton; class SingleA extends Singleton { SingleA () { package singleton; class SingleB extends Singleton { SingleB () {

Model View Controller (MVC) Ett arkitekturmönster för interaktiva program Ett av de äldsta mönstren, (Trygve Reenskaug 1979) Man separerar programmet i tre funktioner Model innehåller en model av processen, t.ex en varukorg på en e-handelsida, data och formler för en fysikalisk simulering, textdokumentet och avstavningsregler i en ordbehandlare View presenterar resultatet för användaren, genererar t.ex hemsidan för en e-handelsida, ritar grafer för simuleringen, eller visar upp dokumentet på skärmen i ordbehandlaren Controller styr processen, t.ex genom att säga åt modellen att uppdatera varukorgen när någon trycker på "köp"-knappen, säger åt simuleringen att börja när användaren trycker på "start", eller genom att säga åt radbrytaren att avstava texten när nya tecken skrivs in. Kan även säga åt view att uppdatera bilden

MVC Håller isär olika funktioner, så att det är lättare att byta ut delarna, t.ex kan man byta visualisering utan att ändra något i det bakomliggande programmet byta model utan att ändra visualiseringsprogrammet De olika delarna kan ha olika krav, så i vissa fall kan de vara separata program som körs på separata datorer Gör det lättare att byta platform, då platformsbyta framförallt berör view (och i viss mån controller)

MVC

Olika grader av updelning

MVC i Swing Javas Swingkomponenter är i sig ett exempel på MVC, men det är inte helt uppenbart för användaren Varje grafisk swingkomponent har en model, dvs ett objekt som innehåller data och metoder som inte har med grafiken att göra. Modellen är utbytbar. Exempel knappar: I modellen för knappar finns t.ex. Metoderna addactionlistener() och getactioncommand(). View och Control hanteras tillsammans av ButtonUI. Genom denna kan man byta det som kallas Look and Feel (L&F) på Swingkomponenter.

MVC i Swing-knappar