Книга: Основы объектно-ориентированного программирования
Может ли самолет быть имуществом?
Может ли самолет быть имуществом?
Наш первый подходящий пример относится скорее к моделированию систем, чем к проектированию программных продуктов. Однако он наглядно иллюстрирует ситуацию, в которой множественное наследование необходимо.
Пусть класс AIRPLANE описывает самолет. Среди запросов к нему могут быть число пассажиров (passenger_count), высота (altitude), положение (position), скорость (speed); среди команд - взлететь (take_off), приземлиться (land), набрать скорость (set_speed).
Независимо от него может иметься класс ASSET, описывающий понятие имущества. К его компонентам можно отнести такие атрибуты и методы, как цена покупки (purchase_price), цена продажи (resale_value), уменьшить в цене (depreciate), перепродать (resell), внести очередной платеж (pay_installment).
Наверное, вы догадались, к чему мы клоним: компания ведь может владеть самолетом! И для пилота самолет компании это просто машина, способная взлетать, садиться, набирать скорость. Для финансиста это имущество, имеющее (очень высокую) цену покупки, (слишком низкую) цену продажи, и вынуждающее компанию ежемесячно платить по кредиту.
Для моделирования понятия "самолет компании" прибегнем к множественному наследованию:
Рис. 15.3. Самолет компании
class COMPANY_PLANE inherit
PLANE
ASSET
feature
... Любой компонент, характерный для самолетов компании,
(отличающийся от наследуемых компонентов родителей) ...
end
Родителей класса достаточно перечислить в предложении inherit. (Как обычно, можно разделять их имена точкой с запятой, хотя это не обязательно.) Порядок перечисления классов не играет никакой роли.
В моделировании систем найдется еще немало примеров, подобных COMPANY_PLANE.
[x]. Наручные часы-калькулятор моделируются с применением множественного наследования. Один родитель позволяет устанавливать время и отвечать на такие запросы, как текущее время и текущая дата. Другой - электронный калькулятор - поддерживает арифметические операции.
[x]. Наследником классов судно и грузовик является амфибия (AMPHIBIOUS_VEHICLE). Наследник классов: судно, самолет - гидросамолет (HYDROPLANE). (Как и с TEACHING_ASSISTANT, здесь также возможно дублируемое наследование, поскольку каждый из классов-родителей является потомком средства передвижения VEHICLE.)
[x]. Ужин в ресторане; поездка в вагоне поезда - вагон-ресторан (EATING_CAR). Вариант: спальный вагон (SLEEPING_CAR).
[x]. Диван-кровать (SOFA_BED), на котором можно не только читать, но и спать.
[x]. "Дом на колесах" (MOBILE_HOME) - вид транспорта (VEHICLE) и жилище (HOUSE) одновременно; и так далее.
С точки зрения программиста эти примеры представляют академический интерес - нам платят за построение систем, а не за построение модели мира. Впрочем, во многих практических приложениях с аналогичными комбинациями абстрактных понятий вы обязательно столкнетесь. Более подробный пример из графической среды разработки ISE мы изложим чуть ниже.
- При копировании с жесткого диска на «флэшку» иногда появляется сообщение о дополнительной присоединенной информации, кот...
- В дисках используется не NTFS, а я хочу защитить свои данные. Как быть?
- Бывает, что много файлов удаляется быстро, а один файл может удаляться несколько минут. В чем причина?
- Вот уже в который раз при работе в сети появляется сообщение от других пользователей. Что это может быть?
- У меня проблемы со здоровьем. Может ли мне помочь Интернет?
- При запуске программы появляется сообщение Инструкция по адресу 0х77ddb1d1 обратилась к памяти по адресу 0x0080002c. Пам...
- При попытке установить принтер появляется сообщение Невозможно завершение операции. Подсистема печати недоступна. В чем ...
- Может ли посетитель попасть в нужный раздел сайта непосредственно с домашней страницы?
- Глава 4 Скрытое рекламное послание: как успешно продавать и не быть навязчивым
- Зачем вашей компании может быть нужен корпоративный блог?
- Глава 1 Может ли компьютер обладать разумом?
- Недостаточно денег? Вы все равно можете одержать победу