Множественное наследование


Если один класс наследуется от другого класса, первый класс называется подклассом класса, а второй класс — суперклассом первого. Каждый определенный пользователем класс должен иметь хотя бы один прямой супер­класс, т. е. по крайней мере один класс должен появиться в части is-a конструктора defclass.

Множественное наследование происходит, когда класс имеет более одного суперкласса. В этом случае COOL проверяет список прямых суперклассов для нового класса и устанавливает некоторый линейный порядок, называе­мый списком предшествования классов. Новый класс наследует слоты и об­работчики сообщений каждого класса в списке предшествования классов.

Слоты и обработчики сообщений класса, стоящего в начале списка предше­ствования, переопределяют конфликтующие определения из других классов, ранее найденных в списке предшествования. Класс, стоящий перед другим классом в списке предшествования, называется более определенным. Все списки предшествования классов оканчиваются системным классом object, и большинство (если не все) списков предшествования классов для опреде­ленных пользователем классов заканчиваются парой системных классов — user и object. Вывести на экран список предшествования можно с по­мощью функции describe-class (см. гл. 15).

Для определения списка предшествования классов нового класса COOL ис­пользует иерархию наследования от непосредственного суперкласса. COOL рекурсивно применяет следующие два правила к непосредственным супер­классам класса, список предшествования которого необходимо определить:

1. Класс имеет более высокий приоритет, чем любой из его суперклассов.

2. Определение класса задает приоритет между его непосредственными суперклассами.

В случае если, воспользовавшись приведенными выше правилами, можно построить более одного списка предшествования, то COOL построит наи­более простой список, получаемый с помощью обхода дерева наследования класса в глубину. Эта эвристика максимально долго сохраняет родственное дерево класса. Например, если ребенок наследует основные черты от матери и отца, а мать и отец в свою очередь наследуют черты от своих родителей, список предшествования классов для ребенка будет следующим: ребенок, мать, мать матери, отец матери, отец, мать отца, отец отца. Возможны и другие варианты создания списка предшествования, удовлетворяющие пра­вилам, например: ребенок, мать, отец, отец отца, мать матери, мать отца, отец матери. Однако COOL воспользуется первым вариантом, т. к. он со­храняет фамильное дерево класса настолько долго, насколько это возможно.

Приведем несколько примеров, иллюстрирующих построение списка пред­шествования класса.



Дата добавления: 2021-12-14; просмотров: 296;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.