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.