On this page
SOLID A class should have one and only one reason to change, meaning that a class should have only one job Objects or entities should be open for extension but closed for modification Let Q(x)
be a property provable about objects x of type TThen Q(y)
should be true for objects y of type S where S is a subtype of T in another wordsobjects of a superclass should be replaceable with objects of its subclasses without breaking the application A client should never be forced to implement an interface that it does not use, or clients should not be forced to depend on methods that they do not use High-level modules should not depend on low-level modulesBoth should depend on abstractions Abstractions should not depend on details Details should depend on abstractions