![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Иерархическое описание классов объектов
Рассмотрим, имеющиеся в Симула - 67 средства отображения иерархических понятий на примере описания шахматных фигур, пытающихся встать на одну из свободных клеток, доступных за один ход из заданной начальной клетки. Решение этой задачи даст описание ряда не связанных между собой деклараций классов, построенных аналогично декларации класса ПЕШКА. каждая из которых полностью описывает поведение соответсвующей фигуры и отличается от нее только наименованием класса и операторами (*) - правилами хода фигуры. Общие части деклараций классов, описывающих различные фигуры. можно выделить в отдельную декларацию, задающую класс ФИГУРА. которая имеет атрибуты и правила действий общие для всех фигур: class ФИГУРА (НВ, НГ, БЕЛАЯ); integer НВ, НГ; boolean БЕЛАЯ; begin integer ТВ, ТГ; ТВ: =НВ; ТГ: =НГ; if СВОБОДНА (ТВ, ТГ) then goto ОСТАНОВКА; inner; ОСТАНОВКА: ЗАНЯТЬ(ТВ, ТГ); goto КОНЕЦ; ВСТАТЬ НЕКУДА: =TB: =ТГ: =0; КОНЕЦ: end ФИГУРА; В приведенной декларации символ inner - представляет дополнительные сведения - действия, задаваемые в декларациях классов, описывающих поведение любых конкретных фигур. Теперь эти декларации можно определить на основе класса ФИГУРА и задавать в них только дополнительные, характерные для данного вида фигур признаки (атрибуты и правила действий). Определенные таким образом классы называются подклассами класса ФИГУРА и образуют вместе с ним иерархию классов. Класс ФИГУРА называют префикс-классом (надклассом) для классов ПЕШКА, ЛАДЬЯ и т.д. Вся иерархия классов, описывающих шахматные фигуры задается набором деклараций: (1) class ФИГУРА…; (2) ФИГУРА class ПЕШКА…; ФИГУРА class КОРОЛЬ...; В симула-программе тот факт, что класс ПЕШКА является подклассом класса ФИГУРА отображается употреблением имени ФИГУРА в качестве префикса к декларации класса ПЕШКА, которая теперь примет вид: ФИГУРА class ПЕШКА; begin ТГ: =ТГ + (if БЕЛАЯ then I else -1); if (ТГ> 8 or ТГ< 1) or not СВОБОДНА (ТВ, ТГ) then go to ВСТАТЬ НЕКУДА; end ПЕШКА; Работа объектов принадлежащих классу определенной декларации с префиксом происходит в соответствии с эквивалентной декларацией без префикса, полученной путем объединения атрибутов и правил действий заданных в декларации класса и подкласса. Этот процесс объединения называется сочленением и выполняется по определенным правилам называемым алгоритмом сочленения. В процессе сочленения список формальных параметров декларации класса дополняется. При объединении inner заменяется (оператором правил действий из декларации подкласса. Замена символа происходит не буквально, а организацией передач управления. Введем некоторые термины, связанные с иерархиями деклараций классов. Префиксальным уровнем декларации класса и объектов, принадлежащих этому классу, называется номер яруса, соответствующем ей вершины в дереве иерархии. Цепочкой префиксов некоторой декларации класса называется совокупность классов, лежащих на пути из корня дерева иерархии в вершину, соответствующую этой декларации. Введение аппарата иерархий деклараций классов требует уточнения правил использования квалификационных переменных, генераторов объекта и присваивания ссылок. При создании объекта, принадлежащего классу, декларация которого имеет префикс, в соответствующем генераторе объектов, необходимо указать фактические значения для формальных параметров, присутствующих в эквивалентной декларации. В теле декларации класса можно непосредственно использовать все атрибуты, заданные в декларациях из цепочки префиксов этого класса. Атрибуты подкласса из декларации надкласса непосредственно недоступны, хотя к ним можно обратиться благодаря специальным средствам. Взаимо недоступны и атрибуты деклараций лежащих на разных ветвях в дереве иерархий. В том случае, если в декларации классов принадлежащих первой цепочке префиксов определены одноименные атрибуты, то при употреблении их имен, в некоторой декларации обращение будет происходить к тому атри-буту, который определяет ее в цепочке префиксов. Причем в декларации с верхним префиксальным уровнем над обозначением объектов именами классов в языке определены два отношения. позволяющие определить принадлежность объекта к некоторому классу или его подклассу. Отношение X if А. где X - объектное выражение. А - имя класса, истинно, если объект тождественно равный X принадлежит классу А. Отношение X in А истинно если объект, на который указывает выражение X принадлежит классу А или его подклассу.
|