CSE687 - Object Oriented Design
Lecture #11 - Open/Closed Principle
Revised: 15 Feb 2009
Web Resources:
Stroustrup's Home Page,
Assoc. of C/C++ Users,
C++ at Microsoft,
Code Project,
Sells Brothers,
Guru of the Week,
C/C++ User's Journal,
devCentral,
Dr. Dobb's Journal,
Boost Library,
techNetCast
Content:
This lecture presents the Open/Closed Principle, an ideal model for software development. We discuss how the C++
language can be used to build software following the principle.
-
Syllabus
Describes topics to be covered,
reading material for you to digest before coming to class, and due dates
for the assigned projects.
-
Project #2
Graph data type and graph algorithms.
-
Project #2 Help
-
The Command Pattern is an interesting application of inheritance:
Simple Callbacks - Function Pointers
Callbacks - Command Pattern
Callbacks - Commands to either global and member functions
-
Heterogeneous List Structure
Unusual use of Liskov Substitution
-
Open/Closed Principle
Another fundamental OOD principle that argues for using inheritance "hooks" and template-based classes.
-
Extensible Parsing, from Project #1
This demonstrates the Open/Closed Principle by binding rules and actions to interfaces, used by the parser.
-
The Adapter Pattern
This pattern, one of about 30 we discuss in CSE776 - Design Patterns, illustrates one way to
adhere to the Open/Closed Principle.
-
Satisfying the Open/Closed Principle
Protocols, Hooks, Policies, Inheriting Concrete Classes.
-
Run-Time Type Indentification Presentation
RTTI is, perhaps, the antithesis of the Open/Closed Principle. Paradoxically, I used it building the trace class.
-
Programming to Interfaces Presentation
Discusses interfaces, layers, factories, and breaking design, compile, and static link dependencies.
-
Object Factory Project
This project implements a factory that allows clients to use derived classes but only bind to their
abstractions. It also demonstrates the use of products with multiple interfaces.
-
Programming to Interface Project
This project implements a template-based "pluggable object factory" and shows how to access
members of a hierarchy through an interface.