Опрос в Telegram-канале Крестовое соединение «Можно ли унаследовать класс Penguin от класса BirdЭ» удивлен.
Большинство людей вполне определенно ответили «да» или «нет» (результаты опроса прикреплены в конце статьи).
Я не ожидал такой ситуации, поэтому решил написать короткую заметку.
На самом деле, если вам зададут такой вопрос на собеседовании, знайте, здесь есть подвох.
Даже два.
Если вы ответили «нет», то вы, вероятно, заподозрили неладное, а именно: если вы скажете «да», от вас тут же потребуют реализовать птичий метод «fly()», а пингвины не умеют летать.
Но это, к сожалению, тоже нельзя назвать правильным ответом.
Дело в том, что когда мы пишем программу, мы не оперируем реальными животными, мы лишь моделируем их, т. е.
строим модель для решения конкретных бизнес-задач, а не для всего на свете.
Пингвина и птицу можно описывать по-разному в разных деловых контекстах.
Учитывать количество фекалий на квадратный километр территории можно по наследству, без проблем.
Если это для чего-то нужно и упрощает программу.
Или, например, изучить зависимость яйценоскости от географии – тоже ок.
Для учета перемещений животных в пространстве это может не подойти, потому что метод «полет» скорее всего вызовет проблемы и костыли.
Причём обе опции могут присутствовать в одном и том же ПО.
Различные ограниченные контексты могут иметь разные модели.
Другой пример: пользователь, используемый для проверки логина и пароля, и пользователь, для которого рассчитывается зарплата, — совершенно разные сущности, даже если у них одинаковый id. Их свойства могут храниться в разных таблицах или базах данных.
Наследовать что-то или нет решается в каждом конкретном случае.
Ну и вторая маленькая загвоздка: даже в самом классе Bird не совсем корректно делать метод «fly», так как это странное предположение, что все птицы летают. Помимо пингвинов, их тысячи: страусы, эму, киви и т. д. Здесь модель сразу провалилась.
А вообще, если серьёзно, в реальном программировании не будет таких проблем как птица-пингвин, если не заниматься сферическим оверинжинирингом с продумыванием несуществующих вещей заранее( Здесь хорошая статья об этом).
Так что это скорее случай собеседования, о котором лучше знать.
Обновление.
Результаты опроса они попросили включить в саму статью:
Теги: #программирование #разработка сайтов #ООП #наследование
-
Управление Фрилансером – Советы
19 Oct, 24 -
Платформа Intel Aero: Я Хочу Летать
19 Oct, 24 -
Javascript: Тесты, Компиляция И Mvvm
19 Oct, 24