S.O.L.I.D
S.O.L.I.D são cinco princípios da programação orientada a objetos que facilitam no desenvolvimento de softwares, tornando-os fáceis de manter e estender. E podem ser aplicados a qualquer linguagem de POO.
S.O.L.I.D é um acrônimo criado por Michael Feathers, após observar que cinco princípios da orientação a objetos e design de código — Criados por Robert C. Martin(conhecido como Uncle Bob) em seu trabalho lançado no ano 2000.
Uncle Bob é o autor de dois livros muito conhecidos, Código limpo e Arquitetura limpa, e um dos participantes da “Aliança Agile”.
S.O.L.I.D: Os 5 princípios da POO
S — Single Responsiblity Principle (Princípio da responsabilidade única);
O — Open-Closed Principle (Princípio Aberto-Fechado);
L — Liskov Substitution Principle (Princípio da substituição de Liskov);
I — Interface Segregation Principle (Princípio da Segregação da Interface);
D — Dependency Inversion Principle (Princípio da inversão da dependência);
Esses princípios ajudam o programador a escrever códigos mais limpos, separando responsabilidades, diminuindo acoplamentos, facilitando na refatoração e estimulando o reaproveitamento do código.
1. SRP — Single Responsibility Principle:
Princípio da Responsabilidade Única — Uma classe deve 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, tendo uma única tarefa ou ação para executar.
2. OCP — Open-Closed Principle:
Princípio Aberto-Fechado — Objetos ou entidades devem estar abertos para extensão, mas fechados para modificação, ou seja, quando novos comportamentos e recursos precisam ser adicionados no software, devemos estender e não alterar o código fonte original.
3. LSP — Liskov Substitution Principle:
Princípio da substituição de Liskov — Uma classe derivada deve ser substituível por sua classe base.
Introduzido por Barbara Liskov em sua conferência “Data abstraction” em 1987, diz que para cada objeto o1 do tipo S há um objeto o2 do tipo T de forma que, para todos os programas P definidos em termos de T, o comportamento de P é inalterado quando o1 é substituído por o2 então S é um subtipo de T.
4. ISP — Interface Segregation Principle:
Princípio da Segregação da Interface — Uma classe não deve ser forçada a implementar interfaces e métodos que não irão utilizar.
Concordamos que é melhor criar interfaces mais específicas ao invés de termos uma única interface genérica.
5. DIP — Dependency Inversion Principle:
Princípio da Inversão de Dependência — Dependa de abstrações e não de implementações.
A ideia de Uncle Bob é:
1. Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender da abstração.
2. Abstrações não devem depender de detalhes. Detalhes devem depender de abstrações.
Obs.: Inversão de Dependência não é igual a Injeção de Dependência. A Inversão de Dependência é um princípio (Conceito) e a Injeção de Dependência é um padrão de projeto (Design Pattern).
Uma das ideias destes princípios, no final, é conseguimos manter nossa arquitetura de código limpo, podendo construir aplicações de “fácil” manutenção conforme o tempo.