principles:open-closed_principle
This is an old revision of the document!
Table of Contents
Open-Closed Principle
Variants and Alternative Names
Context
Principle Statement
Modules should be open for enhancement but closed for modification.
Description
Rationale
Strategies
Origin
Bertrand Meyer: Object-Oriented Software Construction, p. 57pp.
Evidence
Relations to Other Principles
Generalizations
- Encapsulate the Concept that Varies (ECV): The OCP demands encapsulating abstract concepts in base classes (or interfaces) in order to be able to enhance the module by subclassing which is possible without changing the previously written code. In this case several variations of a concept may exist in the code at the same time. There is always the abstract base class plus one or usually more concrete subclasses. So the OCP is about encapsulating abstract concepts that vary “in space”.
Specializations
Contrary Principles
- more Is More Complex (MIMC): The OCP demands introducing abstract base classes or interfaces.
- Keep It Simple Stupid (KISS): The OCP demands introducing abstract base classes or interfaces. This increases complexity.
- Model Principle (MP): OCP sometimes results in the introduction of artificial classes that do not correspond to a real-world concept.
Complementary Principles
- Dependency Inversion Principle (DIP): OCP results in the introduction of abstract classes or interfaces and descendant concrete classes. DIP now tells that other classes should only depend on the abstractions.
- Liskov Substitution Principle (LSP): OCP may results in the introduction of abstract classes or interfaces. Here it is important to get the abstraction right. Otherwise LSP may be violated.
Principle Collections
Example
Description Status
Further Reading
- Robert C. Martin: Agile Software Development, Principles, Patterns, and Practices, p. 99pp.
principles/open-closed_principle.1602499058.txt.gz · Last modified: 2020-10-12 12:37 by 159.69.186.191