Lecture 9 Design Patterns CSCI 3350 Software Engineering
- Slides: 35
Lecture 9 Design Patterns CSCI – 3350 Software Engineering II Fall 2014 Bill Pine
Lecture Overview • • Background from architecture Basic design patterns Standard format Example patterns CSCI 3350 Lecture 9 - 2
Background • Recall the Chess Master Analogy • The Software Design Master – Must know, understand, and apply the deisgn patterns • There are hundreds of these patterns • The more frequently occurring patterns have been cataloged • We will examine a subset of these CSCI 3350 Lecture 9 - 3
Introduction • • Motivation: Promote reuse at design level An o-o system is an assembly of classes Want to leverage previous efforts New systems contain functionality not present in old – Else why build a new one? • Existing classes will likely be used in different ways than originally designed CSCI 3350 Lecture 9 - 4
Introduction (continued) • At least some of needed functionality will have been previously developed – Why re-invent the wheel? – Developing new implementations to familiar problems • Is a waste of time and money while under development • Serves as an injector of faults – And therefore a further waste of time and money • Design patterns are an attempt to provide a body of knowledge to commonly recurring problems – In a standard format CSCI 3350 Lecture 9 - 5
Introduction (continued) • The standard reference for object-oriented design patterns is the book – Title: Design Patterns: Elements of Reusable Object-Oriented Software – Authors: Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides – The authors are referred to as the “Gang of Four” in object-oriented design literature CSCI 3350 Lecture 9 - 6
Definition • Quote from Christopher Alexander “Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice. ” CSCI 3350 Lecture 9 - 7
Definition (continued) • What is the origin of design patterns? – Conventional architecture – Proposed by Christopher Alexander – The architectural patterns described towns and buildings • A pattern is a bit of insight that conveys the essence of a proven solution to a commonly recurring problem CSCI 3350 Lecture 9 - 8
Definition (continued) • An analogy from Jim Coplien “I could tell you how to make a dress by specifying the route of a pair of scissors through a piece of cloth, in terms of angles and length of cut. Or, I could give you a pattern. By reading the specification, you would have no idea of what was being built. The pattern foreshadows the product; it is the rule for making the thing, but it is also, in many respects, the thing itself. ” CSCI 3350 Lecture 9 - 9
Basic Design Patterns • Go. F describes 23 of the more commonly recurring patterns • The patterns are classified into three categories – Creational • Concerned with creating object • Object instantiation is deferred to a subclass – Structural • Concerned with the composition of classes or objects – Behavioral • How classes or object interact or distribute responsibility CSCI 3350 Lecture 9 - 10
Design Pattern Classification Purpose Creational Structural Behavioral Class Scope Factory Method Adapter(class) Interpreter Template Method Object Scope Abstract Factory Builder Prototype Singleton* Adapter* Bridge* Composite* Decorator Façade* Flyweight Proxy* Chain of Responsibility Command Iterator* Mediator Memento Observer* State Strategy Visitor CSCI 3350 Lecture 9 - 11
Standard Format • 13 section standard format – Pattern name and classification – Scope • Class – Deals with relationships between classes and their subclasses – Established through inheritance and are static – Fixed at compile time • Object – Deals with relationships between objects – Set or changed at runtime and are therefore dynamic CSCI 3350 Lecture 9 - 12
Standard Format (cont) – Category • Creational • Structural • Behavioral CSCI 3350 Lecture 9 - 13
Standard Format (continued) – Intent • What does the pattern do? • What problem is solved? – Also known as (optional) • Alternative names for the pattern – Motivation • A scenario that illustrates – The problem – How the pattern solves the problem CSCI 3350 Lecture 9 - 14
Standard Format (continued) – Applicability • To what situation can the pattern be applied? • A diagram of the classes involved – Uses OMT (Object Modeling Technique) not UML – Participants • Classes or objects involved – Collaborations • How the participants interact to carry out their responsibilities CSCI 3350 Lecture 9 - 15
Standard Format (continued) – Consequences • Trade-offs and results of using the pattern – Implementation • Pitfalls, hints, and techniques • Language-specific issues – Sample code • Code snippets to illustrate the pattern – Known uses • Examples of the pattern found in “real” systems CSCI 3350 Lecture 9 - 16
Standard Format (continued) – Related Patterns • Closely related patterns and differences among patterns • When studying a design pattern, I find it helpful to begin with – Intent – Applicability – Known uses – Motivation CSCI 3350 Lecture 9 - 17
Singleton (Object – Creational) • Intent – To ensure that a class has only 1 instance – Provide a single point of access to the instance • Applicability – Use the Singleton pattern when: • There must be exactly 1 instance of a class • That instance must be accessible to all from 1 point CSCI 3350 Lecture 9 - 18
Singleton (continued) • Known uses – Smalltalk only examples supplied by Gamma • Motivation – To avoid conflicts, it is critical that some classes have only 1 instance • A file system that is a class within an operating system CSCI 3350 Lecture 9 - 19
Class Exercise • Produce a list of classes that might be used to create a graph of the type shown – Your design should be highly modular • Each aspect of the graph must be modeled as a separate class – The actual “drawing” will be achieved by calling a low level class Plot, whose specification is supplied CSCI 3350 Lecture 9 - 20
Façade (Object-Structural) • Intent – Provide a unified interface to a set of interfaces – Define a higher-level interface that make the underlying functionality easier to use • Applicability – You need to provide a simple interface to a complex subsystem • Many users don’t need the flexibility of the subsystem • All that flexibility is difficult to manage • Provide a default view of the subsystem CSCI 3350 Lecture 9 - 21
Façade (continued) • Known uses – Compilers • Suppose you want to compile a single line • Don’t need the hassle of calling the scanner, parse tree generator, optimizer, code generator • Provide a simple interface with defaults • Motivation – Structure a system into a subsystem to manage complexity – Shield the client from complex interfaces CSCI 3350 Lecture 9 - 22
Observer (Object-Behavioral) • Intent – Define a one-to-many dependency between objects so all dependents of an object are notified when the primary object changes state • Applicability – When an object’s state changes, with this change causing changes in other objects, but the changing object doesn’t know how many dependant objects there are CSCI 3350 Lecture 9 - 23
Observer (continued) • Known uses – Model / View / Controller • Controller gets user inputs and sends message to model • Model performs its calculations • View displays the model’s state, when notified by subscribe/notify protocol • Motivation – Create a loose coupling between the objects involved CSCI 3350 Lecture 9 - 24
Proxy (Object-Structural) • Intent – To provide a placeholder for another object • Applicability – When you need a more versatile reference than a pointer – Client sends messages to the proxy – Proxy provides additional services • Security • Data validation – Can be used to delay server request until really needed CSCI 3350 Lecture 9 - 25
Proxy (continued) • Known uses – Instead of inserting a complex graphic into a document, insert a proxy – The proxy will load the real graphic when needed • Motivation – When you need to enhance a server – Postpone an activity until it is needed CSCI 3350 Lecture 9 - 26
Composite (Object-Structural) • Intent – Decompose objects into tree structures that represent a part/whole hierarchy • Applicability – When you need to represent whole/part relationship – When you want to treat objects and composition of objects equivalently CSCI 3350 Lecture 9 - 27
Composite (continued) • Known uses – File systems consist of • Directories • Files • But directories can hold files and other directories – Composite drawings • Motivation – Provide a uniform treatment of objects and composites of objects CSCI 3350 Lecture 9 - 28
Adapter (Object-Structural) • Intent – Convert the interface of a class into another interface more convenient for the client • Applicability – When you want to use an existing class, but the interface doesn’t match the one you need – Need to use several classes, each with different interfaces CSCI 3350 Lecture 9 - 29
Adapter (continued) • Known uses – Suppose you have a Windows application that uses the Windows file system – You need to run the application under UNIX – Write an adapter that accepts Windows file system calls and in turn makes the appropriate UNIX file system calls • Motivation – You have existing classes that provide the services you need, but not the interface CSCI 3350 Lecture 9 - 30
Bridge (Object-Structural) • Intent – Decouple an abstraction from its implementation to allow the two to vary independently • Want to provide the capability to run an application on multiple platforms • Applicability – When you want changes in the implementation to not affect their clients – When you want to hide the implementation from a client • C++ (unfortunately) refers to this as a proxy class CSCI 3350 Lecture 9 - 31
Bridge (continued) • Known uses – Isolate graphic clients from the hardware –UNIX – Isolate clients using windowing from platform specifics • Motivation – Isolate client abstractions from their implementation – Difference between Bridge and Adapter? • The Adapter is used for existing client code • The Bridge is an integral part of the initial design CSCI 3350 Lecture 9 - 32
Iterator (Object-Behavioral) • Intent – Provide a means of accessing the elements of an aggregate structure, sequentially, without exposing the underlying structure • Applicability – To provide access without knowledge of the internals of the structure – To support multiple access to the object – To provide a means of traversal that is uniform across all aggregate structures CSCI 3350 Lecture 9 - 33
Iterator (continued) • Known uses – Java • For each loop – Standard Template Library (C++) • Iterator class • Motivation – Isolate the structure from the means of traversing CSCI 3350 Lecture 9 - 34
Summary • This has been only a brief introduction to design patterns • Recall directive from the opening analogy – These designs contain patterns that must be • Understood • Memorized • Applied repeatedly • At best you have only begun step 1 CSCI 3350 Lecture 9 - 35
- Cs 3350
- Design patterns software engineering
- Real time software design in software engineering
- Software design fundamentals in software engineering
- Requirement analysis in software engineering notes
- Architectural pattern in software engineering
- Process patterns in software engineering
- Architectural patterns in software engineering
- 01:640:244 lecture notes - lecture 15: plat, idah, farad
- Computer based system engineering in software engineering
- Forward engineering and reverse engineering
- Software maintenance process models ppt
- Frank maurer
- Metrics computer science
- Software engineering crisis
- What is software measurement
- User interface in software engineering
- Nix gui
- Function oriented design
- Design concepts in software engineering
- Architectural design in software engineering
- Design principles in software engineering
- Detailed design in software engineering
- User interface software engineering
- Slidetodoc
- Pseudocode examples
- User interface design principles in software engineering
- Component-level design in software engineering
- User interface design process in software engineering
- Design concepts in software engineering
- Interface design in software engineering
- Design issues in software engineering
- Webapp design pyramid contains
- Design for change in software engineering
- Design metrics in software engineering
- User interface design process in software engineering