Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 8, Object Design: Reuse and Patterns III.

Slides:



Advertisements
Similar presentations
Conquering Complex and Changing Systems Object-Oriented Software Engineering OOMPA 2000 Föreläsning 9 Systemdesign med bla mönster Innehåll Vi lånar två.
Advertisements

Copyright © Active Frameworks Inc. - All Rights Reserved - V2.0Creational Patterns - Page L4-1 PS95&96-MEF-L11-1 Dr. M.E. Fayad Creationa l Paradigm.
 Recent researches show that predicative programming can be used to specify OO concepts including classes, objects, interfaces, methods, single and multiple.
Chapter 8, Object Design: Design Patterns II Using UML, Patterns, and Java Object-Oriented Software Engineering.
CSE3308/CSC Software Engineering: Analysis and DesignLecture 5B.1 Software Engineering: Analysis and Design - CSE3308 Patterns CSE3308/CSC3080/DMS/2000/12.
1 CS 501 Spring 2005 CS 501: Software Engineering Lecture 17 Object Oriented Design 3.
CS CS 5150 Software Engineering Lecture 17 Object Oriented Design 3.
CSE Software Engineering: Analysis and Design, 2002Lecture 7B.1 Software Engineering: Analysis and Design - CSE3308 Patterns CSE3308/DMS/2002/15.
Design Pattern Course Builder Pattern 1 Mahdieh Monzavi AmirKabir University of Technology, Department of Computer Engineering & Information Technology.
Chapter 8, Object Design Introduction to Design Patterns
Chapter 8, Object Design: Reuse and Patterns (Lecture II)
1 CS 501 Spring 2008 CS 501: Software Engineering Lectures 17 & 18 Object Oriented Design 3 & 4.
Design Patterns Based on Design Patterns. Elements of Reusable Object-Oriented Software. by E.Gamma, R. Helm, R. Johnson,J. Vlissides.
CS CS 5150 Software Engineering Lecture 16 Object Oriented Design 2.
CS CS 5150 Software Engineering Lecture 16 Object Oriented Design 2.
ECE 355 Design Patterns Tutorial Part 2 (based on slides by Ali Razavi) Presented by Igor Ivković
1 CS 501 Spring 2007 CS 501: Software Engineering Lectures 17 & 18 Object Oriented Design 3 & 4.
1 An introduction to design patterns Based on material produced by John Vlissides and Douglas C. Schmidt.
Creational Patterns Making Objects The Smart Way Brent Ramerth Abstract Factory, Builder.
Chapter 8, Object Design: Design Patterns II Using UML, Patterns, and Java Object-Oriented Software Engineering.
Behavioral Patterns  Behavioral patterns are patterns whose purpose is to facilitate the work of algorithmic calculations and communication between classes.
Design Patterns.
05 - Patterns Intro.CSC4071 Design Patterns Designing good and reusable OO software is hard. –Mix of specific + general –Impossible to get it right the.
CS 210 Introduction to Design Patterns September 28 th, 2006.
An Introduction to Design Patterns. Introduction Promote reuse. Use the experiences of software developers. A shared library/lingo used by developers.
Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 8, Object Design: Reuse and Patterns III.
Conquering Complex and Changing Systems Object-Oriented Software Engineering Chapter 6, System Design Design Patterns II.
UML - Patterns 1 Design Patterns. UML - Patterns 2 Becoming Good OO Developers Developing good OO Software is hard Takes a lot of time to take advantage.
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 1 Outline of the Lecture  Patterns covered  Composite:
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 1 Q3: common mistakes Dashed lines for data flow &
CEN 4010 Ninth Lecture March 4, 2005 Introduction to Software Engineering (CEN-4010) Spring 2005 Instructor: Masoud Sadjadi
Proxy Pattern: Motivation
COP 3331 Object-Oriented Analysis and Design 1 Patterns Again  Review of design pattern concepts  What is a design pattern?  Modifiable designs  Patterns.
Design Patterns CSCI 5801: Software Engineering. Design Patterns.
CS 210 Adapter Pattern October 19 th, Adapters in real life Page 236 – Head First Design Patterns.
Object Oriented Software Engineering Chapter 16 and 17 review 2014/06/03.
CS 240, Prof. Sarwar Slide 1 CS 240: Software Project Fall 2003 Sections 1 & 2 Dr. Badrul M. Sarwar San Jose State University Lecture #22.
Unit 4 Object-Oriented Design Patterns NameStudent Number CAI XIANGHT082182A KYAW THU LINHT082238Y LI PENGFEIHT082220L NAUNG NAUNG LATTHT082195L PLATHOTTAM.
Structural Design Patterns
ECE450S – Software Engineering II
Design Patterns CSIS 3701: Advanced Object Oriented Programming.
Proxy, Observer, Symbolic Links Rebecca Chernoff.
DESIGN PATTERNS COMMONLY USED PATTERNS What is a design pattern ? Defining certain rules to tackle a particular kind of problem in software development.
CS 210 Final Review November 28, CS 210 Adapter Pattern.
BEHAVIORAL PATTERNS 13-Sep-2012 Presenters Sanjeeb Kumar Nanda & Shankar Gogada.
Bernd Bruegge & Allen Dutoit Object-Oriented Software Engineering: Conquering Complex and Changing Systems 1 Software Engineering October 17, 2001 Design.
Advanced Object-oriented Design Patterns Creational Design Patterns.
Example to motivate discussion We have two lists (of menu items) one implemented using ArrayList and another using Arrays. How does one work with these.
Proxy Pattern defined The Proxy Pattern provides a surrogate or placeholder for another object to control access to it by creating a representative object.
CS 210 Proxy Pattern Nov 16 th, RMI – A quick review A simple, easy to understand tutorial is located here:
Chapter 8 Object Design Reuse and Patterns. More Patterns Abstract Factory: Provide manufacturer independence Builder: Hide a complex creation process.
CS 5150 Software Engineering Lecture 16 Program Design 3.
Reference – Object Oriented Software Development Using Java - Jia COP 3331 Object Oriented Analysis and Design Chapter 10 – Patterns Jean Muhammad.
Five Minute Design Patterns Doug Marttila Forest and the Trees May 30, 2009 Template Factory Singleton Iterator Adapter Façade Observer Command Strategy.
CLASSIFICATION OF DESIGN PATTERNS Hladchuk Maksym.
Review of last class. Design patterns CreationalStructuralBehavioral Abstract Factory Builder Factory Singleton etc. Adapter Bridge Composite Decorator.
CEN 5011 Sixth Lecture (2 nd part) Oct 20, 2004 Advance Software Engineering (CEN-5011) Fall 2004 Instructor: Masoud Sadjadi
Design Patterns: MORE Examples
Chapter 8, Object Design: Reuse and Patterns III
Chapter 8, Object Design: Design Patterns II
Design Patterns Lecture part 2.
Chapter 8, Design Patterns Builder
Presented by Igor Ivković
Design Patterns Satya Puvvada Satya Puvvada.
Design Patterns - A few examples
Informatics 122 Software Design II
Ms Munawar Khatoon IV Year I Sem Computer Science Engineering
Informatics 122 Software Design II
Chapter 8, Design Patterns Introduction
Presented by Igor Ivković
Presentation transcript:

