The billion dollar mistake

Relevanta dokument
The billion dollar mistake

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

Förra föreläsningen. Dagens agenda. Jojo-kort med två strategier Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Förra föreläsningen. Dagens agenda. Jojo-kort med två strategier Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

HT1 2013, FÖRELÄSNING

HT1 2015, FÖRELÄSNING

Objektorienterad modellering och design (EDAF25) Föreläsning 5. Repetition Grafer Traversering bredden först med kö

Kursstruktur. Objektorienterad modellering och diskreta strukturer / design. Programmering utan OMD. Vad är Objektorienterad modellering?

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

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

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

Tentamen i Objektorienterad modellering och design Helsingborg

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

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

Alfabeten, strängar och språk. String

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

Information. Computer

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design. Vad är Objektorienterad modellering?

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

LÖSNINGSFÖRSLAG

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

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

Tentamen Programmering fortsättningskurs DIT950

Kursstruktur. Objektorienterad modellering och diskreta strukturer / design. Vad är Objektorienterad modellering? Programmering utan OMD

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

TDDD78 Viktiga begrepp, del 2

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

10. Mängder och språk

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

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

Föreläsning 2. Länkad lista och iterator

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

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

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

Tentamen i Objektorienterad modellering och design Helsingborg

Objektorienterad Programmering (TDDC77)

Grammatik. BNF-grammatik

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

DAT043 Objektorienterad Programmering

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

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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 12: Exempel och problemlösning

Föreläsning 2. Länkad lista och iterator

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

OOP Objekt-orienterad programmering

DAT043 - Föreläsning 7

Tentamen i Objektorienterad modellering och design

Objektsamlingar i Java

Objektorienterad Programmering (TDDC77)

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

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

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

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

Computer projekttid. Objektorienterad modellering och diskreta strukturer / design. Rapporter från verkligheten. EDAF10 i HT2

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

Föreläsning 8: Exempel och problemlösning

Programmering A. Johan Eliasson

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Repetition av OOP- och Javabegrepp

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

TENTAMEN OOP

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Classes och Interfaces, Objects och References, Initialization

Repetition av OOP- och Javabegrepp

Länkade strukturer. (del 2)

F4. programmeringsteknik och Matlab

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

Tentamen Grundläggande programmering

LULEÅ TEKNISKA UNIVERSITET

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

EDAF10: Objektorienterad modellering och diskreta strukturer. EDA061: Objektorienterad modellering och design. Diskreta strukturer.

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

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

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

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 3: Booleans, if, switch

TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS

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

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

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

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

Laboration 2: Designmönster

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

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

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

Transkript:

