Projektet Computer: Specifikation. Objektorienterad modellering och diskreta strukturer / design. Projektet Computer: Data. Projektet Computer: Test



Similar documents
Interface Programmera mot interface Johan Eliasson Johan Eliasson Interface kan bryta beroendekedjor Skriv generell kod «Type» Class2 Interface

WINDOWS PRESENTATION FOUNDATION LEKTION 3

Microsoft SQL Server 2012: Designing Buisness Intelligence Solutions

SAS Education Providing knowledge through global training and certification. SAS Foundation. Kursöversikt 2010

Category work in courtroom talk about domestic violence: Gender as an interactional accomplishment in child custody disputes

Configuring and Administering Hyper-V in Windows Server 2012

Car Customer Service. SFK Väst, January 2016, Måns Falk, mfalk, Security Class; Proprietary

TDDB84 Design Patterns Exam

Lösningsförslag till tentamen

SAS Data Integration SAS Business Intelligence

DRb Distributed Ruby. Johan Sørensen

Introduktion till SAS 9 Plattformen Helikopterkursen

Critical section problem (repetition)

Introducing a New Framework for Modelling Requirements, Traceability, and Patterns in UML MIKAEL SIMONSSON

Utlandsstudier/ Study Abroad. Interaktionsdesigner/ Interaction Designer

Vet du redan nu att du vill studera på Emirates Academy kan du fylla i ansökan nedan och skicka till KILROY.

Git as introduction to configuration management for students

InTime API - Exempel kod

Ange om en aktivitet har medfört att en tjänsteresa har utförts med flyg under 2013, och i sådana fall antal gånger.

MAXimize the benefits of Mobility Management

International Council on Systems Engineering. ISO/IEC/IEEE SEminar Linköping 16 november 2015

Tanden Care Provider Interfaces Submit Claim v3

Utbytesbatterier för UPS:er 300VA VA

Lab 2 review PHP intro. MVC (Model View controller)

Elektronikavfall. Thomas Lindhqvist IIIEE Lund University. 18 February 2009

How To Get Healthy With A Game Called Angel Hour

Introduction to Object-Oriented Programming

Stora studentgrupper och god pedagogik. Går det att kombinera?

Workshop 1: Can CM find common ground for HW & SW development?

Decision Analysis in Fire Safety Engineering. Henrik Johansson

Strategisk planering, Aktiv demokrati, 6-8 jan 2012

Parental benefit [Föräldrapenning]

Child allowance [Barnbidrag] and large family supplement [flerbarnstillägg] [Barnbidrag och flerbarnstillägg]

Diagnostisera problem med utskriftskvaliteten

IPR Äspö Hard Rock Laboratory. International Progress Report. Temperature Buffer Test. Report for retaining plug and anchoring

INTERNATIONELLA BANKÖVERFÖRINGAR

The Problem With Adding Positive and Negative Numbers

Classes and Objects in Java Constructors. In creating objects of the type Fraction, we have used statements similar to the following:

DECISION/BESLUT

First Java Programs. V. Paúl Pauca. CSC 111D Fall, Department of Computer Science Wake Forest University. Introduction to Computer Science

TRA Q NORDIC RELEASE - JULY 2013

Parental benefits [Föräldrapenning]

Jag valde att använda Net-EPP_client.php från centralnic för att komma igång.

Scrum Kandidatprojekt datateknik - TDDD83

Office of the Secretary of

ENGLISH LISTENING COMPREHENSION TEST PITKÄ OPPIMÄÄRÄ LÅNG LÄROKURS YLIOPPILASTUTKINTOLAUTAKUNTA STUDENTEXAMENSNÄMNDEN

AGENDA WINDOWS PRESENTATION FOUNDATION LEKTION 4. Statusbar Hyperlänkar WebBrowser TabControl Ribbon ListBox Data Template Resource Dictionary Style

public void setusername(string username) { this.username = username; } public void setname(string name) { this.name = name; }

Computer animations in physical chemistry. Kim Bolton School of Engineering, University College of Borås, SE , Borås

Collections.sort(population); // Método de ordenamiento

Nyheter i SAS9.4 för programmerare

Tutorial Reference Manual. Java WireFusion 4.1

JAVA Program For Processing SMS Messages

Strategic Business Intelligence at Toyota Material Handling Europe

Microsoft + SOA = Sant? Joakim Linghall Principal System Engineer SOA and Business Process joakiml@microsoft.com

SPEAKER IMPLEMENTATION & AMPLIFIER CONFIGURATIONS

How to set up & configure GADD Dashboard Server 1.4

Asset management i värmesektorn

BACHELOR THESIS. Application Programming Interface for Native Web Applications. Tobias Widlund

Large-scale industrial software development

OIO Dekstop applikation

