0

O que são os Princípios SOLID?

#Boas práticas
F
Fabrício Souza

Iniciemos com um pouco de história. Esses princípios foram criados pelo cientista da computação Robert J. Martin, também conhecido como Uncle (tio) Bob, em um artigo no ano 2000 chamado Design Principles and Design Patterns. Robert J. Martin era bastante atuante na comunidade de desenvolvimento de software, chegando a publicar obras como Clean Code e participou da publicação de Agile Manifest, uma lista de princípios de ajuda ao desenvolvimento ágil de software. Depois, Michael Feathers reuniu esses conceitos no conjunto chamado Princípios SOLID.

Todos esses conceitos estão conectados e buscam um objetivo comum: evitar a manifestação de sintomas de deterioramento de design como rigidez, fragilidade, imobilidade e viscosidade (Martin, 2000).


Princípio de Única Responsabilidade Requer que a classe faça somente uma coisa e logo terá somente uma única razão para mudanças. Essa proposta faz com que haja menos testes e torna o código mais organizado. Na prática, pode ser utilizado por um programador que deseja construir o código de um robô humanoide, e cada classe realizaria especificamente uma função do mesmo, como mover o braço direito.

Princípio de Aberto/Fechado: Estabelece que as classes devem estar abertas para extensão, mas fechadas para modificação. Aqui emprega-se o termo extensão para se referir ao ato de adicionar nova funcionalidade a uma classe e modificação para expressar-se em relação à alteração do código da classe (Erinç, 2020). Esse processo é feito com o uso de interfaces e classes abstratas. Vamos imaginar que uma desenvolvedora de jogos está trabalhando em um jogo de futebol, onde a partida só funciona com tempo de 90 minutos, sem prorrogação. Então, adicionar um método para inserção da prorrogação não deve ser feito na classe Partida, e sim numa nova classe na forma Prorrogacao extends Partida.

Princípio de Substituição de LiskovDiz que se uma classe B é uma subclasse de uma classe A, deve ser possível acessar qualquer método da classe A utilizando um objeto da classe B. Um exemplo tangível seria o Dilema Círculo/Elipse (Martin, 2000): Como o círculo é um caso especial de elipse em que os focos são iguais, um programador pode utilizar este conhecimento para criar um programa sobre formas geométricas, fazendo a classe Círculo herdar da classe Eclipse, porém um erro pode ocorrer com o usuário querendo criar um círculo com dois focos distintos como parâmetros.

Princípio da Segregação de InterfaceEstabelece que grandes interfaces devem ser separadas em partes menores, pois pequenas interfaces com propósitos específicos funcionam de maneira melhor do que uma interface que engloba várias funcionalidades. Um exemplo de aplicação seria um sistema de uma oficina mecânica de automóveis, onde uma filial em outra cidade cobraria um valor diferenciado devido a impostos locais, assim uma interface geral financeira seria a mãe das interfaces da matriz e da filial.

Princípio da Inversão de DependênciaInforma que a dependência deve ser sobre abstrações, e não sobre classes concretas. Dessa maneira, torna-se mais fácil realizar testes e diminui o grau de dependência entre as diferentes partes de um sistema. Um exemplo seria um algoritmo para descrever o comportamento de um tocador de discos de vinil. Você deveria implementar uma classe abstrata chamada Disco antes de associar a classe DarkSideOfTheMoon ao seu tocador.


Para mais informações sobre este tema, recomendo as leituras adicionais abaixo:


MARTIN, Robert J. Design Principles and Design Patterns. Disponível em: https://fi.ort.edu.uy/innovaportal/file/2032/1/design_principles.pdf

ERINÇ, Yiğit Kemal. The SOLID Principles of Object-Oriented Programming Explained in Plain English. Disponível em: https://www.freecodecamp.org/news/solid-principles-explained-in-plain-english/

MILLINGTON, Sam. A Solid Guide to SOLID Principles. Disponível em: https://www.baeldung.com/solid-principles

0
15

Comentários (0)

Desde criança sou apaixonado por tecnologia, o que me levou a estudar Análise e Desenvolvimento de Sistemas, onde atualmente curso o último período.

Brasil