Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Что значит I в SOLID: Interface Segregation Principle
Interface Segregation Principle (ISP) — принцип разделения интерфейса. Суть: клиенты не должны зависеть от интерфейсов, которые они не используют. Лучше иметь много узких интерфейсов, чем один большой.
Проблема: толстый интерфейс
Когда в одном интерфейсе множество методов, классы вынуждены реализовывать методы, которые им не нужны. Это усложняет код, затрудняет тестирование и делает систему менее гибкой.
Решение: узкие интерфейсы
Вместо одного большого интерфейса DataProcessor с методами read(), write(), validate(), visualize(), train_model() — разделяем на несколько:
- Reader (только read)
- Writer (только write)
- Validator (только validate)
- Visualizer (только visualize)
- ModelTrainer (только train)
Теперь каждый класс реализует только нужные ему интерфейсы. CSVReader реализует Reader, не беспокоясь о других методах.
Пример на Python
from abc import ABC, abstractmethod
# Узкие интерфейсы
class Reader(ABC):
@abstractmethod
def read(self): pass
class Writer(ABC):
@abstractmethod
def write(self) -> None: pass
class Validator(ABC):
@abstractmethod
def validate(self) -> bool: pass
# Реализация
class CSVReader(Reader):
def read(self): return {}
class DataValidator(Validator):
def validate(self) -> bool: return True
# Pipeline использует только нужные интерфейсы
class Pipeline:
def __init__(self, reader: Reader, validator: Validator):
self.reader = reader
self.validator = validator
def run(self):
data = self.reader.read()
self.validator.validate()
Преимущества
- Минимальные зависимости
- Легче тестировать (можно подменить отдельные компоненты)
- Код переиспользуется
- Проще добавлять новые функции
В контексте ML
Отделяем интерфейсы Trainable (fit), Predictor (predict), Evaluator (evaluate), Serializable (save/load). Класс может реализовать только нужные интерфейсы.
Итог
ISP помогает создавать гибкие, тестируемые системы, где компоненты слабо связаны и легко переиспользуются.