- The single-responsibility principle – piece of software should have only one responsibility
- The open–closed principle – things should be open for extension but closed for modification
- The Liskov substitution principle – changing interface implementation should not brake software
- The interface segregation principle – it is better to have more specialized interfaces than single big one
- The dependency inversion principle – dependencies should be abstracted via interfaces
Further read: