SOLID, Shazam da Orientação a objetos? — Parte 2

Thiago Chagas
May 17, 2019 · 4 min read

E aí pessoal, tudo bem com vocês?

Voltamos para a segunda parte da série SOLID, “O Shazam da Orientação a objeto” para que tenhamos boas práticas de programação na construção dos nossos códigos.Caso não tenha visto o primeiro artigo dessa série, é só clicar aqui.

Hoje iremos falar sobre o Princípio Aberto/Fechado ou OCP (Open Closed Principle), mas do que este princípio fala??

O princípio Aberto/Fechado nos diz que as entidades de software (classes, módulos, funções etc) devem ser abertas para extensão, mas fechadas para modificação. O que realmente isso significa??

Quem nunca mexeu em um sistema que, necessitou efetuar alguma mudança e acabou com uma “Inception” de alterações ,cheias de dependências…Se mexeu aqui, tem que mexer ali, ali e ali também!!!

Sempre que isso acontece, o princípio Aberto/Fechado nos ensina que temos que efetuar uma refatoração para não causar este tipo de situação.
Quando você aplica o princípio Aberto/Fechado você assegura que as mudanças serão obtidas apenas com a inserção de um novo código e não pela alteração do código antigo.É apenas isso, e “Ao infinito e além!!!”

Em relação ao OCP devemos respeitar as duas principais características que são:

  • São abertas para extensões. Seu comportamento pode ser ampliado à medida que os requisitos das classes sejam alterados, fazendo com que o resultado satisfaça as mudanças requisitadas.
  • São fechadas para modificações. Ampliar o comportamento de uma classe NÃO pode resultar em mudanças do código da classe.

Mas calma aí!!!(conflict detected!!) A forma normal de se alterar o comportamento de uma classe não seria alterando o seu código???
Como é possível modificar uma classe sem alterar o seu código? como? como? COMO???

E a palavra do dia é…..

Abstração meus queridos Padawans!!

É possível criar abstrações fixas que representem grupos ilimitados de comportamentos. Uma classe pode manipular uma abstração e ser fechada para modificação,isso porque a classe depende de uma abstração fixa. Seu comportamento pode ser ampliado criando-se classes derivadas da abstração.Existem algumas estratégias eficazes para implementarmos, mostrarei aqui uma delas.

Quer entender isso na prática? Vem tranquilo , Não vem afobado não!!

As imagens acima mostram uma classe chamada CalculadorDePrecos e um enumerador chamado TipoDeProduto.A classe CalculadorDePrecos tem como responsabilidade calcular o preço de um produto de acordo com o seu tipo.O método CalcularPreco recebe três parâmetros: uma taxa, um desconto e o tipo do produto.No momento, temos apenas dois produtos (o produtos em promoção e o produto normal).

Agora imagine, se toda semana tivermos que criar um novo tipo de produto,
será que devemos acrescentar mais um “if” no método?? Seria bem mais simples né?! Porém, muito errado!

Você se lembra que falamos sobre abstrações? Pois então, iremos criar uma classe abstrata chamada CalculadorDePrecos, que contém as propriedades necessárias (taxa e desconto) além de um método abstrato chamado “CalcularPreco”.Quando um método de uma classe abstrata é declarado como abstract, qualquer classe que herde dela terá que implementar este método,e é isso que queremos.

Agora temos mais duas classes: ProdutoNormal e ProdutoEmPromocao que herdam da classe abstrata CalculadorDePrecos e implementam o método abstrato “CalcularPreco”.Ou seja, podemos modificar o comportamento do método herdado,sem alterar o estado inicial da classe e implementando o cálculo da forma que é necessária.

Mas,caso você não queira usar a abstração, porque de certa forma causaria um acoplamento, existe uma outra maneira que seria por
Extension Methods” uma feature do C# que foi criada na versão 3.0 e irei abordar em um futuro artigo.

Chegamos ao final de mais uma fase da nossa jornada SOLID. No próximo artigo aprenderemos sobre o Princípio da Substituição de Liskov.

Até lá.

May the force be with you!

Thiago Chagas

Written by

Microsoft Technology Associate (MTA), .Net Developer at Radix

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade