SOLID é um acrônimo dos cinco primeiros princípios da programação orientada a objetos e design de código identificados por Robert C. Martin (ou Uncle Bob) por volta do ano 2000. O acrônimo SOLID foi introduzido por Michael Feathers, após observar que os cinco princípios poderiam se encaixar nesta palavra.
Lembrando também que além destes 5 princípios Robert C. Martin também mapeou 3 outros princípios sobre Coesão e mais outros 3 sobre Acoplamento, mas não serão abordados neste repositório.
Os padrões SOLID são considerados uma boa prática de programação orientada a objetos que visam diminuir o acoplamento entre classes e separar responsabilidades como forma de melhorar o código da aplicação desenvolvida. Neste sentido, este pequeno projeto apresentará os padrões que compõem o SOLID - ou seja - este pequeno repositório tem a intenção de demonstrar a teoria e a prática, bem como a violação de cada um dos princípios, como utilizar os mesmos para a solução e demonstrar como o SOLID pode lhe proporcionar um melhor design de código facilitando a manutenção e o teste.
Aqui estão uma breve descrição sobre eles:
Letra | Sigla | Nome | Definição |
---|---|---|---|
S | SRP | Single Responsibility Principle (Princípio da Responsabilidade Única) | Uma classe deve ter um, e somente um, motivo para ser alterada. |
O | OCP | Open / Closed Principle (Princípio do Aberto/Fechado) | Você deve ser capaz de estender um comportamento de uma classe, sem modificá-lo. |
L | LSP | Liskov Substitution Principle (Princípio da Substituição de Liskov) | As classes base devem ser substituíveis por suas classes derivadas. |
I | ISP | Interface Segregation Principle (Princípio da Segregação de Interfaces) | Muitas interfaces específicas são melhores do que uma interface única. |
D | DIP | Dependency Inversion Principle (Princípio da Inversão de Dependência) | Dependa de uma abstração e não de uma implementação. |
Os princípios SOLID devem ser aplicados para se obter os benefícios da orientação a objetos, tais como:
- Seja fácil de se manter, adaptar e se ajustar às constantes alterações exigidas pelos clientes;
- Seja fácil de entendimento e testar;
- Seja construído de forma a estar preparado para ser facilmente alterado com o menor esforço possível;
- Seja possível de ser reaproveitado;
- Que atenda realmente as necessidades dos clientes para o qual foi criado;
Utilizando os princípios SOLID é possível evitar problemas muito comuns como:
- Dificuldade na testabilidade / criação de testes de unidade;
- Código macarrônico, sem estrutura ou padrão;
- Dificuldades de isolar funcionalidades;
- Duplicação de código, uma alteração precisa ser feita em N pontos;
- Fragilidade, o código quebra facilmente em vários pontos após alguma mudança;
- Erros, Falhas e Defeitos.
- Falha: resultado ou manifestação de um ou mais defeitos (diferença indesejável entre o observado e o esperado (defeito encontrado));
- Erro (error): indica que certas funcionalidades do software não estão se comportando como especificado (engano cometido por serer humanos);
- Defeito (failure): é a manifestação do erro, seja através de uma tela com uma mensagem para usuário, etc. (resultado de um erro encontrado num código ou num documento).