Абриаль 2.1 Начало Выше Дальше16/08/03 А.И.Пацкин [packin.ru]
[ Гипертабличное создание асоциаций ] Текстовое определение ассоциаций ]

Гипертабличное создание асоциаций


Создание ассоциаций (виртуальных отношений).

В общем, для создания ассоциации необходимо проделать следующее.

  1. Приготовить все необходимые классы, объекты, и отношения.
  2. Создать обычное отношение
  3. Присвоить ему категорию VIRT (виртуальное)
  4. Создать переменные, (это можно делать попутно)
  5. Создать условия составляющие определение
  6. Привязать часть переменных к аспектам ассоциации
  7. Проверить и отладить работу ассоциации

Проделаем все эти шаги для создания ассоциации Брат, моделирующего одноименное родственное отношение людей.

Подготовка

Для нашего примера понадобятся

Личность:CLASS(Родители,Дети,Пол)
Пол:CLASS(Пол_для)
Муж:Пол
Жен:Пол
Родитель
:LINK(Родители:{&Личность},Дети:(&Личность))
Пол:LINK(Пол:&Личность,Пол_для:{&Пол})

Мы создадим ассоциацию (виртуальное отношение) Брат, формально определяемое так.

Брат:LINK(Брат(А):{&Личность},Брат_для(Б):{&Личность})
     Брае(А,Б)=>Родитель(А,В),Родитель(Б,В),NE(А,Б),Пол(Б,Муж).

Отношение включает три переменные (А,Б,В), и имеет следующий смысл: Братом Личности А является Личность Б, отличная от А и имеющая Пол равный Муж (мужской), и для личностей А и Б должен существовать общий Родитель В.

Создание обычного отношения

Сначала просто создадим обычное отношение

Брат:LINK(Брат(А):{&Личность},Брат_для(Б):{&Личность})

Покажем, как выглядит его таблица аспектов.

Изменение категории отношения на VIRT

Затем укажем для этого отношения в графе LTYPE категорию VIRT отличную от принимаемой по умолчанию категории REAL. (Предварительно нужно нажатием Esc выйти из таблицы аспектов в таблицу отношений).

Создание множества определяющих условий

Теперь нужно задать для отношения Брат множество определяющих условий, что собственно и будет определением виртуального отношения. Переместимся в графу CONDS, пока пустую, где должны находиться условия, и нажмем Enter. Это приведет к появлению первого пустого условия.

Теперь если еще раз нажать Enter мы попадем в таблицу условий для отношения Брат.

В этой таблице в графе PRED должны быть предикаты условий, т.е. те имена отношений, которые в текстовом виде записываются перед скобками. А в графе MEMS находятся члены условий, т.е. те переменные или объекты, которые находятся внутри скобок.

Создание переменных в условиях

Введем первое условие Родитель(А,В). Имена переменных удобнее делать тоже русскими, чтобы не переключать всё время язык. В графе PRED нажмем Insert и в появившемся списке отношений выберем Родитель. Затем нажмем Insert в графе MEMS. Поскольку MEMS есть полиморфный аспект, то сначала появляется список классов, из которого надо выбрать класс члена условия.

Надо выбрать : VAR, т.к. мы собираемся вставить переменную А. Поскольку переменных пока еще не было создано, откроется пустой список, и нужно для первого раза имя переменной А просто ввести. А затем таким же образом ввести переменную В в качестве второго члена условия. При этом созданная перед этим переменная А уже появится в списке выбора.

В результате мы видим первое введенное условие.

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

Ссылки на объекты в условиях

Осталось ввести последнее условие Пол(Б,Муж), которое отличается тем, что второй его член не переменная, а константа, т.е. ссылка на конкретный объект Муж:Пол, соответствующий мужскому полу Брата из переменной Б. Когда мы вместо :VAR выбираем :REF, то вторым членом условия становится пустая неименованная ссылка, обозначаемая REF[].

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

Сразу же после этого раскроется список из двух представителей класса Пол. В этом списке надо выбрать объект Муж.

После чего, нажатием Esc возвратимся в таблицу условий и убедимся, что все требуемые условия введены правильно.

Привязка переменных к аспектам

Теперь нам осталось только "привязать" переменные А и Б к двум аспектам отношения Брат, с чего мы, впрочем, могли бы и начать. Перейдем в таблицу аспектов отношения Брат. В графе VARS, соответствующей переменным аспекта, поочередно для аспектов Брат и Брат_для нажмем Insert, и выберем из раскрывшегося списка переменные А и потом - Б, соответствующие этим аспектам.

После исполнения этого ассоциация создана.

Проверка работы ассоциации

Мы можем теперь сразу проверить его работу. Перейдем в таблицу представителей класса Личность, и назначим Бориса Родителем для Андрея, Виктора и Галины и укажем всем четверым Пол в соответствии с именами. Как только мы это сделаем, мы можем убедиться, что виртуальное отношение Брат вычисляется правильно.

Мы видим, как достаточно сложные ассоциации можно формировать в стандартном табличном интерфейсе без написания какого-либо программного текста.


Все права защищены. © 2000-2004 РосНИИ ИИ
http://artint.ru
Copyright. © 2000-2004 by RRIAI
Александр Иосифович Пацкин [mailto:aleksandr@tochka.ru].
16/08/03

К началу документа.