Open / Closed Principle
Os objetos devem estar abertos para extensão, mas fechados para modificação.
- Introdução:
- Em 1988, Bertrand Meyer definiu o Princípio Aberto/Fechado (OCP).
- A definição original de Meyer enfatiza que um módulo deve ser aberto para extensão, mas fechado para modificação.
- Essência do Princípio:
- A ideia central é que você deve ser capaz de estender o comportamento de um sistema sem ter que modificar esse sistema.
- Se todos os módulos de um sistema pudessem ser estendidos sem modificação, novos recursos poderiam ser adicionados apenas escrevendo novo código.
- Benefícios:
- O código antigo não precisaria ser recompilado ou redistribuído.
- Novos recursos seriam adicionados apenas com a implantação de novo código, talvez em um novo jar, dll ou gem.
- Os jars, dlls ou gems deveriam ser recursos isoláveis.
- É Absurdo?:
- À primeira vista, o OCP pode parecer sem sentido, pois muitos sistemas não permitem a adição de novos recursos de forma isolada.
- No entanto, ferramentas como Eclipse, IntelliJ, Visual Studio e outros provam que sistemas abertos/fechados são possíveis e poderosos através de plugins.
- Arquitetura de Plugin:
- Sistemas como Vim, Emacs, Minecraft e Eclipse são baseados em plugins.
- A ideia é que você possa conectar e desconectar recursos, interfaces e outros componentes.
- A arquitetura de plugin permite uma flexibilidade incrível, permitindo a adição ou remoção de interfaces, bancos de dados, frameworks e muito mais.
- Conclusão:
- Apesar das críticas, o OCP é fundamental e as arquiteturas de plugin mostram seu valor.
- Uma forte arquitetura de plugin é provavelmente o aspecto mais importante dos futuros sistemas de software.
Referências
- MARTIN, R. C. The Open Closed Principle. The Clean Code Blog https://blog.cleancoder.com/uncle-bob/2014/05/12/TheOpenClosedPrinciple.html (2014).
- Apostila Caelum: https://github.com/caelum/apostila-oo-avancado-em-java