Misstaget som kostat 1 000 000 000 $ Objektorienterad modellering och diskreta strukturer / design Designmönster och fallstudier Lennart Andersson The billion dollar mistake Reviderad 2011 09 08 2011 OMD 2011 F4-1 Den skyldige: Tony Hoare OMD 2011 F4-3 Tony Hoare 3)%9+:)'"#;+<%=#%&)"+)1+>.!"#$#%&'&()%*+,-.//+0#1#"#%2#$*+34#+5(//()%+6)//'"+7($&'8#,!"#$%!"#$%&'($)*++,"-*."$./*% V$("X>* X<6<7<!&'(!"0($.*,"12!33"4"15!33 )'8GA )*$#+&*,!"6--/,"7''8./?/+' ':/"'@ -./+"#$+!"9")*++"$&"8,"-$++$':4.'++*("8$%&*;/<"9&"=*%"&>/"$:?/:&$':"'@"&>/":A++ *+F'($& (/@/(/:)/"$:"1BCD<"6&"&>*&"&$8/E"9"=*%"./%$F:$:F"&>/"@$(%&")'8G(/>/:%$?/"&,G/ %,%&/8"@'("(/@/(/:)/%"$:"*:"'-H/)&"'($/:&/."+*:FA*F/"I6JKLJ"MN<"O,"F'*+"=*%"&' #/"*+% /:%A(/"&>*&"*++"A%/"'@"(/@/(/:)/%"%>'A+."-/"*-%'+A&/+,"%*@/E"=$&>")>/);$:F G/(@'(8/."*A&'8*&$)*++,"-,"&>/")'8G$+/(<"PA&"9")'A+.:Q&"(/%$%&"&>/"&/8G&*&$':"&' G('F(* GA&"$:"*":A++"(/@/(/:)/E"%$8G+,"-/)*A%/"$&"=*%"%'"/*%,"&'"$8G+/8/:&<"R>$%">*%"+/. X'88 &'"$::A8/(*-+/"/(('(%E"?A+:/(*-$+$&$/%E"*:."%,%&/8")(*%>/%E"=>$)>">*?/"G('-*-+, &'"%G/ )*A%/."*"-$++$':".'++*(%"'@"G*$:"*:.".*8*F/"$:"&>/"+*%&"@'(&,",/*(%<"9:"(/)/:& G(')/%,/*(%E"*":A8-/("'@"G('F(*8"*:*+,%/(%"+$;/"S7T@$U"*:."S7T@*%&"$:"O$)('%'@&">*?/ -//:"A%/."&'")>/);"(/@/(/:)/%E"*:."F$?/"=*(:$:F%"$@"&>/(/"$%"*"($%;"&>/,"8*,"-/ :':4:A++<"O'(/"(/)/:&"G('F(*88$:F"+*:FA*F/%"+$;/"VG/)W">*?/"$:&('.A)/../)+*(*&$':%"@'(":':4:A++"(/@/(/:)/%<"R>$%"$%"&>/"%'+A&$':E"=>$)>"9"(/H/)&/."$: OMD 2011 F4-4 1BCD< " 3)%9+:)'"#;+<%=#%&)"+)1+>.(28?)"&;+3."(%@+AB'"C+D(%%#" V$("X>*(+/%"6:&':,"7$)>*(."#'*(/"IR':,"#'*(/"'( X<6<7<"#'*(/E"-'(:"Y*:A*(,"11E"1B25N"$%"*"P($&$%> )'8GA&/("%)$/:&$%&E"G('-*-+,"-/%&";:'=:"@'("&>/./?/+'G8/:&"$:"1BC3"'@"ZA$);%'(&"I'("#'*(/%'(&NE ':/"'@"&>/"='(+.Q%"8'%&"=$./+,"A%/."%'(&$:F *+F'($&>8%< #/"*+%'"./?/+'G/."#'*(/"+'F$)"@'("?/($@,$:F G('F(*8")'((/)&:/%%E"*:."&>/"@'(8*+"+*:FA*F/ X'88A:$)*&$:F"V/[A/:&$*+"S(')/%%/%"IXVSN"A%/. &'"%G/)$@,"&>/"$:&/(*)&$':%"'@")':)A((/:& G(')/%%/%"I$:)+A.$:F"&>/"\$:$:F"G>$+'%'G>/(% G('-+/8N"*:."&>/"$:%G$(*&$':"@'("&>/"L))*8"G('F(*88$:F"+*:FA*F/< OMD 2011 F4-5

