A set of principles promoted by Robert C. Martin.
A class should have one, and only one, reason to change.
Software entities should be open for extension, but closed for modification.Bertrand Meyer, Object-Oriented Software Construction
Clients should not be forced to depend on methods they do not use.
High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions.