Escolar Documentos
Profissional Documentos
Cultura Documentos
S.O.L.I.D.
São cinco princı́pios com base na Orientação a Objetos que facilitam no desenvolvimento de
softwares e o design de software, torna o projeto mais fácil de manter e estender. A metodologia
foi formulada para proporcionar o desenvolvimento de software mais compreensı́vel, flexı́vel e
manutenı́vel, especialmente em projetos que consideram como base a programação orientada a
objetos (POO).
Os princı́pios foram idealizados por Robert C. Martin, também conhecido como ”Uncle Bob”,
um renomado engenheiro de software e autor do artigo The Principles of OOD.
Já o termo foi cunhado por Michael Feathers como um acrônimo mnemônico para facilitar a
recordação dos cinco princı́pios que foram elaborados como um guia para que os desenvolvedores
evitem certas armadilhas ao projetar um software, tais como rigidez, fragilidade e imobilidade.
Ao longo dos anos, a adoção dos princı́pios SOLID tem sido amplamente recomendada na comunidade
de desenvolvimento de software como um padrão para a construção de sistemas orientados a objetos
coesos e desacoplados. Os princı́pios SOLID têm suas raı́zes no livro ”Design Patterns: Elements of
Reusable Object-Oriented Software”revolucionário de 1994, e foram explicitamente formulados por
Martin em seu trabalho seminais de 2000. Desde então, eles se tornaram parte integrante do ensino
de POO e práticas recomendadas dentro da indústria de software.
SRP, do inglês Single Responsibility Principle é um dos cinco princı́pios básicos da programação
orientada a objetos e design de software propostos pelo SOLID. Sugere que uma classe deve ter
apenas uma razão para mudar:
Foco em uma tarefa ou responsabilidade: Cada classe ou módulo deve ser responsável
por uma parte claramente definida da funcionalidade fornecida pelo software. Isso significa
que a classe deve executar uma única tarefa ou ter uma única preocupação.
Redução de complexidade: Ao limitar uma classe a uma única responsabilidade, o design
do software é simplificado, tornando-o mais fácil de entender, manter e modificar. Isso também
facilita a identificação de componentes que podem ser reutilizados em diferentes partes do
sistema.
Facilidade de manutenção e atualização: Quando uma classe tem apenas uma responsa-
bilidade, há menos possibilidades de erros durante a manutenção ou atualizações. Alterações
em uma parte especı́fica do código afetarão apenas aquelas classes com a responsabilidade
relacionada, diminuindo o risco de efeitos colaterais indesejáveis em outras partes do código.
Testabilidade: Com o SRP, as unidades de software se tornam mais testáveis. Uma classe
com uma única responsabilidade terá menos cenários de teste necessários, facilitando a criação
de testes automatizados que são mais fáceis de escrever e entender. Isso melhora a qualidade
geral do código e a confiança de que as mudanças não introduzirão novos bugs.
Este princı́pio foca na granularidade das classes e suas responsabilidades, o objetivo final é promover
um design de sistema mais limpo, com alta coesão e baixo acoplamento.
Princı́pio Aberto/Fechado
OCP, do inglês Open/Closed Principle estabelece que as entidades de software (classes, módulos,
funções) devem estar abertas para extensão, mas fechadas para modificação:
LSP, do inglês Liskov Substitution Principle formulado por Barbara Liskov em 1987, o princı́pio
aborda como os objetos devem ser substituı́veis por instâncias de seus subtipos sem afetar a exatidão
do programa:
O design do software torna-se mais consistente e previsı́vel, permitindo que sistemas complexos
sejam mais facilmente compreendidos e mantidos. Ajuda a garantir que o código seja mais modular
e facilita a reutilização de componentes.
Criação de sistemas mais escaláveis e robustos, onde as alterações em uma parte especı́fica do código
têm menos probabilidade de afetar componentes que não são diretamente relacionados, melhorando
a manutenibilidade do sistema como um todo.
DIP, do inglês Dependency Inversion Principle visa reduzir o acoplamento entre módulos de alto
nı́vel e de baixo nı́vel, criando um software mais flexı́vel e sustentável: