← Назад к вопросам

Что значит I в SOLID?

1.0 Junior🔥 202 комментариев
#Python

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что значит 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 помогает создавать гибкие, тестируемые системы, где компоненты слабо связаны и легко переиспользуются.