Stable Abstractions Principle (SAP) can be considered to be a corollary of the Stable Dependencies Principle (SDP), which said that packages should depend only on more stable packages. The stability metrics showed that packages were instable if its classes depended on classes in another package. Applying the class design principles, especially the Dependency Inversion Principle (DIP), flexibility is built into a design by introducing abstract classes. [Continue]
All the design principles focus on getting the dependencies right between classes and then between packages. This enables high reusability and easier maintenance of software applications. As we have seen in Common Closure Principle, packages can be closed only for certain changes, an absolute closure is difficult. [Continue]
Acyclic Dependencies Principle (ADP) is important from a deployment perspective. Along with packages being reusable and maintanable, the should also be deployable as well. Just as in the class design, the package design should have defined dependencies so that it is deployment-friendly. [Continue]
Common Closure Principle (CCP) is another package design principle which tries to look at maintainability rather than usability. The principle advises on which classes should be packaged together from a change and distribution point of view. It states: The classes in a package should be closed together against the same kind of changes. [Continue]
The Reuse/Release Equivalency Principle (REP) stresses on the importance of a package (a set of cohesive classes) to be used for releasing reusable software. It also highlights the importance of releasing software that can be tracked, so that the users get a guarantee of interface and behaviour from the author. However, it is very important to decide which classes should be bound together by a package. [Continue]
This is first of the design principles which looks at the macro-designing part of software engineering. Macro, because it does not suggest technical solutions, but gives guidelines for practical granularity required for reusing software. Reuse/Release Equivalency Principle (REP) states: The granule of reuse is the granule of release. [Continue]
All the basic design principles converge on the use of abstraction for incorporating flexibility using loose coupling behaviour. Interface Segregation Principle (ISP) is a guideline for designing different interfaces. Interfaces are useful in designing real world systems, where every object can have multiple aspects. [Continue]
The Open-Closed Principle is the heart of OO design. It advocates for abstraction to provide extensibility to any object, which is typically implemented using inheritance. Inheritance itself can lead to many possibilities, some of which can lead to wrong design. [Continue]
This principle states the most fundamental rule to make your software flexible. All other OOP principles, methodologies and conventions revolve around this principle. Open-Closed Principle (OCP) states: Software entities should be open for extension, but closed for modification. [Continue]
This is another one in the series of OOP design principles after Law Of Demeter. A software design is made of objects and communication between them. Eventually it becomes a mesh of interdependencies between these objects, which combined with business constraints like money or time, drives bad software design. [Continue]