Software Design Patterns: Improving Object-Oriented Design Creativity
Explore software design patterns and their significance in improving object-oriented design creativity. Learn key benefits, examples of popular patterns, and case studies. Enhance your understanding of architectural and analysis patterns. Discover the relationship between patterns and programming languages.
Software Design Patterns: Improving Object-Oriented Design Creativity
E N D
Presentation Transcript
Design Patterns Trends and Case Study John Hurst June 2005
Overview • Software Patterns • Design Patterns • Topics • Case Study / Examples
Introduction • Christopher Alexander • A Pattern Language: Towns, Buildings, Construction (1977) • A Timeless Way of Building (1979) • “Gang of Four” (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides) • Design Patterns (1995) • Buschmann et al • Pattern Oriented Software Construction (1996)
Key Idea • A Software Pattern is: • A solution • To a problem • In a context • With consequences • A Software Pattern has a name and a vocabulary.
Intent Also Known As Motivation Applicability Structure Participants Collaborations Consequences Implementation Known Uses Related Patterns Pattern Languages
OO Design Principles • Code to interfaces • Prefer composition to inheritance • Encapsulate what varies
Benefits • Improves thinking about OO design • New designs • Existing designs • Helps us realise the benefits of OO • Reuse of solutions to common problems • Catalogs • Communication tool • Common vocabulary
Example: Iterator • Intent: • Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation
Example: Decorator • Intent: • Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
Application of Decorator • Apache Commons DBCP (Database Connection Pooling)
Architectural Patterns Analysis Patterns Design Patterns Patterns Landscape
“Platform Patterns” • J2EE Core Patterns • MS Building Blocks • Contrast with PEAA
Antipatterns • Examples • Big Ball Of Mud • Copy and Paste Programming • Magic Container • Tower of Voodoo
Broken Patterns • Double checked locking • “Deprecated” Patterns: • Factory Method (due to confusion over what it means) • Bridge • Flyweight • Interpreter
Specialised Fields • Real-time • Concurrency • Enterprise • Messaging • Analysis
Refactoring to Patterns • Remove duplicate code • Simplify logic • Communicate intention • Increase flexibility
Patterns with Programming Languages • Strategy • C++ templates: static type checking • Java interfaces and objects: runtime configuration • Ruby/Smalltalk blocks: idiomatic usage
Case Study: HHRDM • Design Patterns • Architectural Patterns • Analysis Patterns
Design Patterns • Abstract Factory • Template Method • Strategy • Façade • Proxy
Architectural Patterns • Layering • Data Access Patterns • Domain Model • Service Façade
Analysis Patterns • Temporal Patterns • Effectivity • Snapshot • Temporal Object • Temporal Property • Audit Trail • Bitemporal Model
References • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Design Patterns: Elements of Reusable Object-Oriented Software – Addison-Wesley 1995 • Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal Pattern-Oriented Software Architecture Wiley 1996 • Martin Fowler Patterns of Enterprise Application Architecture – Addison-Wesley 2002 • Martin Fowler Refactoring – Addison-Wesley 2000 • Martin Fowler Analysis Patterns – Addison Wesley 1996 • Gregor Hohpe, Bobby Woolfe Patterns of Enterprise Application Integration – Addison-Wesley 2003 • Joshua Kerievsky Refactoring to Patterns – Addison-Wesley 2004 • Deepak Alur, John Crupi, Dan Malks Core J2EE Patterns (2nd Ed) – Addison-Wesley 2003
Web Sites • Martin Fowler website http://www.martinfowler.com • Portland Pattern Repository http://c2.com/cgi/wiki • TheServerSide http://www.theserverside.com • Microsoft Patterns and Practices http://msdn.microsoft.com/architecture/patterns/
Relationships and Similarities Many patterns look similar structurally, but have different intent Proxy Decorator
The Agile Manifesto • Preferences: • Inidividuals and interactions over processes and tools • Working software over comprehensive documentation • Customer collaboration over contract negotiation • Responding to change over following a plan