Let Φ(x) be a property provable about objects x of type T. Then Φ(y) should be true for objects y of type S where S is a subtype of T. http://rubyblog.pro/2017/06/solid-liskov-substitution-principle
be replaceable with instances of their subtypes without altering the correctness of that program http://rubyblog.pro/2017/06/solid-liskov-substitution-principle
not depend on low-level modules. Both should depend on abstractions • Abstractions should not depend on details. Details should depend on abstractions. http://rubyblog.pro/2017/07/solid-dependency-inversion-principle
programming (XP) • XP co-founder Ron Jeffries has written: "Always implement things when you actually need them, never when you just foresee that you need them."
his work on the Eiffel programming language • Queries: Return a result and do not change the observable state of the system (are free of side effects) • Commands: Change the state of a system but do not return a value