🚀Desvendando os Segredos do SOLID e Orientação a Objetos 🔓🚪💻🧩

Marcelo Fabiano N. de Oliveira
5 min readSep 5, 2024

--

O que significa SOLID

🎯Introdução

🔍 Você já ouviu falar sobre SOLID e orientação a objetos, mas ainda não tem certeza do que se trata? Não se preocupe, vamos explorar juntos esses conceitos fundamentais que impulsionam o design de software moderno! 💻

🚀 SOLID: Os Cinco Pilares do Design de Software

Na programação de computadores orientados a objetos o termo SOLID é um acrônimo para cinco postulados de design super importantes, destinados a facilitar a compreensão, o desenvolvimento e a manutenção de software, aliás, o calcanhar de Aquiles de todo projeto.

IMPORTANTE: Os postulados SOLID não devem ser confundidos com as orientações conhecidas como GRASP.

De fato, os postulados SOLID foram apresentados por Robert C. Martin em um artigo publicado no ano 2000 cujo título, em tradução livre, é “Postulados de Projeto e Padrões de Projeto”. O acrônimo SOLID propriamente dito teria sido cunhado mais tarde por Michael Feathers.

Mas, antes que possamos ver o que é o SOLID, precisamos revisar os conceitos de Orientação a Objetidos, também conhecido como OO. Isto será necessário, uma vez que toda a lógica e conhecimento relacionado ao conceito tem haver com OO. Então, vamos a eles.

🎯Princípios da Orientação a Objetos

Bem, a Programação Orientada a Objetos (POO) é um paradigma que se baseia no conceito de “objetos”, que representam instâncias concretas ou abstrações de conceitos do mundo real.

Vamos aplicar essa ideia em um exemplo para compreender melhor. Olha só essa imagem, que representa um sistema de identificação de carros:

Conceito de OO

Perceba que a classe “carro” representa um modelo abstrato do que um carro precisa ter: o tipo, cor, placa e número de portas.

A partir desse modelo (que é a classe), podemos criar representações mais específicas de carros, que são os objetos:

  • Tipo: Porsche
  • Cor: Branco
  • Placa: MHZ-4345
  • Número de portas: 4

ou

  • Tipo: Ferrari
  • Cor: Vermelho
  • Placa: JKL-0001
  • Número de portas: 4

Assim, se for necessário incluir mais informações sobre os carros — como, por exemplo, se tem ar condicionado ou não, podemos mudar a classe.

A partir disso, todos os objetos serão obrigatoriamente atualizados com um novo campo que deve ser preenchido.

Nesse sentido, o paradigma promove a reutilização de código e facilita a manutenção desde sistemas mais simples, tal qual o exemplo, até os mais complexos.

Vale dizer que a Programação Orientada a Objetos é utilizada em muitas linguagens de programação populares, como Java, Python, PHP, C++, C#, entre outras.

Para fundamentarmos bem a percepção dos conceitos, vamos passar por alguns breves fundamentos sobre OO.

🚀 Orientação a Objetos: Fundamentos Essenciais

🔸 Encapsulamento: Imagine uma classe ContaBancaria que possui um saldo privado. O encapsulamento permite controlar o acesso a esse saldo através de métodos como obterSaldo e depositar.

🔸 Herança: Considere uma hierarquia de classes onde Animal é a classe base e Cachorro e Gato são subclasses. As subclasses herdam comportamentos e características da classe base, como comer e dormir.

🔸 Polimorfismo: Suponha um método emitirSom que espera receber um objeto do tipo Animal. Dependendo do tipo específico de animal passado para esse método (por exemplo, Cachorro ou Gato), o comportamento do método pode variar.

🔸 Abstração: Imagine um sistema de reserva de passagens aéreas. Ao modelar as entidades desse sistema, você pode criar uma classe abstrata MeioDeTransporte que define métodos como reservarAssento e cancelarReserva. As classes concretas, como Aviao e Onibus, estendem essa abstração e implementam seus próprios comportamentos específicos.

Então, sem mais delongas, vamos aos postulados do SOLID!!!

🚀 SOLID

