Скачиваний:
21
Добавлен:
01.05.2014
Размер:
142.85 Кб
Скачать

4. Иерархия классов и механизм наследования

Если определения классов образуют иерархическую структуру, то необходим специальный механизм, с помощью которого организуется множество свойств. Этой цели служит механизм наследования, содержащийся в той или иной форме во всех иерархических объектных системах .

Посредством механизма наследования новый определяемый класс может автоматически унаследовать свойства (переменные экземпляра и методы) класса, определенного как его надкласс. С помощью наследования достигается та же цель, что и в иерархии типов распространенных языков программирования: более общие свойства, связанные с типом более высокого уровня, нет необходимости специально определять в связи с типами нижнего уровня. Достаточно указать, из какого надкласса они наследуют свойства. Таким образом, можно упростить определения и сэкономить усилия на их поддержку. Изменения можно локализовать лишь в одном изменяемом месте программы.

Наиболее важное преимущество объектно-ориентированного программирования состоит в том, что оно предлагает механизм абстракции для разбиения задачи и ее решения на части. С другой стороны, оно предполагает, что объекты предметной области, а также их свойства и зависимости должны быть тщательно проанализированы.

Чтобы различить классы можно использовать естественное разбиение объектов на разные классы. Например, живые существа разделяются на млекопитающих, птиц, пресмыкающихся, рыб. насекомых и т.д. Далее они подразделяются на подклассы в соответствии с дополнительными свойствами каждого вида.

Кроме того, можно выделить абстрактные совокупности свойств в характеристические классы и использовать их в определениях. Характеристический класс может содержать свойства, противоположные или аналогичные свойствам базовых классов и их естественной классификации. Например, классы "солнце" и "яблоко" могли бы унаследовать из некоторого класса геометрических свойств свойство

"круглый".

В разных системах приняты различные соглашения о том, какова может быть топология структур наследования. Например, в известном объктно-ориентированном языке программирования SMALLTALK у класса может быть только один надкласс, но несколько подклассов . В этом случае возможны лишь стуктуры наследования в виде дерева. Языки программированя ZETALISP и LOOPS допускают принадлежность класса одновременно нескольким надклассам . Структура наследования здесь может быть подобна ациклической сети, похожей нарешетку.

Рассматриваемая объекно-ориентированная среда допускает и циклическое определение, но исключает рекурсивное наследование. Структура определений может быть направленной сетью общего вида, но среда распознает циклические определения и обрывает в этом случае наследование. Каждое свойство учитывается лишь один раз.

Очевидно, что принятые в объектно-ориентированной среде допущения по способу наследования могут накладывать определенные ограниченя на описание классов объектов для некоторых предметных областей. Например, в математике и в естественном языке могут использоваться рекурсивные типы.

Однако для большинства практических применений достаточно ациклических структур. В этом случае класс наследует свойства не только классов, непосредственно стоящих над ним, но и свойства их надклассов, т.е. свойства всех классов, расположенных выше.

Если класс наследует свойства из многих надклассов, то встает вопрос о порядке наследования, когда одноименные свойства наследуются из надклассов, находящихся в различных ветвях, или если один и тот же класс встречается в структуре несколько раз. Поэтому при проектировании прикладной системы необходимо принимать во внимание порядок классов объектов и порядок учета свойств классов. Это обстоятельсво определяет комбинацию используемых методов объектов.

В принципе возможными последовательностями поиска являются, например, поиск в глубину и по уровням. В каждой ветви возможными порядками прохождения являются прямой и обратный. Под прямым порядком следует понимать порядок, в котором узел дерева (или сети) проходится раньше прохождения в том же порядке его поддеревьев (сетей). Обратный порядок можно определить аналогично.

В рассматриваемой объектно-ориентированной среде в прохождении иерархии методов классов применяется поиск в глубину и слева направо. Свойства наследуются в том порядке, в котором надклассы указаны в описании класса. Предположим, что иерархия классов выглядит следующим образом:

С4 С5 С4

\ / /

С2 С3

\ /

С1

В этом случае порядок прохода получился бы следующий:

C1 -> C2 -> C3 -> C4 -> C5 -> C4.

Поскольку в разных классах могут быть одноименные, но различные по определениям методы, то для избежания конфликтов необходимо приять соглашение о том, какой из них остается в силе. Разумно ограничиться двумя возможностями: в силе остается либо первый метод, либо последний.

В рассматриваемой объектно-ориентированной среде в силе остается первое встретившееся свойство. Если, например в классе С5 был бы некоторый метод с тем же именем, что и в классе С4, то метод из класса С5 не учитывался бы, при обработке соответствующего сообщения, посланного объекту класса С2 (при приведенной выше стуктуре наследованя).

Переменные объекта подкласса определяются как множество своих переменных объекта и переменных объекта надклассов.

Соседние файлы в папке АУП_1