-- A class should have one, and only one, reason to change
" Software entities should be open for extension but closed for modification. " -- It should be possible to extend the behavoir of a class without modifying it
" Child classes should never break the parent class’ type definitions. " -- Subclasses should be substitutable for their superclasses
-- Many small, client-specific interfaces are better than one general purpose interface
-- Depends on abstractions, not implementation