Open-closed principle Princípio aberto-fechadoOpen-closed principle Princípio aberto-fechado

O desenvolvimento de software moderno requer não apenas habilidades técnicas, mas também uma compreensão sólida dos princípios de design que sustentam a criação de sistemas robustos e flexíveis. Entre esses princípios, o Princípio do Aberto/Fechado (OCP), proposto por Bertrand Meyer, destaca-se como uma diretriz crucial para escrever código modular e extensível.

O que é o Princípio do Aberto/Fechado?

O Princípio do Aberto/Fechado (OCP) é um dos cinco princípios do SOLID, um acrônimo para cinco princípios de design de código orientado a objetos. O OCP postula que as classes devem ser abertas para extensão, mas fechadas para modificação. Em outras palavras, o comportamento de uma classe deve ser estendido sem alterar seu código-fonte.

Quando Usar o Princípio do Aberto/Fechado?

O OCP é especialmente útil em situações onde a base de código é suscetível a mudanças frequentes, mas é importante manter a estabilidade das partes existentes do sistema. Aqui estão algumas situações em que o OCP pode ser aplicado:

  1. Adição de Funcionalidades: Quando novos requisitos exigem a adição de funcionalidades a um sistema existente, o OCP permite estender o comportamento sem modificar o código já testado e funcional.
  2. Manutenção de Bibliotecas/Frameworks: Em projetos de código aberto ou na criação de bibliotecas e frameworks, seguir o OCP facilita a extensão por parte dos usuários sem comprometer a integridade do código base.
  3. Implementação de Padrões de Projeto: Muitos padrões de projeto, como o Strategy e o Decorator, são baseados no princípio do OCP para permitir flexibilidade e reutilização de código.

Exemplos em Java

Calculadora Simples

Para ilustrar o Princípio do Aberto/Fechado em ação, considere o seguinte exemplo em Java:

Suponha que temos uma classe Calculadora, que inicialmente possui um método calcular, que apenas adiciona dois números:

public class Calculadora {
    public int calcular(int a, int b) {
        return a + b;
    }
}

 

Agora, imagine que precisamos adicionar uma nova funcionalidade à nossa calculadora, para permitir a multiplicação. Em vez de modificar a classe Calculadora original, podemos estender seu comportamento criando uma nova classe CalculadoraMultiplicacao:

public class CalculadoraMultiplicacao extends Calculadora {
    @Override
    public int calcular(int a, int b) {
        return a * b;
    }
}

Dessa forma, estamos seguindo o princípio do OCP, pois estendemos o comportamento da classe Calculadora sem modificar seu código-fonte original.

Sistema de Processamento de Pedidos

Considere um sistema de processamento de pedidos online que permite diferentes métodos de envio, como entrega padrão, entrega expressa e entrega internacional. Podemos aplicar o OCP da seguinte maneira:

// Interface para os métodos de envio
interface ShippingMethod {
    void ship();
}

// Implementação para entrega padrão
class StandardShipping implements ShippingMethod {
    public void ship() {
        // Lógica para entrega padrão
    }
}

// Implementação para entrega expressa
class ExpressShipping implements ShippingMethod {
    public void ship() {
        // Lógica para entrega expressa
    }
}

// Implementação para entrega internacional
class InternationalShipping implements ShippingMethod {
    public void ship() {
        // Lógica para entrega internacional
    }
}

 

Neste exemplo, novos métodos de envio podem ser facilmente adicionados criando novas classes que implementam a interface ShippingMethod, seguindo o princípio do OCP.

Recomendação de Leitura

Para aprofundar seu entendimento sobre o Princípio do Aberto/Fechado e outros princípios de design sólido, recomendo o livro “Clean Code: A Handbook of Agile Software Craftsmanship” de Robert C. Martin. Este livro oferece insights valiosos sobre como escrever código limpo e de alta qualidade, aplicando princípios de design sólido, incluindo o OCP.

 

Código limpo:
habilidades práticas do Agile software

 

Em resumo, o Princípio do Aberto/Fechado é uma ferramenta fundamental no arsenal de qualquer desenvolvedor de software. Ao aplicar este princípio, você pode escrever código que seja fácil de estender, manter e reutilizar, promovendo assim a robustez e flexibilidade do seu sistema.

 

Veja Também

A Lista Definitiva de Leitura para Desenvolvedores

Princípios SOLID

Leave a Reply

Your email address will not be published. Required fields are marked *