Введение в системы БД (542480), страница 255
Текст из файла (страница 255)
Теперь рассмотрим процедуру создания объектов слушателей. Эти объекты (ЕИКОЬЬМЕИТ) отличаются от объектов потоков тем, что содержат переменную экземпляра ЕИР, значение которой является идентификатором соответствующего объекта ЕИР. Поэтому последовательность действий должна быть такой. 1.
Определить метод для создания нового объекта класса ЕНКОЬьИЕНТ. В этом методе в качестве аргументов используются значения переменных СООКЯЕЯ, ОРРР, ЕИР$ и 6КАОЕ и создается новый объект ЕИКОььИЕИТ с заданным значением аргумента 6КАОЕ. Кроме того, требуется выполнить некоторые дополнительные действия. ° Использовать значения СООКЯЕР и ОГРЯ для нахождения объекта ОГРЕК1И6, соответствующего новому объекту класса ЕИКОььИЕИТ.
° Най~и "множество всех слушателей" для данного объекта класса ОГГЕК1И6. ° Добавить идентификатор нового объекта класса ЕИКОь)ЛЕНТ к соответствующему "множеству всех слушателей". Кроме того, потребуется следующее. ° Использовать значение переменной ЕИРР для нахождения соответствующего объекта ЕИР. ° Разместить идентификатор объекта ЕИР в переменной ЕМР внутри нового объекта класса ЕНКОЬЬМЕНТ. 2. Вызывать только что определенный метод для каждого отдельного потока.
И наконец перейдем к созданию объектов преподавателей. Различие между способами создания объектов для преподавателей и потоков заключается в том, что класс ТЕАСНЕК является подклассом класса ЕИР. Ниже приведена последовательность действий, которые необходимо выполнить в данном случае. 1. Определить метод создания нового объекта класса ТЕАСНЕК. Этот метод принимает в качестве аргументов значения переменных СОСНЯКА, ОРР1 и ЕИРЯ.
Потребуются также некоторые дополнительные действия. ° Использовать значение переменной ЕИРР для нахождения соответствующего объекта класса ЕИР. ° Преобразовать объект класса ЕИР в объект класса ТЕАСНЕК (поскольку этот сотрудник теперь является также преподавателем). Специфика подобного преобразования зависит от конкретной системы (см. главу 19), и здесь этот вопрос рассматриваться не будет. ° Использовать значения переменных СООКЯЕ$ и ОРРР для поиска объекта класса ОГРЕК1И6, соответствующего новому объекту класса ТЕАСНЕК.
° Найти "множество всех преподавателей" для этого объекта ОРРЕК1Н6. 969 Глава 24. Объектные базы данных ° Добавить идентификатор нового объекта класса ТЕАСНЕН к соответствующему "множеству всех преподавателей". 2. Определить множество всех курсов, которые может вести данный преподаватель, а также задать соответствующим образом значение переменной СООЕБЕЯ в новом объекте класса ТЕАСНЕК. Однако здесь эти подробности будут опущены. 3. Вызывать только что определенный метод для каждого объекта, описывающего отдельного преподавателя.
Операции извлечения Прежде чем приступить к подробному описанию операций извлечения, следует отметить, что (хотя это и вполне очевидно) язык ОРА(., как н другие объектные языки в целом, функционирует по принципу последовательной обработки отдельных записей, а не их множеств. Следовательно, для решения большинства проблем программист должен создать некоторую процедуру. Рассмотрим в качестве примера запрос "Найти все потоки для курса с номером 'С001', которые преподаются в городе Иен ХогХ'". Для простоты предположим, что есть переменная ООБОАС, значение которой является идентификатором "набора всех курсов". Ниже приводится код для такого запроса.
1 [ СООНБЕ С001 , С001 ОГГБ , С001 ИХ ОГРЯ 2 СООНЯЕ С001 3 := ООЯОАС 0ЕТЕСТ : [ :СХ ! ( СХ ОЕГ СОНЕЯЕМ ) = 'С001' ) 4 С001 ОГГБ 5 != СООНЯЕ С001 ОЕТ ОГГЕН1ИОБ 6 СОО1 ИХ ОГГЯ 7 ! С001 ОГГБ ЯЕЬЕСТ 8 [ :ОХ [ ( ОХ ОЕТ ЬОСАТ1ОИ ) = 'Иак ХогХ' 9 " С001 ИХ ОГГЯ , Пояснения ° В строке! объявлены три локальные переменные: СООНБЕ С001, которая будет использована для хранения идентификатора объекта курса с номером 'С001'; С001 ОГГЯ, которая будет использована для хранения идентификатора объекта "набора всех потоков" для курса с номером 'СО01'; С001 ИХ ОГГБ, которая будет использована для хранения идентификатора набора идентификаторов для требуемых потоков (т.е.
потоков, читаемых в Нью-Йорке). ° В строках 2 и 3 посылается сообщение объекту (коллекции), определяемому значением переменной ООЯОАС. Это сообщение вызывает встроенный метод 0ЕТЕСТ данной коллекции объектов с указанием следующего аргумента. [:х [ р(х) ) Здесь р(х) — условное выражение, включающее переменную х, а х — переменная диапазона, изменяющаяся в пределах всех членов коллекции, к которой применяется метод ОЕТЕСТ (т.е. множества объектов СООИЯЕ в рассматриваемом примере). В результате выполнения метода ОЕТЕСТ возвращается идентификатор первого найденного объекта этого множества, для которого выражение р(х) оказывается 970 Часть У1.
Объектные и объектно-реляционные базы данных истинным (в рассматриваемом примере это экземпляр объекта класса СООЕЯЕ для курса с номером 'С001')э. Затем идентификатор этого объекта класса СООЕБЕ присваивается переменной СООЕБЕ С001. Замечание. В качестве аргумента метола 0ЕТЕСТ можно также задать некоторый аргумент "выхода" на случай, когда выражение р(х) не будет истинны.ч ни для одного объекта в коллекции. Однако такая детализация здесь опущена.
° В строках 4 и 5 переменной С001 ОГГЯ присваивается идентификатор "множества всех потоков" для курса с номером 'С001'. ° Строки 6-8 подобны строкам 2 и 3, поскольку встроенный метод ЯЕЬЕСТ подобен методу ОЕТЕСТ, за исключением того, что он возвращает идентификатор коллекции идентификаторов всех объектов (вместо того чтобы указывать только на первый найденный объект), для которых выражение р(х) является истинны.ч.
В рассматриваемом примере в результате выполнения этого метода переменной С001 НТ ОГГБ присваивается идентификатор набора идентификаторов для тех потоков курса с номером 'С001', которые читаются в городе 'Неч ГогЕ'. ° В строке 9 этот идентификатор возвращается пользователю. Следует обратить внимание на некоторые особенности приведенного примера. 1.
Условное выражение р(х) в методах ЯЕЬЕСТ и ОЕТЕСТ может содержать (в самом сложном случае) некоторое количество простых скалярных операторов сравнения, которые соединяются с помощью операторов ЕЯО, т.е, сложность данного условия поиска ограничена. 2. Квадратные скобки, окружающие выражение аргумента метолов ЯЕ1 ЕСТ и ОЕТЕСТ, можно заменить круглыми скобками. При использовании круглых скобок в языке ОРАЬ будет предпринята попытка задействовать индекс (если соответствующий индекс существует), а при использовании квадратных скобок индексы задействованы не будут. 3.
Указание, что метод ОЕТЕСТ возвращает идентификатор "первого найденного" объекта, для которого значением выражения р(х) будет истина, означает, что найденный объект булет первым найденным при использовании произвольной последовательности поиска, которая будет выбрана языком ОРАЬ для просмотра коллекции (внутри набора идентификаторов не задается никакой внутренней упорядоченности). В рассматриваемом примере это замечание не имеет особого смысла, поскольку "первый" объект, для которого выражение р(х) будет истинно, фактически является единственны,ч таким обьектом. 4.
Внимательный читатель непременно заметит выражения наподобие "метод 0ЕТЕСТ", хотя, как отмечалось выше, методы в языке ОРА1 не имеют имен. Действительно, ОЕТЕСТ и ЯЕЬЕСТ не являются названиями методов (а потому выражения наподобие "метод ОЕТЕСТ" некорректны). Они, скорее всего, служат именами внешних параметров для некоторых встроенных (и анонимных) методов. Однако для краткости и простоты далее в качестве имен методов по-прежнему будут использоваться названия ОЕТЕСТ и ЯЕЬЕСТ (а также другие подобные им названия для других методов). В В этом примере подразумевается, что такие методы, как ЯЕТ СОБЕСЕ() (аналог метода ВЕТ ЕИР$, описанного в этом раэделв), уэкв определены.
971 Глава 24. Объектные базы Данных 5. Кроме того, внимательный читатель заметит, что довольно часто используется выражение "метод ИЕМ". В данном случае оно вполне корректно. В качестве исключения в языке ОРАЬ допускается применение анонимных методов, которые не содержат каких-либо аргументов, кроме указания обьекта-получателя.
Операции обновления Объектный аналог операции вставки 1МЯЕЕТ уже обсуждался в предыдущем подразделе, а аназоги операций обновления ОРОаТЕ и удаления ОЕЬЕТЕ рассматриваются ниже. ° Обноапение. Операции обновления выполняются так же, как операции извлечения, но вместо методов 6ЕТ используются методы БЕТ . ° Удаление. Для удаления объектов используется встроенный метод МЕИОЧЕ.
Точнее, он используется для удаления идентификатора некоторого объекта из некоторой коллекции. Если на данный объект больше не имеется никаких ссылок, т.е. к нему вовсе не может быть осуществлен доступ, то в языке ОРАМ он автоматически удаляется системным процессом сборки мусора. Ниже приводится пример реализации операции "удаления сотрудника с номером 'Е001' из набора всех сотрудников". Е001 := 610 ОГ ЯЕТ ОГ ЕЬЬ ЕИРЯ ОЕТЕСТ : [ :ЕХ ( (ЕХ 6ЕТ ЕМРМ ) = 'Е001' ].