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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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


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


image


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


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


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


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


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


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


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


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


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


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

Источник: https://habr.com/ru/post/545902/


Интересные статьи

Интересные статьи

Тема терраформирования Марса не один десяток лет относится к числу наиболее амбициозных планов человечества. Кажется, что марсианскую природу достаточно лишь немного...
Привет, Хабр!В первой части статьи мы обсудили, зачем может быть необходимо генерировать случайные числа участникам, которые не доверяют друг другу, какие требования выдвигаются к та...
Привет, Хабр!В этой статье мы обсудим генерацию псевдо-случайных чисел участниками, которые не доверяют друг другу. Как мы увидим ниже, реализовать “почти” хороший генератор достаточн...
JavaScript, с момента выхода стандарта ECMAScript 6 (ES6), быстро и динамично развивается. Благодаря тому, что теперь новые версии стандарта ECMA-262 выходят ежегодно, и благодаря тит...
Возможность интеграции с «1С» — это ключевое преимущество «1С-Битрикс» для всех, кто профессионально занимается продажами в интернете, особенно для масштабных интернет-магазинов.