Veja nesse artigo um exemplo prático do principio OCP — Princípio Aberto-Fechado
Introdução
Dando continuidade a minha série de artigos sobre os princípios do SOLID com TypeScript e aproveitando a liberação do episódio 2 do nosso podcast: DevShow #22 SOLID OCP. Hoje irei abordar o segundo principio do SOLID, OCP.
OCP — Princípio Aberto-Fechado
O OCP diz que as entidades de software (classes, módulos, funções… ) devem ser abertas para ampliação, mas fechadas para modificação.
De forma mais detalhada, diz que podemos estender o comportamento de uma classe por meio de herança, interface e composição, mas não podemos permitir a abertura dessa classe para fazer modificações.
Em uma pesquisa rápida pela internet eu achei uma imagem que descreve bem esse principio:
Violação: Note que na imagem com fundo rosa nós temos um robo que começa com uma faca falando que pode cortar e depois de uma nova demanda esse mesmo robo troca a faca por um rolo de pintar.
Essa imagem lembra algo? rs
É muito comum no desenvolvimento de software situações como essa onde temos uma classe que tem uma determinada funcionalidade e ao decorrer da evolução do sistema ela tenha que sofrer algumas mudanças. É nesse momento que devemos lembrar desse principio (OCP).
Na segunda imagem nós temos um robo que começa com uma faca falando que pode cortar e depois de uma nova demanda aparece com um rolo de pintar na outra mão.
Em uma breve analise, note que ele não alterou (perdeu) como na primeira imagem a funcionalidade de cortar, com a evolução ele acabou ganhando uma nova funcionalidade, a de pintar.
Esse seria o comportamento perfeito para que consigamos atender a nova demanda e ainda garantir que o que esta no publicado não seja alterado.
Bom, mas como ficaria isso no código?
Para que esse principio fique mais claro, vamos criar um exemplo prático utilizando o TypeScript.