Single responsibility principle: a class should have only a single responsibility.
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', without breaking the Contract. See also: Liskov's substitution principle, Design by Contract , and Design by Contract (in simpler words).
Interface segregation principle: 'many client-specific interfaces are better than one general-purpose interface.'
Dependency inversion principle: one should Depend upon Abstractions. Do not depend upon concretions.