Course Catalogue SOLVINA OFFERS A RANGE OF HIGHLY REQUESTED PROFESSIONAL COURSES PRESENTED BY TOP LEVEL SPEAKERS AT WORLD-WIDE LOCATIONS

Investigating the Possibility of an Active/Active Highly Available Jenkins

Homework/Program #5 Solutions

Anderssons Design 2014/ We love to rock your world - Maria & Stefan

Schema InvoiceXMLschema xsd

Web-based address book

Marknadsföring som en del av intäktsprocessen.

Martin Holmgren Vice President Fleet Management Cramo Group

AP Computer Science Java Subset

Application for Schengen Visa

How To Get A Scholarship To Hplu

Bachelor thesis Software Engineering and Management How can code reuse help a Software Company

Housing allowance for families with children [Bostadsbidrag till barnfamiljer]

How can the business benefit of Business Continuity Planning be measured? -A case study at AstraZeneca

Transcription:

Projektet Computer: Specifikation Objektorienterad modellering och diskreta strukturer / design Designmönster Lennart Andersson Reviderad 2010 09 04 public class Computer { public Computer(Memory memory) public void load(program program) public void run() 2010 OMD 2010 F3-1 Projektet Computer: Test OMD 2010 F3-2 Projektet Computer: Data public static void main(string[] args) { Program factorial = new Factorial(); System.out.println(factorial); Computer computer = new Computer(new LongMemory(64)); computer.load(factorial); computer.run(); public class Factorial extends Program { public Factorial() { Address n = new Address(0), fac = new Address(1); add(new Copy(new LongWord(5), n)); add(new Copy(new LongWord(1), fac)); add(new JumpEq(6, n, new LongWord(1))); add(new Mul(fac, n, fac)); add(new Add(n, new LongWord(-1), n)); add(new Jump(2)); add(new Print(fac)); add(new Halt()); OMD 2010 F3-3 OMD 2010 F3-4

Projektet Computer: Genomförande Designmönster Gruppen 1. registrerar sig via Sam (6 september) 2. formulerar svaren på åtta frågor 3. gör en design med klass- och sekvensdiagram 4. skickar in klassdiagram och källkod (24 timmar före mötet) 5. träffar sin handledare för designmöte (14-16 sept)) 6. reviderar designen och implementerar 7. skickar in klassdiagram och källkod (26 september) Command Composite Template Method Strategy Singleton Null Object Observer Factory Method Iterator Interpretor OMD 2010 F3-5 Command OMD 2010 F3-6 Command generellt OMD 2010 F3-7 OMD 2010 F3-8

Composite Composite användning public class Macro extends ArrayList<Command> implements Command { public void execute(context context) { for (Command command : this) { command.execute(context); Macro macro = new Macro(); macro.add(new PenDown()); macro.add(new Move(2, 0)); macro.add(new Move(0, 2)); macro.add(new Move(-2, 0)); macro.add(new Move(0, -2)); macro.add(new PenUp()); macro.execute(plotter); new Move(1, 1).execute(); macro.execute(plotter); OMD 2010 F3-9 Aktivitet OMD 2010 F3-10 Expr-klasserna använder Composite Rita klassdiagram! public class Num implements Expr { private int value; public int value() { return value; public class Add implements Expr { private Expr expr1, expr2; public int value() { return expr1.value() + expr2.value(); OMD 2010 F3-11 OMD 2010 F3-12

Klipp och klistra-orienterad programmering public class LoadMenuItem extends JMenuItem implements ActionListener { private final Gui gui; private String title; public LoadMenuItem(Gui gui, String title) { super(title); this.gui = gui; this.title = title; addactionlistener(this); public void actionperformed(actionevent event) { try { FileDialog dialog = new FileDialog(gui, title, FileDialog.LOAD); dialog.setvisible(true); String file = dialog.getfile(); String dir = dialog.getdirectory(); dialog.dispose(); String fullname = dir + file; gui.storage.load(new BufferedReader(new FileReader(fullName))); catch (IOException ex) { gui.statusarea.settext(ex.tostring()); OMD 2010 F3-14 Eliminera duplicerad kod: Försök 1 Kopian public class SaveMenuItem extends JMenuItem implements ActionListener { private final Gui gui; private String title; public SaveMenuItem(Gui gui, String title) { super(title); this.gui = gui; this.title = title; addactionlistener(this); public void actionperformed(actionevent event) { try { FileDialog dialog = new FileDialog(gui, title, FileDialog.SAVE); dialog.setvisible(true); String file = dialog.getfile(); String dir = dialog.getdirectory(); dialog.dispose(); String fullname = dir + file; gui.storage.save(new PrintStream(fullName)); catch (IOException ex) { gui.statusarea.settext(ex.tostring()); OMD 2010 F3-15 Eliminera duplicerad kod: Template method Med en flagga: private boolean save;... if(save) { gui.storage.save(new PrintStream(fullName)); else { gui.storage.load(new BufferedReader(new FileReader(fullName)));... Bryt ut det som är gemensamt och placera det i en abstrakt superklass. Fyll hålen med anrop av abstrakta metoder som implementeras i subklasserna. Klassdiagram! Vilken princip bryter vi mot? OMD 2010 F3-16 OMD 2010 F3-17

Template method Add Add- och Mul-klasserna i Expr innehåller duplicerad kod. Använd Template method-mönstret för att eliminera den! public class Add implements Expr { private Expr expr1, expr2; public Add(Expr expr1, Expr expr2) { this.expr1 = expr1; this.expr2 = expr2; public int value() { return expr1.value() + expr2.value(); Mul OMD 2010 F3-18 OMD 2010 F3-19 BinExpr Gemensam superklass public class Mul implements Expr { private Expr expr1, expr2; public Mul(Expr expr1, Expr expr2) { this.expr1 = expr1; this.expr2 = expr2; public int value() { return expr1.value() * expr2.value(); public abstract class BinExpr implements Expr { private Expr expr1, expr2; protected BinExpr(Expr expr1, Expr expr2) { this.expr1 = expr1; this.expr2 = expr2; protected abstract int op(int int1, int int2); public int value() { return op(expr1.value(), expr2.value()); OMD 2010 F3-20 OMD 2010 F3-21

Add Strategy public class Add extends BinExpr { public Add(Expr expr1, Expr expr2) { super(expr1, expr2); protected int op(int int1, int int2) { return int1 + int2; OMD 2010 F3-22 Strategy Strategimönstret användas när man vill kunna ändra hur en operation utförs under exekveringen av programmet; man byter strategi. Ett exempel visar hur man definierar strategier för att skriva ut listor med olika prefix. OMD 2010 F3-24 OMD 2010 F3-23 Strategy Först själva listan: public class List<T> extends ArrayList<T> { private Prefix prefix = new Empty(); public void setprefix(prefix prefix) { this.prefix = prefix; public String tostring() { StringBuilder builder = new StringBuilder(); for (T t : this) { builder.append(prefix.string()); builder.append(t).append( \n ); return builder.tostring(); OMD 2010 F3-25

Strategin Strategiklassserna public interface Prefix { public String string(); public class Star implements Prefix { public String string() { return "* "; public class Numbered implements Prefix { private int number; public String string() { number++; return String.valueOf(number) + " "; OMD 2010 F3-26 Star-strategin Alla Star-objekt är likadana och kan inte modifieras. Det behövs bara ett. public class Star implements Prefix { private class Star() { public final static Prefix star = new Star(); public String string() { return "* "; OMD 2010 F3-28 OMD 2010 F3-27 Allt kan definieras i Prefix Använd inte!! public interface Prefix { public String string(); public final static Prefix star = new Prefix() { public String string() { return "* "; ; public final static Prefix empty = new Prefix() { public String string() { return ""; ; OMD 2010 F3-29

Strategy En variant av Strategy Rita ett klassdiagram! Normalt är strategin ett attribut i klassen, men man kan i stället skicka med den som ett argument till en metod som behöver den. public String tostring(prefix prefix) { StringBuilder builder = new StringBuilder(); for (T t : this) { builder.append(prefix.string()); builder.append(t).append( \n ); return builder.tostring(); OMD 2010 F3-30 Template method eller Strategy? OMD 2010 F3-31 Singelton Båda mönstren kan användas för att eliminera duplicerad kod. Använd Template method när funktionaliteten skall vara den samma under objektets hela livstid. Hackerns favoritmönster. Syfte: att det bara skall kunna skapas en instans av klassen. Använd Strategy när funktionaliteten skall kunna förändras under livstiden. OMD 2010 F3-32 OMD 2010 F3-33

Konventionell Singelton Singelton public class Singelton { private static Singelton instance; // attributes omitted private Singelton() { // omissions public static Singelton instance() { if (instance == null) { instance = new Singelton(); return instance; // other methods omitted Bieffekt av den konventionella implementeringen: instansen blir ett globalt åtkomlig objekt. Globala objekt är bekväma att använda men innebär i regel dålig design. Konventionell Singelton får inte användas i kursen för klasser som har ett tillstånd! OMD 2010 F3-34 Singelton OMD 2010 F3-35 Objektdiagram På nästa övning skall vi implementera Singelton utan att skapa globalt tillgängliga objekt. OMD 2010 F3-36 OMD 2010 F3-37

Objektdiagram Sekvensdiagram (1 + 2) + 3 OMD 2010 F3-38 Sekvensdiagram OMD 2010 F3-39 Sekvensdiagram (1 + 2) + 3 Beräkna (1 + 2) + 3 OMD 2010 F3-40 OMD 2010 F3-41

Sekvensdiagram OMD 2010 F3-42