Estes 5 princípios passaram a ser chamados de SOLID após a popularização dos mesmos por meio do Uncle Bob (os 5 princípios fazem parte do famoso livro “Agile Principles, Patterns and Practices”). Mas afinal, por que CINCO princípios? Porque SOLID é um acrônimo – americanos adoram acrônimos – onde cada letra corresponde a um princípio:
[S]ingle Responsability Principle
[O]pen/Closed Principle
[L]iskov Substitution Principle
[I]nterface Segregation Principle
[D]ependency Inversion Principle
Ou seja:
1 – SRP – (Single Responsability Principle) – Princípio da Responsabilidade Única
2 – OCP – (Open/Closed Principle) – Princípio Aberto Fechado
3 – LSP – (Liskov Substitution Principle) – Princípio da Substituição de Liskov
4 – ISP – (Interface Segregation Principle) – Princípio da Segregação de Interface
5 – DIP – (Dependency Inversion Principle) – Princípio da Inversão de Dependência
Os princípios SOLID reúnem cinco boas práticas para projetos Orientados a Objetos-OO:
Single Responsibility Principle (SRP), ou, Princípio da Responsabilidade Única. Esse princípio diz que as classes devem ser coesas, ou seja, terem uma única responsabilidade. Classes assim tendem a ser mais reutilizáveis, mais simples, e propagam menos mudanças para o resto do sistema.
Open Closed Principle (OCP), ou Princípio do Aberto Fechado. Diz que as classes devem poder ter seu comportamento facilmente estendidas quando necessário, por meio de herança, interface e composição. Ao mesmo tempo, não deve ser necessário abrir a própria classe para realizar pequenas mudanças. No fim, o princípio diz que devemos ter boas abstrações espalhadas pelo sistema.
Liskov Substitution Principle (LSP), ou Príncipio da Substituição de Liskov. Esse princípio diz que precisamos ter cuidado para usar herança. Herança é um mecanismo poderoso, mas deve ser usado com parcimônia, evitando os casos de Gato-estende-Cachorro, apenas por possuírem algo em comum.
Interface Segregation Principle (ISP), ou Princípio da Segregação de Interfaces. Esse princípio diz que nossos módulos devem ser enxutos, ou seja, devem ter poucos comportamentos. Interfaces que tem muitos comportamentos geralmente acabam se espalhando por todo o sistema, dificultando manutenção.
Dependency Inversion Principle (DIP), ou Princípio da Inversão de Dependências. Esse princípio diz que devemos sempre depender de abstrações, afinal abstrações mudam menos e facilitam a mudança de comportamento e as futuras evoluções do código.