+ Informatics 122 Software Design II Lecture 9 Emily Navarro Duplication of course material for any commercial purpose without the explicit written permission.

Slides:



Advertisements
Similar presentations
Jump to Contents Instructor Tutorial essignments.com Paperless assignment submission system.
Advertisements

Programming with Java © 2002 The McGraw-Hill Companies, Inc. All rights reserved. 1 Chapter 12 More OOP, Interfaces, and Inner Classes.
Patterns Lecture 2. Singleton Ensure a class only has one instance, and provide a global point of access to it.
Design Patterns CS is not simply about programming
(c) 2010 University of California, Irvine – André van der Hoek1June 29, 2015 – 08:55:05 Informatics 122 Software Design II Lecture 8 André van der Hoek.
Abstract Classes and Interfaces
Inheritance and Polymorphism CS351 – Programming Paradigms.
Design Patterns academy.zariba.com 1. Lecture Content 1.What are Design Patterns? 2.Creational 3.Structural 4.Behavioral 5.Architectural 6.Design Patterns.
+ Informatics 122 Software Design II Lecture 8 Emily Navarro Duplication of course material for any commercial purpose without the explicit written permission.
Informatics 122 Software Design II Lecture 6 Emily Navarro Duplication of course material for any commercial purpose without the explicit written permission.
What Is a Factory Pattern?.  Factories are classes that create or construct something.  In the case of object-oriented code languages, factories construct.
Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. The Façade Design Pattern (1) –A structural design pattern.
Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. The Factory Method Design Pattern (1) –A creational design.
Singleton Christopher Chiaverini Software Design & Documentation September 18, 2003.
REFACTORING Lecture 4. Definition Refactoring is a process of changing the internal structure of the program, not affecting its external behavior and.
Design Patterns.
CISC6795: Spring Object-Oriented Programming: Polymorphism.
Design patterns. What is a design pattern? Christopher Alexander: «The pattern describes a problem which again and again occurs in the work, as well as.
SOFTWARE DESIGN AND ARCHITECTURE
Features of Object Oriented Programming Lec.4. ABSTRACTION AND ENCAPSULATION Computer programs can be very complex, perhaps the most complicated artifact.
CSC 211 Introduction to Design Patterns. Intro to the course Syllabus About the textbook – Read the introduction and Chapter 1 Good attendance is the.
CSCI-383 Object-Oriented Programming & Design Lecture 13.
Refactoring Improving the structure of existing code Refactoring1.
Question of the Day  On a game show you’re given the choice of three doors: Behind one door is a car; behind the others, goats. After you pick a door,
Question of the Day  On a game show you’re given the choice of three doors: Behind one door is a car; behind the others, goats. After you pick a door,
The Adapter Pattern SE-2811 Dr. Mark L. Hornick 1.
ECE450 - Software Engineering II1 ECE450 – Software Engineering II Today: Design Patterns IX Interpreter, Mediator, Template Method recap.
Refactoring1 Improving the structure of existing code.
L11-12: Design Patterns Definition Iterator (L4: Inheritance)‏ Factory (L4: Inheritance)‏ Strategy (L5: Multiple Inheritance)‏ Composite (L6: Implementation.
Topic 1 Object Oriented Programming. 1-2 Objectives To review the concepts and terminology of object-oriented programming To discuss some features of.
Programming in Java CSCI-2220 Object Oriented Programming.
Object Oriented Software Development
Factory Method Explained. Intent  Define an interface for creating an object, but let subclasses decide which class to instantiate.  Factory Method.
Programming with Java © 2002 The McGraw-Hill Companies, Inc. All rights reserved. 1 McGraw-Hill/Irwin Chapter 5 Creating Classes.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 26 - Java Object-Based Programming Outline 26.1Introduction.
Design Pattern. Definition: A design pattern is a general reusable solution to a commonly occurring problem within a given context in software design.
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
Software Design Patterns Curtsy: Fahad Hassan (TxLabs)
 Objects versus Class  Three main concepts of OOP ◦ Encapsulation ◦ Inheritance ◦ Polymorphism  Method ◦ Parameterized ◦ Value-Returning.
Design Patterns David Talby. This Lecture Re-routing method calls Chain of Responsibility Coding partial algorithms Template Method The Singleton Pattern.
Object Oriented Programming
Interfaces About Interfaces Interfaces and abstract classes provide more structured way to separate interface from implementation
CS 210 Final Review November 28, CS 210 Adapter Pattern.
Design Patterns Software Engineering CS 561. Last Time Introduced design patterns Abstraction-Occurrence General Hierarchy Player-Role.
More Design Patterns From: Shalloway & Trott, Design Patterns Explained, 2 nd ed.
Design Patterns Introduction
JAVA DESIGN PATTERN Structural Patterns - Facade Pattern Presented by: Amit kumar narela Ise Ise
Introduction to Object-Oriented Programming Lesson 2.
Adapter and Façade Patterns By Wode Ni and Leonard Bacon-Shone.
Advanced Object-oriented Design Patterns Creational Design Patterns.
The Facade Pattern (Structural) ©SoftMoore ConsultingSlide 1.
Refactoring1 Improving the structure of existing code.
Watching the movie the hard way…. Page 256 – Head First Design Patterns.
StarBuzz Coffee Recipe Boil some water Brew coffee in boiling water Pour coffee in cup Add sugar and milk Tea Recipe Boil some water Steep tea in boiling.
Singleton Pattern. Problem Want to ensure a single instance of a class, shared by all uses throughout a program Context Need to address initialization.
Module 9. Dealing with Generalization Course: Refactoring.
An object's behavior depends on its current state. Operations have large, multipart conditional statements that depend on the object's state.
 Description of Inheritance  Base Class Object  Subclass, Subtype, and Substitutability  Forms of Inheritance  Modifiers and Inheritance  The Benefits.
Notices Assn 2 is due tomorrow, 7pm. Moodle quiz next week – written in the lab as before. Everything up to and including today’s lecture: Big Topics are.
MPCS – Advanced java Programming
Design Patterns C++ Java C#.
Low Budget Productions, LLC
Behavioral Design Patterns
Design Patterns C++ Java C#.
Advanced Programming Behnam Hatami Fall 2017.
Tutorial 19 - Microwave Oven Application Building Your Own Classes and Objects Outline Test-Driving the Microwave Oven Application Designing.
Object Oriented Design Patterns - Creational Patterns
Improving the structure of existing code
Software Design Lecture : 35.
Designing For Testability
Presentation transcript:

+ Informatics 122 Software Design II Lecture 9 Emily Navarro Duplication of course material for any commercial purpose without the explicit written permission of the professor is prohibited. 1 Portions of the slides in this lecture are adapted from ctures/

+ Today’s Lecture Design patterns – part 3 of a 3-part series Three patterns: Template Method Singleton Facade Assignment 3, part 1 2

+ Template Method: Definition The Template Method pattern defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure Template Method defines the steps of an algorithm and allows subclasses to provide the implementation for one or more steps Makes the algorithm abstract Each step of the algorithm is represented by a method Encapsulates the details of most steps Steps (methods) handled by subclasses are declared abstract Shared steps (concrete methods) are placed in the same class that has the template method, allowing for code re-use among the various subclasses 3

+ Template Method: Structure 4

+ Example: Tea and Coffee Consider an example in which we have recipes for making tea and coffee at a coffee shop 5 Coffee Boil water Brew coffee in boiling water Pour coffee in cup Add sugar and milk Tea Boil water Steep tea in boiling water Pour tea in cup Add lemon

+ Coffee Implementation 6

+ Tea Implementation 7

+ Code Duplication! We have code duplication occurring in these two classes boilWater() and pourInCup() are exactly the same Let’s get rid of the duplication 8

+ Similar Algorithms The structure of the algorithms in prepareRecipe() is similar for Tea and Coffee We can improve our code further by making the code in prepareRecipe() more abstract brewCoffeeGrinds() and steepTea() -> brew() addSugarAndMilk() and addLemon() -> addCondiments() Now all we need to do is specify this structure in CaffeineBeverage.prepareRecipe() and make sure we do it in such a way so that subclasses can’t change the structure By using the word “final” (see next slide) 9

+ Caffeine Beverage Implementation 10 Note: use of final keyword for prepareRecipe() brew() and addCondiments() are abstract and must be supplied by subclasses boilWater() and pourInCup() are specified and shared across all subclasses

+ Coffee and Tea Implementations 11 Nice and simple!

+ What have we done? Took two separate classes with separate but similar algorithms Noticed duplication and eliminated it by adding a superclass Made steps of algorithm more abstract and specified its structure in the superclass Thereby eliminating another “implicit” duplication between the two classes Revised subclasses to implement the abstract (unspecified) portions of the algorithm… in a way that made sense for them 12

+ Singleton Pattern Used to ensure that only one instance of a particular class ever gets created and that there is just one (global) way to gain access to that instance Let’s derive this pattern by starting with a class that has no restrictions on who can create it 13

+ Deriving Singleton (I) public class Ball { private String color; public Ball (String color) { this.color = color; } public void bounce() { System.out.println(“boing!”); } } Ball b1 = new Ball (“red”); Ball b2 = new Ball (“blue”); b1.bounce(); b2.bounce(); 14

+ Problem: Universal Instantiation As long as a client object “knows about” the name of class Ball, it can create instances of Ball Ball b1 = new Ball (“orange”); This is because the constructor is public We can stop unauthorized creation of Ball instances by making the constructor private 15

+ Deriving Singleton (II) public class Ball { private String color; private Ball(String color) { this.color = color; } public void bounce() { System.out.println (“boing!”); } } // next line now impossible by any method outside of Ball Ball b2 = new Ball (“red”); 16

+ Problem: No Point of Access! Now that the constructor is private, no class can gain access to instances of Ball But our requirements were that there would be at least one way to get access to an instance of Ball We need a method to return an instance of Ball But since there is no way to get access to an instance of Ball, the method CANNOT be an instance method This means it needs to be a class method, aka a static method 17

+ Deriving Singleton public class Ball { private String color; private Ball (String color) { this.color = color; } public void bounce() { System.out.println (“boing!”); } public static Ball getInstance (String color) { return new Ball (color); } 18

+ Problem: Back to Universal Instantiation We are back to this problem where any client can create an instance of Ball; instead of saying this: Ball b1 = new Ball (“blue”); they just say Ball b1 = Ball.getInstance (“blue”); Need to ensure only one instance is ever created Need a static variable to store that instance No instance variables are available in static methods 19

+ Deriving Singleton (IV) public class Ball { private static Ball ball; private String color; private Ball (String color) { this.color = color; } public void bounce () { System.out.println(“boing!”); } public static Ball getInstance(String color) { return ball; } 20

+ Problem: No instance! Now the getInstance() method returns null each time it is called Need to check the static variable to see if it is null If so, create an instance Otherwise return the single instance 21

+ Deriving Singleton (V) public class Ball { private static Ball ball; private String color; private Ball (String color) { this.color = color;} public void bounce() { System.out.println(“boing!”); } public static Ball getInstance (String color) { if (ball == null) { ball = new Ball(color); } return ball; } 22

+ Problem: First Parameter Wins The code on the previous slide shows the Singleton pattern private constructor private static variable to store the single instance public static method to gain access to that instance this method creates object if needed; returns it But this code ignores the fact that a parameter is being passed in; so if a “red” ball is created all subsequent requests for a “green” ball are ignored 23

+ Solution: Use a Map The solution to the final problem is to change the private static instance variable to a Map private Map ballRecord = new HashMap… Then check if the map contains an instance for a given value of the parameter this ensures that only one ball of a given color is ever created this is a very acceptable variation of the Singleton pattern public static Ball getInstance(String color) { if (!ballRecord.containsKey(color)) { ballRecord.put(color, new Ball(color)); } return ballRecord.get(color); } 24

+ Singleton Pattern: Structure 25 Singleton involves only a single class (not typically called Singleton). That class is a full-fledged class with other attributes and methods (not shown). The class has a static variable that points at a single instance of the class. The class has a private constructor (to prevent other code from instantiating the class) and a static method that provides access to the single instance.

+ Singleton Pattern: Real World Examples Centralized manager of resources Window manager File system manager … Logger classes Factories Especially those that issue IDs Singleton is often combined with Factory Method and Abstract Factory patterns 26

+ Façade (I) “Provide a unified interface to a set of interfaces in a subsystem. Façade defines a higher-level interface that makes the subsystem easier to use.” Design Patterns, Gang of Four, 1995 There can be significant benefit in wrapping a complex subsystem with a simplified interface If you don’t need the advanced functionality or fine-grained control of the former, the latter makes life easy 27

+ Façade Pattern: Structure 28

+ Façade (II) Façade works best when you are accessing a subset of the system’s functionality You can add new features by adding them to the Façade (not the subsystem); you still get a simpler interface Façade not only reduces the number of methods you are dealing with but also the number of classes Imagine having to pull Employees out of Divisions that come from Companies that you pull from a Database A Façade in this situation can fetch Employees directly 29

+ Example (Without a Façade) 30 Without a Façade, Client contacts the Database to retrieve Company objects. It then retrieves Division objects from them and finally gains access to Employee objects. It uses four classes.

+ Example (With a Façade) 31 With a Façade, the Client is shielded from most of the classes. It uses the Database Façade to retrieve Employee objects directly.

+ Façade Example (I) Imagine a library of classes with a complex interface and/or complex interrelationships Home Theater System Amplifier, DvdPlayer, Projector, CdPlayer, Tuner, Screen, PopcornPopper, and TheatreLights each with its own interface and interclass dependencies 32

+ Façade Example (II) Imagine steps for “watch movie” turn on popper, make popcorn, dim lights, screen down, projector on, set projector to DVD, amplifier on, set amplifier to DVD, DVD on, etc. Now imagine resetting everything after the movie is done, or configuring the system to play a CD, or play a video game, etc. 33

+ Façade Example (III) For this example, we can place high level methods… like “watch movie”, “reset system”, “play cd” … in a façade object and encode all of the steps for each high level service in the façade; Demo Client code is simplified and dependencies are reduced A façade not only simplifies an interface, it decouples a client from a subsystem of components Indeed, Façade lets us encapsulate subsystems, hiding them from the rest of the system 34

+ Façade vs. Adapter Comparison (I) To many people, these two patterns (Adapter/Façade) appear to be similar They both act as wrappers of a preexisting class They both take an interface that we don’t want and convert it to an interface that we can use With Façade, the intent is to simplify the existing interface With Adapter, we have a target interface that we are converting to In addition, we often want the adapter to plug into an existing framework and behave polymorphically 35

+ Façade vs. Adapter Comparison (II) Superficial difference Façade hides many classes Adapter hides only one But a Façade can simplify a single, very complex object an adapter can wrap multiple objects at once in order to access all the functionality it needs The key is simplify (façade) vs. convert (adapter) 36

+ More Information on Design Patterns… Patterns Interaction design patterns Anti-Patterns And numerous, numerous, numerous books and other online sources

+ Assignment 3, Part 1: Design Patterns Use design patterns to improve the design of (a portion of) SimSE Waterfall Game SimSE is an educational software engineering simulation game environment developed at UCI Papers about SimSE are available on my Website (and SimSE has its own Website, linked off my site); feel free to consult them Get the SimSE Waterfall Game code from the subversion repository; detailed instructions follow 38

+ Assignment 3, Part 1: Design Patterns Improve the design of (a portion of) SimSE Waterfall Game by replacing existing structures in the code with appropriate patterns To scope the assignment, focus on the following six files: simse.adts.actions.Action simse.gui.SimSEMap.java simse.gui.World.java simse.state.RequirementsDocumentStateRepository.java simse.state.State.java simse.util.IDGenerator You do not have to use all six files You do not have to use only these six files You may also include other files (or portions of files) if you wish You should apply at least 3 patterns at least one not discussed in class 39

+ Assignment 3, Part 1: Design Patterns Each use of a pattern should be carefully motivated in a brief accompanying document Each individual must turn in: a printed copy of their restructured code a document describing the motivation for each pattern the impact the application of the pattern has on the original design (i.e., how far reaching is the change to incorporate the pattern?) 40

+ Assignment 3, Part 1: Design Patterns Graded on usefulness of the pattern, diversity of patterns, rationale, and level of design understanding Printed copy due Tuesday, February 11 th at the beginning of class Part 2 of this assignment will be given on Thursday and will also be due February 11 th So start now! 41

+ Detailed Checkout Instructions Two steps: 1. Install Subclipse plug-in for Eclipse 2. Check out the SimSE patterns repository Note: This assumes you’re using Eclipse and are otherwise comfortable with it. 42

+ Detailed Checkout Instructions In Eclipse, go to Help -> Install New Software 43

+ Detailed Checkout Instructions Click “Add Site”; enter name “Subclipse”; enter location 44

+ Detailed Checkout Instructions Hit “OK”; Check the Subclipse main box (also check the SVNKit main box for Mac); Hit “Next” 45

+ Detailed Checkout Instructions Agree to all licenses; let the libraries download; click “OK” at this dialogue box 46

+ Detailed Checkout Instructions Make a new Project (NOT Java Project) and choose this: 47

+ Detailed Checkout Instructions Make a new repository location 48

+ Detailed Checkout Instructions Enter “ and hit “Next” 49

+ Detailed Checkout Instructions Select the “simsepatterns” folder and click “Next” (NOT “Finish”) 50

+ Detailed Checkout Instructions Check it out in the workspace; give it a name; click “Finish” 51

+ Tips If you are prompted for a username and password, use: username: informatics122 password: simse2014 If you receive any SSL certificate errors, you can safely ignore them Check out the docs folder included with the download for helpful manuals about how to use SimSE and its tools Also see papers on my Website, SimSE Website as mentioned earlier 52