Precisamos seguir o princípio de design ao desenvolver software para reduzir o TCO (Custo Total de Propriedade), diminuir o custo de manutenção e para um design robusto.
Definição:
O próprio nome soa contraditório - ABERTO e FECHADO, mas por definição,
Um módulo deve ser ABERTO para extensão mas FECHADO para modificação
. O Princípio Aberto-Fechado (OCP) é um dos princípios de design mais importantes. O OCP originou-se do trabalho de Bertrand Meyer.
Em palavras simples: podemos adicionar novas características ao módulo sem alterar o código existente (FECHADO) mas adicionando novo código (ABERTO). Seguindo este princípio, podemos garantir que ao alterar o código no método não iremos quebrar a funcionalidade existente. Vamos tentar ver isso usando o exemplo.
Exemplo:
Primeiro veremos o código que não segue este princípio. Consideremos que temos uma classe que imprime informações de formas diferentes dependendo da entrada.
Trecho de código que viola este princípio.
O problema com este código é que cada vez que precisamos adicionar um novo tipo de Forma, precisamos alterar o código nos métodos CREATE_SHAPE, WRITE_SHAPE, o que é uma clara violação do OCP. De acordo com o OCP, só deveríamos alterar o método para adicionar nova funcionalidade. Aqui não estamos adicionando uma nova funcionalidade. A criação do objeto da Forma e escrever as informações da Forma de maneira diferente não é uma nova funcionalidade. Portanto, devemos redesenhar nossa classe e métodos para seguir o Princípio Aberto-Fechado.
Podemos usar o polimorfismo dinâmico para alcançar um design Aberto-Fechado. Consulte o UML para o novo design.
Agora criaríamos uma interface LIF_SHAPE que usaremos para criar diferentes formas como círculo usando LCL_CIRCLE, quadrado usando LCL_SQUARE e assim por diante.