✔️ Princípio da Responsabilidade Única (SRP)

Imagine uma classe GestorDeArquivos que é responsável por gerenciar arquivos no sistema de arquivos e também por realizar operações de criptografia. Isso violaria o SRP, pois a classe teria mais de uma razão para mudar. Uma abordagem melhor seria dividir essas responsabilidades em duas classes distintas: GestorDeArquivos e Criptografador.

✔️ Princípio do Aberto/Fechado (OCP)

Considere uma aplicação de processamento de pagamentos que inicialmente só aceita pagamentos com cartão de crédito. Para torná-la aderente ao OCP, você poderia criar uma interface FormaDePagamento e implementar classes como PagamentoCartaoCredito e PagamentoPayPal. Dessa forma, você pode adicionar novas formas de pagamento sem alterar o código existente.

✔️ Princípio da Substituição de Liskov (LSP)

Suponha uma hierarquia de classes onde Quadrado é uma subclasse de Retângulo. Se um método espera receber um Retângulo, ele deve funcionar corretamente quando receber um Quadrado, sem precisar verificar o tipo de objeto. Se as propriedades de Quadrado (por exemplo, largura e altura) não podem ser livremente alteradas após a criação do objeto, então Quadrado não deve herdar de Retângulo.

✔️ Princípio da Segregação de Interfaces (ISP)

Considere uma interface ServicoDeEmail que possui métodos como enviarEmail e enviarSMS. Se uma classe só precisa da funcionalidade de enviar e-mails, não deve ser forçada a implementar o método enviarSMS. Nesse caso, é preferível dividir a interface em duas: ServicoDeEmail e ServicoDeSMS.

✔️ Princípio da Inversão de Dependência (DIP)

Suponha que uma classe Cliente dependa diretamente de uma implementação concreta de um serviço de notificação. Ao aplicar o DIP, você inverte essa dependência, fazendo com que Cliente dependa apenas de uma abstração (Notificador) e delegando a escolha da implementação concreta para um mecanismo de injeção de dependência.

🎯 Conclusão: Construindo Software Robusto e Flexível

Ao dominar os princípios SOLID e os fundamentos da orientação a objetos, você estará preparado para criar um software robusto, flexível e de fácil manutenção, lembrando sempre de buscar a coesão, baixa acoplamento e clareza em seu código.

Com esses conhecimentos, você estará pronto para enfrentar os desafios do desenvolvimento de software com confiança! 🌟

Gostou do artigo? Compartilhe sua opinião nos comentários e não se esqueça de seguir para mais conteúdo sobre desenvolvimento de software! 👍

#SOLID #OrientaçãoAObjetos #DesenvolvimentoDeSoftware #CodingTips

#programandocommarcelofabaino

#marcelofabiano

#iadescomplicada

Canal Youtube

marcelofabiano.com.br

Marcelo Fabiano N. de Oliveira

Profissional atuante do meio corporativo, desenvolvendo sistemas para o setor público. Gerente de Projetos, Leadership, Empreedendor, Mentor, Cientista de Dados, Escritor, Professor de Tecnologia, Criador de Conteúdo Digital, Empresário e Mestre de Engenharia de Sistemas e Computação pela COPPE/UFRJ, Campus Ilha do Fundão-RJ. Atua na linha de sistemas inteligentes e Mineração de Dados, com foco em reconhecimento de padrões.

Esse artigo foi interessante pra você? Deixe seus comentários sobre sua experiência com algumas dessa referências importantes! Até a próxima!

Marcelo Fabiano Nascimento de Oliveira

Veja meu conteúdo semanal de Tecnologia no meu canal do Youtube: @programandocommarcelofabiano

Acompanhe meus posts diários no Instagram:@marcelofabiano.esoft

“Mesmo que algo pareça difícil, nunca desista antes de tentar”.

--

--

Marcelo Fabiano N. de Oliveira
0 Followers

Gerente de Projetos, Leadership, Empreedendor, Mentor, Cientista de Dados, Escritor, Professor de Tecnologia, Criador de Conteúdo Digital e Msc. COPPE/UFRJ.