Может ли самолет быть имуществом?
Наш первый подходящий пример относится скорее к моделированию систем, чем к проектированию
программных продуктов. Однако он наглядно иллюстрирует ситуацию, в которой множественное
наследование необходимо.
Пусть класс AIRPLANE описывает самолет. Среди запросов к нему могут быть число пассажиров
(passenger_count), высота (altitude), положение (position), скорость (speed); среди команд - взлететь
(take_off), приземлиться (land), набрать скорость (set_speed).
Независимо от него может иметься класс ASSET, описывающий понятие имущества. К его ком-
понентам можно отнести такие атрибуты и методы, как цена покупки (purchase_price), цена про-
дажи (resale_value), уменьшить в цене (depreciate), перепродать (resell), внести очередной платеж
(pay_installment).
Наверное, вы догадались, к чему мы клоним: компания ведь может владеть самолетом! И для
пилота самолет компании это просто машина, способная взлетать, садиться, набирать скорость.
Для финансиста это имущество, имеющее (очень высокую) цену покупки, (слишком низкую) цену
продажи, и вынуждающее компанию ежемесячно платить по кредиту.
Для моделирования понятия “самолет компании” прибегнем к множественному наследованию:
В моделировании систем найдется еще немало примеров, подобных COMPANY_PLANE.
• Наручные часы-калькулятор моделируются с применением множественного наследования. Один
родитель позволяет устанавливать время и отвечать на такие запросы, как текущее время и
текущая дата. Другой - электронный калькулятор - поддерживает арифметические операции.
• Наследником классов судно и грузовик является амфибия (AMPHIBIOUS_VEHICLE). Наслед-
ник классов: судно, самолет - гидросамолет (HYDROPLANE). (Как и с TEACHING_ASSISTANT,
здесь также возможно дублируемое наследование, поскольку каждый из классов-родителей яв-
ляется потомком средства передвижения VEHICLE.)