Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Особенности множественного наследования






Продолжаются споры о механизмах множественного наследования. Аргументы против множественного наследования:

· Возможность сочетания двух абсолютно разнотипных классов

· Конфликтные ситуации:

При множественном наследовании могут возникнуть 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. Иногда в связи агрегации части могут хранится отдельно от агрегата.

Во втором случае агрегат содержит ссылку на часть и в самом общем случае часть может не уничтожаться с агрегатом

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал