Sobes.tech
Junior — Middle

De que formas é possível garantir o cumprimento do princípio de abertura/fecho nos módulos de software?

sobes.tech IA

Resposta da IA

Para cumprir o princípio de aberto/fechado, os módulos devem estar abertos à extensão, mas fechados à modificação. Formas de alcançar isso:

  • Uso de abstrações: Definir interfaces ou classes abstratas, e criar implementações concretas separadamente.
  • Herança e polimorfismo: Expandir o comportamento através de subclasses, sem alterar o código fonte da classe base.
  • Composição e delegação: Introduzir novas funcionalidades através de componentes, em vez de modificar os existentes.
  • Padrões de projeto: Por exemplo, Estratégia, Decorador, Fábrica permitem adicionar novos comportamentos sem alterar o código existente.

Exemplo em C# usando uma interface:

public interface ILogger {
    void Log(string message);
}

public class ConsoleLogger : ILogger {
    public void Log(string message) {
        Console.WriteLine(message);
    }
}

public class FileLogger : ILogger {
    public void Log(string message) {
        // Escrita em arquivo
    }
}

// A classe que usa ILogger não muda ao adicionar novos loggers
public class Processor {
    private readonly ILogger _logger;
    public Processor(ILogger logger) {
        _logger = logger;
    }
    public void Process() {
        _logger.Log("Início do processamento");
        // ...
    }
}

Dessa forma, para adicionar um novo tipo de logger, basta criar uma nova classe que implemente ILogger, sem modificar Processor.