Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Особенности множественного наследования
Продолжаются споры о механизмах множественного наследования. Аргументы против множественного наследования: · Возможность сочетания двух абсолютно разнотипных классов · Конфликтные ситуации: При множественном наследовании могут возникнуть 2 конфликта: 1. Конфликт имён. Когда в двух или больше предков содержится элемент с одинаковым именем. С конфликтом имён можно бороться 3 способами:
1. Считать такой конфликт ошибкой и отвечать от компиляции (smalltalk и Eiffel) 2. Считать, что одинаковые имена означают один и тот же атрибут (CADS) 3. Считать, что в унаследованном классе будут оба этих имени; что бы их различать в унаследованном классе, необходимо явно указывать имя предка. 2. Повторное наследование. Возникает вопрос сколько раз данные и функции предка D присутствуют внутри класс С. Конфликт может быть разрешён одним из трёх способов:
1. Запрет ромбированного наследования на этапе компиляции (smalltalk и Eiffel) 2. Ромбовидное наследование разрешено в наследовании 3. С будет столько копий, сколько независимых цепочек D; различаются они указанным предком перед ними (C++). 3. Можно рассматривать множественные ссылки на один и тот же класс предок, как не дублирующие, при этом в общем виде иерархии множественного наследования направленный ациклический граф, при наследованный явно вписывается слово virtual. При этом расшифровка имён не нужна (C++). Точно так же как и для одиночного наследования, некоторые языки имеют вершину иерархии. 4. Агрегация
В данном примере class TemperatureController выступает в качестве целого. В данном объявлении переменная (поле) с именем h включено класс TempatureController, это означает, что объект weather не существует сне этого класса. H создаётся и уничтожается одновременно с TemperautreController. Иногда в связи агрегации части могут хранится отдельно от агрегата. Во втором случае агрегат содержит ссылку на часть и в самом общем случае часть может не уничтожаться с агрегатом
|