Почему интерфейсы не избыточны? В учебниках по ООП часто пишут, что программировать нужно не на уровне реализации, а на уровне интерфейсов. Я не понимаю причину этого, объясните пожалуйста.
Для примера приведу классический паттерн Observer. Он имеет абстрактные классы Observer и Observable с интерфейсами, которые обязаны реализовать наследники:#!/usr/bin/env python3
from abc import ABCMeta, abstractmethod
class Observer(metaclass=ABCMeta):
@abstractmethod
def update(self, message):
pass
class Observable(metaclass=ABCMeta):
@abstractmethod
def register(self, observer):
pass
@abstractmethod
def notify_observers(self, message):
pass
class Newspaper(Observable):
def __init__(self):
self.observers = []
def register(self, observer):
self.observers.append(observer)
def notify_observers(self, message):
for observer in self.observers:
observer.update(message)
def add_news(self, news):
self.notify_observers(news)
class Citizen(Observer):
def __init__(self, name):
self.name = name
def update(self, message):
print('{} получил: {}'.format(self.name, message))
newspaper = Newspaper()
newspaper.register(Citizen('Иван'))
newspaper.register(Citizen('Василий'))
newspaper.add_news('Сообщение')
Однако, код станет заметно проще, если отказаться от использования абстрактных классов(а значит и интерфейсов). Подскажите пожалуйста возможные сценарии развития представленного кода, в которых будет ощущаться неудобство от отсутствия метаклассов Observer и Observable

21 Авг 2019 в 06:58
223 +1
0
Ответы
1

Использование интерфейсов позволяет достичь расширяемости и гибкости кода. В случае паттерна Observer, интерфейсы Observer и Observable предоставляют нам возможность определить общие методы для всех наблюдателей и наблюдаемых объектов. Это делает код более понятным, упрощает его расширение и обеспечивает возможность замены конкретных классов другими, не нарушая работу программы.

Таким образом, использование интерфейсов в данном случае не является избыточным, а, наоборот, помогает сделать код более структурированным.

Если отказаться от интерфейсов Observer и Observable, то заметно усложнится возможность добавления новых типов наблюдателей или наблюдаемых объектов, а также замены одних на другие без изменения существующего кода. Это может привести к ухудшению читаемости и поддерживаемости кода.

Возможные сценарии развития представленного кода без использования метаклассов Observer и Observable могут включать в себя возможные проблемы с добавлением нового функционала, изменением существующего кода или заменой компонентов. Может потребоваться вносить изменения во все классы, которые реализуют наблюдателей и наблюдаемые объекты, что сильно усложнит поддержку кода.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир