Object-Oriented Analysis and Design (OOAD) is a process of identifying the needs of a software project and then laying out those specifications in a readable model. Design Patterns are an extension of these skills that create more maintainable and robust code. Using well-known, proven patterns that either stand-alone or build from one to the next, designers are able to further define the specifications of the project, optimizing quality and time spent on developing the project by programmers.
This advanced Object-Oriented course provides software architects and designers with skills to create high quality object-oriented designs exhibiting improved flexibility, reduced maintenance costs, and with increased understanding of the resulting code. Participants learn more than 30 object-oriented patterns, including the 23 micro-architectures in “Design Patterns: Elements of Reusable Object-Oriented Software”, by Gamma, Helm, Johnson, and Vlissides (the gang-of-four, or GoF book). Application examples and code snippets are provided to illustrate the patterns and the rationale for using that pattern in a given situation.
Objectives
Improve Software Architecture
Build Design Pattern Vocabulary
Be able to discuss trade-offs in applying various design patterns
Gain concepts and tools for writing better object-oriented code
Gain concepts for better documenting object-oriented code
Review relevant UML notation
Detailed Outline
- Course Introduction
- Course Objectives
- Overview
- Suggested References
- Design Pattern Overview
- Objectives in Software Design/Module Design
- Overview of Patterns
- Qualities of a Pattern
- Pattern Systems
- Heuristics vs. Patterns
- Principles of Object-Oriented Design
- Overview of Principles
- Single-Responsibility Principle (SRP)
- Open-Closed Principle (OCP)
- Tell vs. Ask
- Command/Query Separation (CQS)
- Composed Method
- Combined Method
- Liskov Substitution Principle (LSP)
- Dependency Inversion Principle (DIP)
- Interface Segregation Principle (ISP)
- Law of Demeter
- Principles of Package Architecture
- Package Cohesion Principles
- Package Coupling Principles
- Martin Package Metrics
- Basic Object-Oriented Design Patterns
- Delegation vs. Inheritance
- Interface
- Immutable
- Null Object
- Marker Interface
- General Responsibility Assignment Software Patterns
- Catalog of GoF Patterns
- Overview of GoF Patterns
- Introduction to Creation Patterns
- Factory Method
- Abstract Factory
- Builder
- Prototype
- Singleton
- Introduction to Structural Patterns
- Adapter
- Decorator
- Proxy
- Façade
- Composite
- Flyweight
- Bridge
- Introduction to Behavioral Patterns
- Chain of Responsibility
- Iterator
- Strategy
- Template Method
- Mediator
- Observer
- Memento
- Command
- State
- Visitor
- Interpreter
- Other Micro-Architecture and System Patterns
- Object Pool
- Worker Thread
- Dynamic Linkage
- Cache Management
- Type Object
- Extension Object
- Smart Pointer (C++)
- Session
- Transaction
- Concurrency Patterns
- Single Threaded Execution
- Guarded Suspension
- Balking
- Scheduler
- Read/Write Lock
- Producer/Consumer
- Two-Phase Termination
- Double-Checked Locking
- Patterns-Oriented Software Architecture
- Systems of Patterns
- Architectural Patterns
- Layers Architecture
- Pipes & Filters Architecture
- Blackboard Architecture
- Broker
- Model-View-Controller
- Presentation-Abstraction-Control
- Reflection
- Microkernel
- Catalog of J2EE Patterns
- J2EE Pattern Relationships
- Selected Process Patterns (from PLoP)
- The Selfish Class
- Patterns for Evolving Frameworks
- Patterns for Designing in Teams
- Patterns for System Testing
- Selected Anti-Patterns
- Stovepipe System
- Stovepipe Enterprise
- Reinvent the Wheel
- Golden Hammer
- Death by Planning
- Death March Projects
- Additional Management Anti-Patterns
- Patterns Summary