Back to questions
Junior — Middle
70
Какими способами можно обеспечить соблюдение принципа открытости/закрытости в программных модулях?
Companies where asked
Платформа
Answer from AI
sobes.tech AI
Для соблюдения принципа открытости/закрытости (Open/Closed Principle) модули должны быть открыты для расширения, но закрыты для изменения. Способы достижения:
- Использование абстракций: Определять интерфейсы или абстрактные классы, а конкретные реализации создавать отдельно.
- Наследование и полиморфизм: Расширять поведение через подклассы, не меняя исходный код базового класса.
- Композиция и делегирование: Внедрять новые функциональности через компоненты, а не изменять существующие.
- Паттерны проектирования: Например, Стратегия, Декоратор, Фабрика позволяют добавлять новые поведения без изменения существующего кода.
Пример на C# с использованием интерфейса:
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) {
// Запись в файл
}
}
// Класс, использующий ILogger, не меняется при добавлении новых логгеров
public class Processor {
private readonly ILogger _logger;
public Processor(ILogger logger) {
_logger = logger;
}
public void Process() {
_logger.Log("Начало обработки");
// ...
}
}
Таким образом, чтобы добавить новый тип логгера, достаточно создать новый класс, реализующий ILogger, не меняя Processor.