Using UML, Patterns, and Java Object-Oriented Software Engineering Chapter 8, Object Design: Reuse and Patterns III

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 2 Outline of the Lecture  Review of design pattern concepts  What is a design pattern?  Modifiable designs More patterns:  Abstract Factory: Provide manufacturer independence  Builder: Hide a complex creation process  Proxy: Provide Location transparency  Command: Encapsulate control flow  Observer: Provide publisher/subscribe mechanism  Strategy: Support family of algorithms, separate of policy and mechanism

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 3 Review: Design pattern A design pattern is… …a template solution to a recurring design problem  Look before re-inventing the wheel just one more time …reusable design knowledge  Higher level than classes or datastructures (link lists,binary trees...)  Lower level than application frameworks …an example of modifiable design  Learning to design starts by studying other designs

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 4 Why are modifiable designs important? A modifiable design enables… …an iterative and incremental development cycle  concurrent development  risk management  flexibility to change …to minimize the introduction of new problems when fixing old ones …to deliver more functionality after initial delivery

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 5 What makes a design modifiable?  Low coupling and high cohesion  Clear dependencies  Explicit assumptions How do design patterns help?  They are generalized from existing systems  They provide a shared vocabulary to designers  They provide examples of modifiable designs  Abstract classes  Delegation

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 6 On to More Patterns!  Structural pattern  Proxy  Creational Patterns  Abstract Factory  Builder  Behavioral pattern  Command  Observer  Strategy

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 7 Proxy Pattern: Motivation  It is 15:00pm. I am sitting at my 14.4 baud modem connection and retrieve a fancy web site from the US, This is prime web time all over the US. So I am getting 10 bits/sec.  What can I do?

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 8 Proxy Pattern  What is expensive?  Object Creation  Object Initialization  Defer object creation and object initialization to the time you need the object  Proxy pattern:  Reduces the cost of accessing objects  Uses another object (“the proxy”) that acts as a stand-in for the real object  The proxy creates the real object only if the user asks for it

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 9 Proxy pattern  Interface inheritance is used to specify the interface shared by Proxy and RealSubject.  Delegation is used to catch and forward any accesses to the RealSubject (if desired)  Proxy patterns can be used for lazy evaluation and for remote invocation.  Proxy patterns can be implemented with a Java interface. Subject Request() RealSubject Request() Proxy Request() realSubject

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 10 Proxy Applicability  Remote Proxy  Local representative for an object in a different address space  Caching of information: Good if information does not change too often  Virtual Proxy  Object is too expensive to create or too expensive to download  Proxy is a standin  Protection Proxy  Proxy provides access control to the real object  Useful when different objects should have different access and viewing rights for the same document.  Example: Grade information for a student shared by administrators, teachers and students.

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 11 Virtual Proxy example  Images are stored and loaded separately from text  If a RealImage is not loaded a ProxyImage displays a grey rectangle in place of the image  The client cannot tell that it is dealing with a ProxyImage instead of a RealImage  A proxy pattern can be easily combined with a Bridge Image boundingBox() draw() realSubject RealImage boundingBox() draw() ProxyImage boundingBox() draw()

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 12 Before

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 13 Controlling Access

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 14 After

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 15 Towards a Pattern Taxonomy  Structural Patterns  Adapters, Bridges, Facades, and Proxies are variations on a single theme:  They reduce the coupling between two or more classes  They introduce an abstract class to enable future extensions  They encapsulate complex structures  Behavioral Patterns  Here we are concerned with algorithms and the assignment of responsibilies between objects: Who does what?  Behavorial patterns allow us to characterize complex control flows that are difficult to follow at runtime.  Creational Patterns  Here we our goal is to provide a simple abstraction for a complex instantiation process.  We want to make the system independent from the way its objects are created, composed and represented.

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 16 A Pattern Taxonomy Pattern Structural Pattern Behavioral Pattern Creational Pattern AdapterBridgeFacade Proxy Command ObserverStrategy Abstract Factory Builder Pattern Command

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 17 Command Pattern: Motivation  You want to build a user interface  You want to provide menus  You want to make the user interface reusable across many applications  You cannot hardcode the meanings of the menus for the various applications  The applications only know what has to be done when a menu is selected.  Such a menu can easily be implemented with the Command Pattern

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 18 Command pattern  Client creates a ConcreteCommand and binds it with a Receiver.  Client hands the ConcreteCommand over to the Invoker which stores it.  The Invoker has the responsibility to do the command (“execute” or “undo”). Command execute() Receiver action() Client Invoker ConcreteCommand execute() binds

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 19 Command pattern Applicability  “Encapsulate a request as an object, thereby letting you  parameterize clients with different requests,  queue or log requests, and  support undoable operations.”  Uses:  Undo queues  Database transaction buffering

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 20 Observer pattern  “Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.”  Also called “Publish and Subscribe”  Uses:  Maintaining consistency across redundant state  Optimizing batch changes to maintain consistency

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 21 Observer pattern (continued) 9DesignPatterns2.ppt Observers Subject

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 22 Observer pattern (cont’d) Observer update() Subject attach(observer) detach(observer) notify() ConcreteSubject getState() setState(newState) subjectState ConcreteObserver update() observerState observers subject *  The Subject represents the actual state, the Observers represent different views of the state.  Observer can be implemented as a Java interface.  Subject is a super class (needs to store the observers vector) not an interface.

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 23 Sequence diagram for scenario: Change filename to “foo” getState() update() aListViewanInfoViewaFile setState(“foo”) notify() Attach() “foo” Subject goes through all its observers and calls update() on them, asking for the new state is decoupled from the notification

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 24 Animated Sequence diagram getState() aListViewanInfoViewaFile notify() Attach() “foo” setState(“foo”) update()

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 25 Observer pattern implementation in Java // import java.util; public class Observable extends Object { public void addObserver(Observer o); public void deleteObserver(Observer o); public boolean hasChanged(); public void notifyObservers(); public void notifyObservers(Object arg); } public abstract interface Observer { public abstract void update(Observable o, Object arg); } public class Subject extends Observable{ public void setState(String filename); public string getState(); }

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 26 A Pattern Taxonomy Pattern Structural Pattern Behavioral Pattern Creational Pattern AdapterBridgeFacade Proxy Command ObserverStrategy Abstract Factory Builder Pattern Command Strategy

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 27 Strategy Pattern  Many different algorithms exists for the same task  Examples:  Breaking a stream of text into lines  Parsing a set of tokens into an abstract syntax tree  Sorting a list of customers  The different algorithms will be appropriate at different times  Rapid prototyping vs delivery of final product  We don’t want to support all the algorithms if we don’t need them  If we need a new algorithm, we want to add it easily without disturbing the application using the algorithm

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 28 Strategy Pattern Strategy AlgorithmInterface Context ContextInterface() ConcreteStrategyC AlgorithmInterface() * ConcreteStrategyB AlgorithmInterface() ConcreteStrategyA AlgorithmInterface() Policy Policy decides which Strategy is best given the current Context

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 29 Applying a Strategy Pattern in a Database Application Strategy Sort() Database Search() Sort() Strategy * BubbleSort Sort() QuickSort Sort() MergeSort Sort()

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 30 Applicability of Strategy Pattern  Many related classes differ only in their behavior. Strategy allows to configure a single class with one of many behaviors  Different variants of an algorithm are needed that trade-off space against time. All these variants can be implemented as a class hierarchy of algorithms

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 31 A Pattern Taxonomy Pattern Structural Pattern Behavioral Pattern Creational Pattern AdapterBridgeFacade Proxy Command ObserverStrategy Abstract Factory Builder Pattern Command Strategy Abstract Factory

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 32 Abstract Factory Motivation  2 Examples  Consider a user interface toolkit that supports multiple looks and feel standards such as Motif, Windows 95 or the finder in MacOS.  How can you write a single user interface and make it portable across the different look and feel standards for these window managers?  Consider a facility management system for an intelligent house that supports different control systems such as Siemens’ Instabus, Johnson & Control Metasys or Zumtobe’s proprietary standard.  How can you write a single control system that is independent from the manufacturer?

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 33 Abstract Factory CreateProductA CreateProductB CreateProductA CreateProductB AbstractProductA ProductA1 ProductA2 AbstractProductB ProductB1 ProductB2 ConcreteFactory 1 CreateProductA CreateProductB ConcreteFactory 2 Client Initiation Assocation: Class ConcreteFactory2 initiates the associated classes ProductB2 and ProductA2

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 34 Applicability for Abstract Factory Pattern  Independence from Initialization or Represenation:  The system should be independent of how its products are created, composed or represented  Manufacturer Independence:  A system should be configured with one family of products, where one has a choice from many different families.  You want to provide a class library for a customer (“facility management library”), but you don’t want to reveal what particular product you are using.  Constraints on related products  A family of related products is designed to be used together and you need to enforce this constraint  Cope with upcoming change:  You use one particular product family, but you expect that the underlying technology is changing very soon, and new products will appear on the market.

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 35 Example: A Facility Management System for the Intelligent Workplace IntelligentWorkplace InitLightSystem InitBlindSystem InitACSystem InitLightSystem InitBlindSystem InitACSystem LightBulb InstabusLight Controller ZumbobelLight Controller Blinds InstabusBlind Controller ZumtobelBlind Controller SiemensFactory InitLightSystem InitBlindsystem InitACSystem ZumtobelFactor y Facility Mgt System

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 36 Builder Pattern Motivation  Conversion of documents  Software companies make their money by introducing new formats, forcing users to upgrades  But you don’t want to upgrade your software every time there is an update of the format for Word documents  Idea: A reader for RTF format  Convert RTF to many text formats (EMACS, Framemaker 4.0, Framemaker 5.0, Framemaker 5.5, HTML, SGML, WordPerfect 3.5, WordPerfect 7.0, ….)  Problem: The number of conversions is open-ended.  Solution  Configure the RTF Reader with a “builder” object that specializes in conversions to any known format and can easily be extended to deal with any new format appearing on the market

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 37 Builder Pattern Construct() Director For all objects in Structure { Builder->BuildPart() } BuildPart() Builder BuildPart() GetResult() ConcreteBuilderB Represen- tation B BuildPart() GetResult() ConcreteBuilder A Represen- tation A

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 38 Example Parse() RTFReade r While (t = GetNextToken()) { Switch t.Type { CHAR: builder->ConvertCharacter(t.Char) FONT: bulder->ConvertFont(t.Font) PARA: builder->ConvertParagraph } ConvertCharacter() ConvertFontChange ConvertParagraph() TextConverter ConvertCharacter() ConvertFontChange ConvertParagraph() GetASCIIText() AsciiConverter AsciiText ConvertCharacter() ConvertFontChange ConvertParagraph() GetASCIIText() TexConverter TeXText ConvertCharacter() ConvertFontChange ConvertParagraph() GetASCIIText() HTMLConverter HTMLText

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 39 When do you use the Builder Pattern?  The creation of a complex product must be independent of the particular parts that make up the product  In particular, the creation process should not know about the assembly process (how the parts are put together to make up the product)  The creation process must allow different representations for the object that is constructed. Examples:  A house with one floor, 3 rooms, 2 hallways, 1 garage and three doors.  A skyscraper with 50 floors, 15 offices and 5 hallways on each floor. The office layout varies for each floor.

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 40 Comparison: Abstract Factory vs Builder  Abstract Factory  Focuses on product family  The products can be simple (“light bulb”) or complex (“engine”)  Does not hide the creation process  The product is immediately returned  Builder  The underlying product needs to be constructed as part of the system, but the creation is very complex  The construction of the complex product changes from time to time  The builder patterns hides the creation process from the user:  The product is returned after creation as a final step  Abstract Factory and Builder work well together for a family of multiple complex products

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 41 Summary  Structural Patterns  Focus: How objects are composed to form larger structures  Problems solved:  Realize new functionality from old functionality,  Provide flexibility and extensibility  Behavioral Patterns  Focus: Algorithms and the assignment of responsibilities to objects  Problem solved:  Too tight coupling to a particular algorithm  Creational Patterns  Focus: Creation of complex objects  Problems solved:  Hide how complex objects are created and put together

Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 42 Conclusion  Design patterns  Provide solutions to common problems.  Lead to extensible models and code.  Can be used as is or as examples of interface inheritance and delegation.  Apply the same principles to structure and to behavior.  Design patterns solve all your software engineering problems  My favorites: Composite, Bridge, Builder and Observer