Princípio Aberto-Fechado no Design de Software

O Princípio Aberto-Fechado (Open-Closed Principle) é um concieto fundamental em engenharia de software que afirma que entidades de software, como classes, módulos ou funções, devem estar abertas para extensão, mas fechadas para modificação. Isso significa que o comportamento do sistema pode ser estendido sem alterar o código existente, promovendo manutenibilidade e escalabilidade.

Para implementar esse princípio, é comum utilizar abstrações, como interfaces ou classes abstratas. Abstrações bem definidas fornecem uma base estável, permitindo que novas funcionalidades sejam adicinoadas através de novas implementações, sem impactar o código que já está em produção.

Considere um exemplo prático com um editor de texto que suporta temas visuais. Os temas podem incluir cores de fundo, fontes e estilos de interface. Os usuários podem alternar entre temas ou adicionar novos temas personalizados, sem necessidade de modificar o editor em si.

Para modelar isso, defina uma classe abstrata TemaAbstrato que declare métodos comuns, como aplicar(). Cada tema específico, como TemaEscuro ou TemaClaro, herda dessa classe e fornece sua implementação. O editor pode usar qualquer implementação de TemaAbstrato, permitindo extensão sem alteração.

Abaixo, um exemplo em Java que demonstra essa estrutura. A classe EditorTexto depende de uma abstração de tema, e novos temas podem ser adicionados criando-se novas subclasses.


package com.example.design.principles;

public class EditorTexto {
    private TemaAbstrato temaAtual;

    public void definirTema(TemaAbstrato tema) {
        this.temaAtual = tema;
    }

    public void exibirInterface() {
        temaAtual.aplicar();
    }
}

package com.example.design.principles;

public abstract class TemaAbstrato {
    public abstract void aplicar();
}

package com.example.design.principles;

public class TemaEscuro extends TemaAbstrato {
    @Override
    public void aplicar() {
        System.out.println("Aplicando tema escuro com cores escuras.");
    }
}

package com.example.design.principles;

public class TemaClaro extends TemaAbstrato {
    @Override
    public void aplicar() {
        System.out.println("Aplicando tema claro com cores claras.");
    }
}

package com.example.design.principles;

public class Demonstracao {
    public static void main(String[] args) {
        EditorTexto editor = new EditorTexto();
        TemaEscuro temaPadrao = new TemaEscuro();
        editor.definirTema(temaPadrao);
        editor.exibirInterface();
    }
}

Se surgir a necessidade de um novo tema, como TemaPersonalizado, basta criar uma nova classe que estenda TemaAbstrato e implementar o método aplicar(), sem alterar nenhuma das classes existentes, como EditorTexto ou os temas anteriores.

Tags: Princípio Aberto-Fechado java Abstração Padrões de Design Engenharia de Software

Publicado em 6-2 02:17 por Thomas