Наведіть приклад порушення 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:
- Клас змушений реалізовувати методи, які йому не потрібні SimplePrinter не вміє ні сканувати, ні надсилати факси, але інтерфейс змушує його мати ці методи.
- Зайві залежності Клієнт, якому потрібен лише друк, тепер залежить від інтерфейсу, що містить методи сканування і факсу.
- Зміна інтерфейсу ламає систему
Якщо додати новий метод, наприклад
copy(), доведеться змінювати всі реалізації, навіть ті, яким копіювання не потрібне. - Порожні й "шкідливі" методи
Методи
scan()іfax()у класі є по суті марними заглушками і призводять до помилок при виклику.
Підсумок
IMultiFunctionDevice: типовий «товстий» інтерфейс. SimplePrinter порушує ISP, тому що змушений підтримувати функціональність, яка йому не потрібна, що призводить до крихкого і негнучкого дизайну.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.