Os Princípios do SOLID — OCP Princípio aberto-fechado
Links dos artigos detalhados:
- [S] Single-responsiblity principle — Princípio da responsabilidade única
- [O] Open-closed principle — Princípio aberto-fechado
- [L ] Liskov substitution principle — Princípio da substituição de Liskov
- [I] Interface segregation principle — Princípio da Segregação de interface
- [D ] Dependency Inversion Principle — Princípio da inversão de dependência
OCP — Princípio aberto-fechado
Esse principio diz que as classes “devem estar abertas para extensão, mas fechadas para modificação”, com isso passamos evitar possíveis erros a um aplicativo em ambiente produtivo, claro que se a modificação for para corrigir um erro existente no código esse principio não deveria ser aplicado.
Se você tem uma compreensão geral do POO, provavelmente já conhece o polimorfismo. Podemos garantir que nosso código esteja em conformidade com o princípio aberto / fechado, utilizando herança e / ou implementando interfaces que permitem que as classes se substituam polimorficamente uma pela outra.
Isso pode parecer confuso, então vamos fazer um exemplo que deixará muito claro o que quero dizer.
Na classe Post, precisamos fazer algo específico sempre que uma postagem começa com o caractere ‘#’.
No entanto, a implementação acima viola o princípio “OCP” da maneira como esse código difere o comportamento na letra inicial.
Se posteriormente quisermos incluir também menções iniciadas com ‘@’, teremos que modificar a classe com um ‘else if’ extra no método CreatePost.
Vamos tentar tornar esse código compatível com o princípio de OCP usando uma simplesmente herança.
Agora, usando a herança, agora é muito mais fácil criar um comportamento estendido para o objeto TagPost substituindo o método CreatePost().
A avaliação do primeiro caractere '#' agora será tratada em outro lugar (provavelmente em um nível mais alto) do nosso software, e o mais interessante é que, se queremos mudar a maneira como uma postMessage é avaliada, podemos alterar o código lá , sem afetar nenhuma dessas partes subjacentes.