Abstract:!"#$#%&'&()%*+,-.//+0#1#"#%2#$*+34#+5(//()%+6)//'"+7($&'8#, Tony Hoare om Algol: 3)%9+:)'"#;+<%=#%&)"+)1+>.(28?)"&;+3."(%@+AB'"C+D(%%#"!"#$%!"#$%&'($)*++,"-*."$./*%!&'(!"0($.*,"12!33"4"15!33 )*$#+&*,!"6--/,"7''8 -./+"#$+!"9")*++"$&"8,"-$++$':4.'++*("8$%&*;/<"9&"=*%"&>/"$:?/:&$':"'@"&>/":A++ (/@/(/:)/"$:"1BCD<"6&"&>*&"&$8/E"9"=*%"./%$F:$:F"&>/"@$(%&")'8G(/>/:%$?/"&,G/ %,%&/8"@'("(/@/(/:)/%"$:"*:"'-H/)&"'($/:&/."+*:FA*F/"I6JKLJ"MN<"O,"F'*+"=*%"&' /:%A(/"&>*&"*++"A%/"'@"(/@/(/:)/%"%>'A+."-/"*-%'+A&/+,"%*@/E"=$&>")>/);$:F G/(@'(8/."*A&'8*&$)*++,"-,"&>/")'8G$+/(<"PA&"9")'A+.:Q&"(/%$%&"&>/"&/8G&*&$':"&' GA&"$:"*":A++"(/@/(/:)/E"%$8G+,"-/)*A%/"$&"=*%"%'"/*%,"&'"$8G+/8/:&<"R>$%">*%"+/. &'"$::A8/(*-+/"/(('(%E"?A+:/(*-$+$&$/%E"*:."%,%&/8")(*%>/%E"=>$)>">*?/"G('-*-+, )*A%/."*"-$++$':".'++*(%"'@"G*$:"*:.".*8*F/"$:"&>/"+*%&"@'(&,",/*(%<"9:"(/)/:&,/*(%E"*":A8-/("'@"G('F(*8"*:*+,%/(%"+$;/"S7T@$U"*:."S7T@*%&"$:"O$)('%'@&">*?/ -//:"A%/."&'")>/);"(/@/(/:)/%E"*:."F$?/"=*(:$:F%"$@"&>/(/"$%"*"($%;"&>/,"8*,"-/ :':4:A++<"O'(/"(/)/:&"G('F(*88$:F"+*:FA*F/%"+$;/"VG/)W">*?/"$:&('.A)/../)+*(*&$':%"@'(":':4:A++"(/@/(/:)/%<"R>$%"$%"&>/"%'+A&$':E"=>$)>"9"(/H/)&/."$: 1BCD< " V$("X>*(+/%"6:&':,"7$)>*(."#'*(/"IR':,"#'*(/"'( X<6<7<"#'*(/E"-'(:"Y*:A*(,"11E"1B25N"$%"*"P($&$%> )'8GA&/("%)$/:&$%&E"G('-*-+,"-/%&";:'=:"@'("&>/./?/+'G8/:&"$:"1BC3"'@"ZA$);%'(&"I'("#'*(/%'(&NE ':/"'@"&>/"='(+.Q%"8'%&"=$./+,"A%/."%'(&$:F *+F'($&>8%< Here is a language so far ahead of its time that it was not only an improvement on its predecessors #/"*+%'"./?/+'G/."#'*(/"+'F$)"@'("?/($@,$:F but also G('F(*8")'((/)&:/%%E"*:."&>/"@'(8*+"+*:FA*F/ on nearly all its successors. X'88A:$)*&$:F"V/[A/:&$*+"S(')/%%/%"IXVSN"A%/. &'"%G/)$@,"&>/"$:&/(*)&$':%"'@")':)A((/:& G(')/%%/%"I$:)+A.$:F"&>/"\$:$:F"G>$+'%'G>/(% G('-+/8N"*:."&>/"$:%G$(*&$':"@'("&>/"L))*8"G('F(*88$:F"+*:FA*F/< OMD 2011 F4-6 Null Object Introduktionen av null i objektorienterade språk var ett fundamentalt misstag. null modellerar något som inte finns. Är inte det befängt? Länkade listor och träd avslutas ofta med null. null är inget objekt; att använda null för att representera ingenting är ett exempel på icke-objektorienterad programmering. OMD 2011 F4-8 OMD 2011 F4-7 Konventionell länkad lista public class Node { private Object object; private Node next; public class List { private Node first; public int length() { int length = 0; Node node = first; while (node!= null) { length++; node = node.next(); return length; OMD 2011 F4-9

Null object Objektorienterad beskrivning Detta är en maskerad form av instanceof. next() är en getter. Node saknar intelligens. Programkoden blir enklare om man istället använder ett riktigt objekt. Detta är ett exempel på mönstret Null Object. En lista är antingen tom eller består av en nod med ett element som är ett Object och en svans som är en lista. OMD 2011 F4-10 Objektorienterad representation public interface List { public int length(); public class Empty implements List { public int length() { return 0; public class Node implements List{ private Object object; private List tail; public int length() { return 1 + tail.length(); OMD 2011 F4-12 OMD 2011 F4-11 Objektorienterad listimplementering Man ersätter iteration med rekursion; det gör programmet logiskt enklare; testet av det logiska villkoret i while-satsen försvinner. ArrayList är nästan alltid bättre än länkade listor. I nästan alla andra sammanhang är det bra design att representera något som är tomt med ett riktigt objekt. OMD 2011 F4-13

Förbud (nästan) Men... instanceof static getters Det finns tillfällen när instanceof, static och getters är nödvändiga och det enda rätta. OMD 2011 F4-14 instanceof static OMD 2011 F4-15 public final class Integer extends Number implements Comparable<Integer> { private final int value; public boolean equals(object object) { if(object instanceof Integer) { Integer other = (Integer) object; return value == other.value; return false; // omissions public static main(string arg[]) public final static double PI public static double sin(double a) public class Outer { private static class Inner { OMD 2011 F4-16 OMD 2011 F4-17

getters Spekulativ design, Martin p. 105 Ge mig ett bra exempel! Fool me once shame on you Fool me twice shame on me. Skriv program som om förutsättningarna inte kommer att förändras. Om detta ändå sker så implementera abstraktioner som skyddar mot framtida förändringar av samma slag. Take the first bullet and protect yourself from the second bullet from the same gun. OMD 2011 F4-18 Exempel Uppdragsgivaren vill ha en lista av Item-objekt: OMD 2011 F4-19 Exempel Uppdragsgivaren vill senare ha en lista som innehåller Item1-objekt och Item2-objekt. Detta är första skottet; nu garderar vi oss mot ett liknande skott: ItemList * Item ItemList * interface Item Item1 Item2 OMD 2011 F4-20 OMD 2011 F4-21

Uttryck med variabler Vi har modellerat aritmetiska uttryck utan variabler: 1 + 2 3 Nu vill uppdragsgivaren ha aritmetiska uttryck med variabler. 1 + x + x y Vi lägger till en klass för att representera en variabel: public class Variable implements Expr { private String name; public int value() { return??; Var skall variablernas värden finnas? I variabeln eller i minnet? public class Variable implements Expr { private String name; public int value(map<string, int> map) { return map.get(name); public interface Expr { public int value(map<string, int> map); OMD 2011 F4-22 Uttryck med variabler OMD 2011 F4-23 Muterbara objekt public class Add implements Expr { private Expr epr1, expr2; public int value(map<string, int> map) { return expr1.value(map) + expr2.value(map); Ett objekt vars tillstånd kan förändras kallas muterbart (mutable). När objektet modellerar någonting i verkligheten som har ett tillstånd som kan förändras så är det rimligt att modellen har samma egenskap. OMD 2011 F4-24 OMD 2011 F4-25

Ej muterbara objekt Recept för ej muterbarhet Ett objekt vars tillstånd inte kan förändras kallas omuterbart (immutable). När ett objektet modellerar någonting i verkligheten vars tillstånd inte kan förändras så är det rimligt att modellen har samma egenskap. Klassen måste vara final. Attributen måste vara privata. Attributen får ej vara muterbara. Inga metoder får förända attribut. Integer-objekt och String-objekt är omuterbara. OMD 2011 F4-26 Fördelar med omuterbara objekt OMD 2011 F4-27 Variable En klass som modellerar en matematisk heltalsvariabel: Säkrare Behöver ej kopieras, kan delas Enklare att resonera om public class Variable implements Expr { private int value; public setvalue{int value { this.value = value; OMD 2011 F4-28 OMD 2011 F4-29

Martin: Payroll: Systembeskrivning... Payroll project Vissa anställda arbetar på timbasis. Deras timlön finns i anställningsposten. De lämnar in tidkort med datum och antal timmar. Lönen utbetalas fredagar. Vissa anställda har fast lön som utbetalas sista vardagen varje månad. Vissa anställda med fast lön får också provision baserad på kvitton med datum och belopp med löneutbetalning varannan fredag. Lön utbetalas antingen via postanvisning till angiven adress, direkt till konto på bank, eller avhämtas på lönekontoret. OMD 2011 F4-30 Payroll:... Systembeskrivning OMD 2011 F4-31 Användningsfall Vissa anställda tillhör fackföreningen. Deras anställningskort innehåller veckoavgift. Föreningen kan debitera serviceavgifter för enskilda medlemmar. Avgifter dras från nästa lön. Transaktioner till systemet behandlas en gång om dagen och uppdaterar en databas. Löneutbetalningar genereras varje avlöningsdag. 1. Lägg till en ny anställd. 2. Ta bort en anställd 3. Registrera ett tidkort 4. Registrera ett försäljningskvitto 5. Registrera en föreningsavgift 6. Ändra anställningsinformation 7. Generera löneutbetalningar OMD 2011 F4-32 OMD 2011 F4-33

Use case diagram OMD 2011 Arv i anva ndningsfall F4-34 Oanva ndbart klassdiagram OMD 2011 F4-35 Substantiv ansta lld tidkort vecka datum adress fackfo rening medlem databas timbasis lo n ma nad belopp konto veckoavgift avgift avlo ningsdag timlo n fredag provision utbetalning bank ansta llningskort transaktion ansta llningspost vardag kvitto postanvisning lo nekontoret serviceavgift system Vilka substantiv a r centrala? OMD 2011 F4-36 OMD 2011 F4-37

Payroll Databasen enligt Martin 1 Övergripande design kapitel 18 i Martin Implementering kapitel 19 i Martin med C++. Implementering med Java i Payroll.zip via föreläsningssidan. Databasen är en implementeringsdetalj. Moduler skall bero på abstraktioner (DIP). Definiera ett gränssnitt (API)! OMD 2011 F4-38 Databas API OMD 2011 F4-39 Databas Implementering public class SimpleDatabase implements Database { private Map<Integer, Employee> employees = new HashMap<Integer, Employee>(); public interface DataBase { public Employee put(int key, Employee employee); public Employee get(int key); public Employee remove(int key); public Employee get(int empid) { return employees.get(empid); public Employee remove(int empid) { return employees.remove(empid); public Employee put(int empid, Employee employee) { return employees.put(empid, employee); OMD 2011 F4-40 OMD 2011 F4-41

Designmönster Façade Databasen enligt Martin 2 interface Database + get(int): Employee + put(int, Employee): Employee + remove(int): Employee Databasen används överallt. Den måste vara lätt åtkomlig. Det skall bara finnas en databas. Använd Singelton! HashMapDatabse 1 interface java.util.map OMD 2011 F4-42 Databasen enligt Andersson OMD 2011 F4-43 Det finns tre sorters anställda Design utan eftertanke: Databasen används bara i en metod. Det är lätt att ge metoden tillgång till databasen. Det behövs en annan databas redan när man skall testa programmet. Använd inte Singelton! Employee - name: String - address: String - id: int SalariedEmployee HourlyEmployee ComissionedEmployee OMD 2011 F4-44 OMD 2011 F4-45

Användningfall: en timanställd blir löneanställd Strategy Vad är problemet? Anställningsformen är en strategi. Man måste skapa ett nytt objekt och kopiera data från det gamla. Employee - name: String - address: String - id: int 1 Classification Bättre design? Designmönster? SalariedClassification HourlyClassification ComissionedClassification OMD 2011 F4-46 AddEmployee Template method OMD 2011 F4-47 Employee OMD 2011 F4-48 OMD 2011 F4-49

PayrollDate Klassdiagram: Associationer ren association riktad association aggregering komposition OMD 2011 F4-50 OMD 2011 F4-51