Skip to main content

Наведіть приклад порушення ISP

Приклад порушення ISP виникає тоді, коли один інтерфейс змушує різні класи реалізовувати методи, які їм не потрібні. Класичний приклад: пристрій «багатофункціонального принтера».


"Товстий" інтерфейс - порушення ISP

python
class IMultiFunctionDevice: def print(self, document): pass def scan(self, document): pass def fax(self, document): pass

Проблема

Будь-який клас, що реалізує цей інтерфейс, зобов'язаний підтримувати всі три методи, навіть якщо йому потрібні лише один чи два.


Реалізація, яка порушує ISP

python
class SimplePrinter(IMultiFunctionDevice): def print(self, document): print("Друк документа") def scan(self, document): raise NotImplementedError("Цей принтер не вміє сканувати") def fax(self, document): raise NotImplementedError("Цей принтер не вміє надсилати факси")

Чому це порушення ISP:

  1. Клас змушений реалізовувати методи, які йому не потрібні SimplePrinter не вміє ні сканувати, ні надсилати факси, але інтерфейс змушує його мати ці методи.
  2. Зайві залежності Клієнт, якому потрібен лише друк, тепер залежить від інтерфейсу, що містить методи сканування і факсу.
  3. Зміна інтерфейсу ламає систему Якщо додати новий метод, наприклад copy(), доведеться змінювати всі реалізації, навіть ті, яким копіювання не потрібне.
  4. Порожні й "шкідливі" методи Методи scan() і fax() у класі є по суті марними заглушками і призводять до помилок при виклику.

Підсумок

IMultiFunctionDevice: типовий «товстий» інтерфейс. SimplePrinter порушує ISP, тому що змушений підтримувати функціональність, яка йому не потрібна, що призводить до крихкого і негнучкого дизайну.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.