Uma classe deve ter um, e somente um, motivo para mudar.
Esse princípio declara que uma classe deve ser especializada em um único assunto e possuir apenas uma responsabilidade dentro do software, ou seja, a classe deve ter uma única tarefa ou ação para executar.
Objetos ou entidades devem estar abertos para extensão, mas fechados para modificação.
Esse princípio declara que quando novos comportamentos e recursos precisam ser adicionados no software, devemos estender e não alterar o código fonte original.
Uma classe derivada deve ser substituível por sua classe base.
Esse princípio declara que uma classe herdada pode ser substituída por sua classe mãe sem que o comportamento do sistema seja alterado.
Uma classe não deve ser forçada a implementar interfaces e métodos que não irão utilizar.
Esse princípio declara que é melhor criar interfaces mais específicas ao invés de termos uma única interface genérica.
Dependa de abstrações e não de implementações.
Esse princípio dis que uma classe deve depender de interfaces e não de suas implementações ou classes concretas.