Single responsibility principle. – “A class should only have a single responsibility, that is, only changes to one part of the software’s specification should be able to affect the specification of the class.”
Open–closed principle – “Software entities … should be open for extension, but closed for modification.”
Liskov substitution principle – “Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.” See also “design by contract”.
Interface segregation principle – “Many client-specific interfaces are better than one general-purpose interface.”
Dependency inversion principle – “One should ‘depend upon abstractions, [not] concretions.’ “