Cтраница 4
До сих пор в этой главе мы обсуждали простое наследование, когда каждый класс порождается только от одного базового класса. Однако, класс может порождаться более, чем от одного базового класса; такое порождение называется множественным наследованием. Множественное наследование означает, что производный класс наследует элементы нескольких базовых классов. Эта мощная возможность способствует интересным формам повторного использования кодов, но может вызвать и многообразные проблемы, связанные с некоторой неопределенностью. [46]
С помощью этого принципа строятся различные иерархии классов ( простое наследование), а также смешанные классы ( множественное наследование), когда некоторый новый класс одновременно наследует атрибуты и выполняемые над ним операции от нескольких базовых классов. При этом имеется возможность модифицировать поведение объектов. [47]
Верхние уровни иерархической системы классов языка COOL. [48] |
Это метакласс тех классов объектов, которые определены с помощью функции defstruct, а не defclass. Функция defstruct используется в Common LISP для формирования фреймов, состоящих из слотов и наполнителей, но не поддерживающих множественное наследование. [49]
Так же, как язык CLOS представляет собой объектно-ориентированное расширение языка LISP, так и язык C создан на основе широко известного языка С и сохранил все его возможности, добавив к ним средства объектно-ориентированного программирования. Если отвлечься от того факта, что CLOS и C основаны на разных языках-прототипах, то основное отличие между ними заключается в реализации механизма наследования, в частности множественного наследования. В языке C множественное наследование трактуется совсем не так, как мы это делали в предшествующих разделах настоящей главы, а потому этот вопрос заслуживает подробного обсуждения. [50]
До сих пор в этой главе мы обсуждали простое наследование, когда каждый класс порождается только от одного базового класса. Однако, класс может порождаться более, чем от одного базового класса; такое порождение называется множественным наследованием. Множественное наследование означает, что производный класс наследует элементы нескольких базовых классов. Эта мощная возможность способствует интересным формам повторного использования кодов, но может вызвать и многообразные проблемы, связанные с некоторой неопределенностью. [51]
Опыт показывает, что множественное наследование надо использовать умеренно, так как оно может усложнить программный код проекта. Многие проблемы, вначале решаемые с помощью множественного наследования, теперь решаются путем агрегирования ( вложения) классов. Тем не менее множественное наследование остается мощным средством программирования, от которого не следует огульно отказываться при разработке проектов. [52]
Так же, как язык CLOS представляет собой объектно-ориентированное расширение языка LISP, так и язык C создан на основе широко известного языка С и сохранил все его возможности, добавив к ним средства объектно-ориентированного программирования. Если отвлечься от того факта, что CLOS и C основаны на разных языках-прототипах, то основное отличие между ними заключается в реализации механизма наследования, в частности множественного наследования. В языке C множественное наследование трактуется совсем не так, как мы это делали в предшествующих разделах настоящей главы, а потому этот вопрос заслуживает подробного обсуждения. [53]
Та простая картина, которая вырисовывается из представленного выше механизма прямого наследования, несколько усложняется, если мы попытаемся заменить прямое наследование множественным. В главе 6 уже отмечалось, что это может привести к неоднозначности в наследовании свойств. Но в контексте объектно-ориентированного подхода при множественном наследовании появляется и неоднозначность поведения. [54]
Объектно-ориентированное программирование ( ООП) моделирует объекты реального мира с помощью программных аналогов. Это приводит к появлению отношений классов, когда объекты определенного класса - такого, как класс средств передвижения - имеют одинаковые характеристики. Это выдвигает отношения наследования и даже отношения множественного наследования, когда вновь создаваемые классы приобретают наследуемые характеристики существующих классов, а также содержат свои собственные уникальные характеристики. Объекты класса автомобилей с откидным верхом определенно имеют характеристики класса автомобилей, но крыша у них откидывается и закрывается. [55]