1 2 3 S Single Responsibility "There should never be more than one reason for a class to change." O Open-Closed "Software entities ... should be open for extension, but closed for modification." L Liskov Substitution "Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it." I Interface Segregation Clients should not be forced to depend upon interfaces that they do not use." D Dependency Inversion "Depend upon abstractions, [not] concretions."