П
Пра-пра-правда
@SEIkass77 подп.
1.1Kпросмотров
15 декабря 2024 г.
Score: 1.2K
Поборов сложный и непонятный принцип подстановки Барбары Лисков 🔨 (да, такая большая пауза между буквами обусловлена временем для более глубокого понимания буквы L (всё для вас :з )) мы перебираемся к предпоследней букве принципов SOLID - букве I 😍 Глянем определение от Роберта Мартина: ⚙ Программные сущности не должны зависеть от методов, которые они не используют Если подробнее, то принцип разделения интерфейсов говорит о том, что слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы программные сущности маленьких интерфейсов знали только о методах, которые необходимы им в работе. В итоге, при изменении метода интерфейса не должны меняться программные сущности, которые этот метод не используют. Рассмотрим interface segregation principle (ISP) на примере квадроберов!! 🦮 Что умеет любой человек? Ходить 🏃 (на двух ногах), думать 📓 (мыслить как разумное существо), питаться 👄, издавать звуки 🙋 (говорить). Ну, я думаю этого пока что хватит. 🫠 Давайте имплементируем все вышесказанное: class Human: def bipedalism(self): // хождение на 2 ногах pass def ponder(self): // размышление о бесконечно-вечном pass def eat(self): // питание обычной человеческой едой pass def make_a_sound(self): // произнесение слов pass Готово, у нас появился класс человека, который как бы подразумевает обычное поведение человека. 😳 Давайте теперь определим класс квадробера 😀, который как бы должен наследовать функционал от класса человека. 😛 class Quadrober(Human): def quadrupedalism(self): // перемещение на 4 лапах pass def ponder(self): // раздумья о квадроберах pass def eat(self): // питание обычной человеческой едой pass def make_a_sound(self): // издавание звуков животного pass Внимательный читатель заметит, что в реализации квадробера запряталась куча ошибок: 🤯 1) Мы нарушаем принцип разделения интерфейсов (об этом далее) 🧟 2) на самом деле квадробер не может мыслить как человек (мы унаследовали от человека ponder), иначе он бы не стал квадробером. 🥴 (Это лишь самые главные ошибки) Происходит проблема избыточной функциональности: класс квадробера перенимает bipedalism 🌟 (но он не может ходить на двух ногах, он не должен обладать данным методом!). Единственное, что мы наследуем для полноценного использования - eat (да, квадроберы помимо корма кушают и обычную еду 🩺) Давайте попробуем посолⅠть ☕ наш код и глянем, что из этого выйдет: class Bipedalism: def walk(self): pass class Quadropedalism: def walk(self): pass class Pounder: def think(self): pass class Make_a_sound: def sound(self): pass class Eat: def eating(self): pass class Human(Eat, Make_a_sound, Bipedalism, Pounder): // мы не наследуем quadropedalism, т.к. не будем ходить на 4 лапах def walk(self): // гуляем на двух ногах pass def sound(self): //издаем человеческие звуки pass def eating(self): // кушаем обычную еду pass def think(self): // думаем о бесконечно-вечном pass class Quadrober(Eat, Make_a_sound, Pounder, Quadropedalism): // не наследует Bipedalism, т.к. не будет ходить на 2 ногах def walk(self): // гуляет на 4 лапах pass def sound(self): // издает звуки животного pass def eating(self): // кушает как корм, так и нормальную еду pass def think(self) // думает о других квадроберах pass Таким образом мы разделили интерфейсы и теперь квадроберы стали полностью независимы от класса Human, перестав быть людьми. 🐈 Конечно это все очень грубый пример (про «перестав быть людьми» - шутка!), да и в идеале стоило унаследовать от Human eat, pounder, make_a_sound, а вот метод ходьбы разделить на разные классы (разделение интерфейсов). 😣 Ну даже так суть в разделении интерфейсов явно прослеживается в выше описанном коде 💻 (автору лень переписывать код, что бы было идеально (на самом де
1.1K
просмотров
4000
символов
Да
эмодзи
Нет
медиа

Другие посты @SEIkass

Все посты канала →