Pull to refresh

Можно ли пингвина наследовать от птицы?

Reading time2 min
Views10K

Опрос на telegram-канале Cross Join "Можно ли наследовать класс Пингвин от класса Птица?" удивил. Большая часть людей ответили вполне определённо "да" или "нет" (результаты опроса приложены в конце статьи). Не ожидал такого расклада, поэтому решил написать короткую заметку.


На самом деле, если вам зададут такой вопрос на собеседовании, знайте: тут есть подвох. Даже два.


image


Если вы ответили "нет", то наверно заподозрили неладное, а именно: если сказать "да", то тут же потребуют реализовать птичий метод "лети()", а пингвины летать не умеют.


Но и это, к сожалению, тоже нельзя назвать правильным ответом.


Дело в том, что когда мы пишем программу, мы не оперируем настоящими животными, мы лишь моделируем их, т.е. строим модель для решения определенных задач бизнеса, а не для всего на свете.


Пингвин и птица в разных бизнес-контекстах могут быть описаны совершенно по-разному.


Для учета количества кала на квадратный километр территории — можно наследовать, без проблем. Если это для чего-то нужно и упрощает программу. Или, например, для исследования зависимости яйценоскости от географии — тоже ОК.


Для учета перемещений животных в пространстве возможно так не получится, потому что метод "лети" с большой вероятностью вызовет проблемы и костыли.


Более того, в одном и том же софте могут присутствовать сразу оба варианта. В различных bounded context могут быть разные модели.


Другой пример: пользователь, использующийся для проверки логина и пароля, и пользователь, для которого считают зарплату — это совершенно разные сущности, даже если у них id один и тот же. Их свойства могут храниться в разных таблицах или базах данных. Наследоваться от чего-то или нет — решается в каждом конкретном случае.


Ну и второй маленький подвох: даже в самом классе Птица делать метод "лети" не совсем корректно, так как это странное предположение, что все птицы летают. Помимо пингвинов, тысячи их: страусы, эму, киви и т.д. Тут модель сразу дала сбой.


Вообще, если говорить серьёзно, то в реальном программировании таких проблем как пингвин-птица не будет, если не заниматься сферическим оверинжинирингом с продумыванием несуществующих вещей наперед (вот хорошая статья про это). Так что это скорее кейс для собеседований, о котором лучше знать.


Upd. Попросили в саму статью приложить результаты опроса:


Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 46: ↑21 and ↓25-4
Comments160

Articles