Гипертабличное создание асоциаций
|
Создание ассоциаций (виртуальных отношений).В общем, для создания ассоциации необходимо проделать следующее.
Проделаем все эти шаги для создания ассоциации Брат, моделирующего одноименное родственное отношение людей. ПодготовкаДля нашего примера понадобятся
Личность:CLASS(Родители,Дети,Пол) Мы создадим ассоциацию (виртуальное отношение) Брат, формально определяемое так. Брат:LINK(Брат(А):{&Личность},Брат_для(Б):{&Личность}) Отношение включает три переменные (А,Б,В), и имеет следующий смысл: Братом Личности А является Личность Б, отличная от А и имеющая Пол равный Муж (мужской), и для личностей А и Б должен существовать общий Родитель В. Создание обычного отношенияСначала просто создадим обычное отношение Брат: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, и выберем из раскрывшегося списка переменные А и потом - Б, соответствующие этим аспектам. После исполнения этого ассоциация создана. Проверка работы ассоциацииМы можем теперь сразу проверить его работу. Перейдем в таблицу представителей класса Личность, и назначим Бориса Родителем для Андрея, Виктора и Галины и укажем всем четверым Пол в соответствии с именами. Как только мы это сделаем, мы можем убедиться, что виртуальное отношение Брат вычисляется правильно. Мы видим, как достаточно сложные ассоциации можно формировать в стандартном табличном интерфейсе без написания какого-либо программного текста. |
|