Введение в системы БД (542480), страница 254
Текст из файла (страница 254)
Выражаясь неформально, объект ЕЯЕТ можно считать аналогом базовой переменной-отношения ЕМР в реляционной версии базы данных. Определения классов СЯЕТ, ОБЕТ, КЯЕТ и ТЯЕТ аналогичны (они приводятся ниже). Однако для каждого из них придется создать не один, а несколько объектов соответствующей коллекции классов. Например, в нашем случае будет существовать столько коллекций объектов ОБЕТ, сколько существует отдельных объектов СООКЯЕ.
ЯЕТ ЯОВСЬАБЯ : 'СВЕТ' СОКЯТКА1КТЯ : СООКЯЕ ЯЕТ ЯОВСХАЯЯ : 'ОЯЕТ' СОКЯТКА1КТЯ : ОРРЕКХКО ЯЕТ ЯОВСЬАЯЯ : 'КЯЕТ' СОКЯТВА1КТЯ : ЕККОЬЬМЕКТ ЯЕТ БОВСХАЯБ : 'ТЯЕТ' СОКЯТКА1КТЯ : ТЕАСВЕК В Заметим, что здесь наследуется закрытое представление (те. физическаяреализация).
965 Глава 24. Объектные базы данных Заполнение базы данных Теперь обсудим, как можно поместить в рассматриваемую базу данных требуемую информацию. Прн этом остановимся на пяти основных типах объектов (сотрудники, курсы, потоки, слушатели, преполаватели). Начнем с сотрудников. Напомним о нашем намерении собрать вместе идентификаторы всех объектов ЕМР в единственном объекте ЕБЕТ. Таким образом, прежде всего необходимо создать объект ЕЯЕТ.
010 ОГ БЕТ ОГ АЬЬ ЕМРЯ := ЕЯЕТ КЕМ " анонимнми! " параметрм " 1 МЕТНОО : ЕЯЕТ 2 А00 ЕМРФ . 'ЕМР8 РАЕМ 3 А00 ЕКАМЕ 1 ЕКАМЕ РАЕМ 4 А00 РОЯ : РОЯ РАЕМ 5 / ЕМР 010 б ЕМР 010:= ЕМР КЕК . 7 ЕМР 010 ЯЕТ ЕМР$ : ЕМР8 РАЕМ ; 8 ЯЕТ ЕКАМЕ : ЕКАМЕ РАЕМ ! 9 ЯЕТ РОЯ : РОЯ РАЕМ . 10 ЯЕЬГ А00: ЕМР 010 11 $ " локальная переменная " новый сотрудник " " инициализация " " вставка Пояснения ° В строке 1 начинается запись кода данного метода (который завершается символом "Ф" в строке ! 1) для объектов класса ЕЯЕТ. (На самом деле в системе во время выполнения программы будет существовать всего один объект этого класса.) ° В строках 2-4 определены три параметра с внешними именами АОО ЕМР$, А00 ЕКАМЕ и А00 РОБ.
Эти имена будут использованы в сообщениях, вызывающих данный метод. Соответствующие внутренние имена ЕМР$ РАЕМ, ЕКАМЕ РАЕМ и РОЯ РАЕМ будут использоваться только внутри кода реализации данного метода. ° В строке 5 определена локальная переменная ЕМР 010, а в строке б ей присвоен идентификатор нового неинициализированного экземпляра объекта класса ЕМР. ° В строках 7-9 посылается сообщение новому объекту класса ЕМР с указанием трех методов (ЯЕТ ЕМР$, БЕТ ЕКАМЕ и ЯЕТ РОБ) и передачей одного аргумента каждому из них(ЕМР8 РАЕМ для ЯЕТ ЕМР$, ЕКАМЕ РАЕМ для ЯЕТ ЕКАМЕ и РОЯ РАЕМ для ЯЕТ РОЯ).
966 Часть Р7. Объектные и объектно-реляционные базы данных Правая часть этого выражения возвращает объектный идентификатор (011)) нового пустого экземпляра объекта класса ЕЯЕТ (т.е. пустое множество идентификаторов объектов класса ЕМР), а затем идентификатор этого нового экземпляра присваивается программной переменной 010 ОГ БЕТ ОГ АЬЬ ЕМРБ. Говоря неформально, эта переменная обозначает множество всех сотрудников.
Теперь всякий раз при создании нового объекта класса ЕМР идентификатор этого объекта следует помешать в объект ЕЯЕТ, идентификатор которого хранится в переменной 010 ОГ ЯЕТ ОГ АЬЬ ЕМРБ. Для создания объекта класса ЕМР и вставки его идентификатора в объект класса ЕЯЕТ необходимо определитьметод нли же написать программу, которая выполнит эту задачу. Замечание. Здесь предполагается, что ЯЕТ ЕМР$ является методом, который используется для объекта класса ЕМР и предназначается лля присвоения некоторого значения переменной НИРИТ.
Аналогично определяются методы ЯЕТ ЕМАМЕ и ЯЕТ РОЯ. Несколько подробнее эти методы рассматриваются ниже. ° В строке 1О посылается сообщение объекту БЕЬГ. Это имя объекта является специальным обозначением, представляющим во время выполнения тот самый текущий объект, в котором определен указанный метол (т.е. сообщение посылается самому текущему целевому объекту). Сообщение вызывает встроенный метод А00 (этот метод содержится в каждом классе, определяющем "коллекцию'*).
В результате идентификатор объекта, который содержится в локальной переменной ЕМР 010, будет вставлен в объект, идентифицируемый значением переменной БЕЬГ (в данном случае это будет объект ЕЯЕТ, содержащий идентификаторы всех сушествующих на текущий момент объектов класса ЕМР). Замечание. Переменная ЯЕЬГ необходима потому, что параметр, соответствующий объекту-получателю, не имеет собственного имени (см. строку 1). ° Обратите внимание, что, как отмечено в комментарии к строке 1, определенный здесь метод остается анонимным. В общем случае в языке ОРАЬ методы не имеют имен; вместо этого лля них используется сагнатура (т.е. комбинация имени класса, в котором он применяется, и внешних имен их параметров).
Однако при этом возникает опасность создания неуклюжих и огромных выражений. Можно отметить и еще олин недостаток: если два метода одного и того же класса используют одни и те же параметры, то лля этих методов должны использоваться разные внешние параметры. Теперь новый метод, созданный для вставки в базу данных новых объектов класса ЕМР, можно применить следующим образом.
010 ОГ БЕТ ОГ АЬЬ ЕМРЯ АОО ЕМРЙ : 'Е009' АОО ЕСМЕ с 'Не1вв' АОО РОЯ : ' Зап11ог' При использовании приведенного выражения будет создан объект класса ЕМР для сотрудника с номером 'Е009', а идентификатор этого объекта будет добавлен к множеству всех идентификаторов объектов класса ЕМР. Обратите внимание, что встроенный метод НЕМ никогда не должен использоваться для класса ЕМР, кроме тех случаев, когда он является частью только что определенного метода. Иначе могут быть созданы лишние объекты класса ЕМР, которые не будут представлены в "множестве всех сотрудников".
Замечание. Следует принести извинения за слишком частое повторение таких выражений, как "множество всех сотрудников" и "только что определенный метод", однако сложно описывать то, что не имеет собственного имени. А теперь займемся курсами. Объекты для сотрудников представляют собой наиболее простой случай, поскольку они соответствуют "регулярным объектам*' (согласно терминологии модели типа "сущность/связь") и не содержат никаких других объектов (не считая неизменяемых). Далее следует рассмотреть более сложный случай объектов для курсов, которые (несмотря на то, что они все еше остаются "регулярными объектами" ) концептуально содержат другие изменяемые объекты. В целом, чтобы создать объекты для курсов, необходимо выполнить следующие действия. Глава 24.
Объектные базы данньп 967 1. Применить метод ИЕИ для класса СЕЕТ с целью создания исходно пустого "множества всех курсов" (на самом деле — множества идентификаторов объектов класса СООНЯЕ). 2. Определить метод для создания нового объекта класса СОСНЯЕ н вставки его идентификатора в "множество всех курсов". При создании этого объекта потребуется задать некоторые значения для параметров СООНЯЕ! и Т1ТЬЕ.
Кроме того, с помощью метода ИЕИ класса ОЯЕТ потребуется также создать исходно пустое множество потоков (на самом деле — идентификаторов объектов класса ОГРЕИ1И6), а затем разместить идентификатор этого пустого множества потоков в переменной ОГЕИ1ИОЯ внутри нового объекта класса СООЕЯЕ. 3. Вызвать только что определенный метод для каждого отдельного курса.
Теперь создадим объекты потоков. Для этого необходимо выполнить следующие действия. !. Определить метод лля создания нового объекта класса ОРРЕИ1И6. Этот метод должен принимать в качестве параметров значения переменных ОРРР, ООАТЕ и ЬОСАТ10И и приводить к созданию нового объекта класса ОРРЕИ1И6 с указанными параметрами. Кроме того, потребуется выполнить некоторые дополнительные действия. ° Для создания исходно пустого множества слушателей (ндентификаторов объектов класса ЕИИОЬЬМЕИТ) следует применить метод ИЕИ для класса ИЯЕТ, а затем разместить идентификатор этого пустого множества слушателей в переменной ЕИЕОЬЬНЕИТЯ внутри нового объекта класса ОРРЕН1И6. ° Для создания исходно пустого множества преподавателей (идентифнкаторов объектов класса ТЕАСНЕН) следует применить метод ИЕИ для класса ИЯЕТ, а затем разместить идентификатор этого пустого множества преподавателей в переменной ТЕАСНЕНЯ внутри нового объекта класса ОРРЕН1И6.
2. Данный метод принимает в качестве параметра значение переменной СООЕЯЕР и применяет его следующим образом. ° Используя указанное значение параметра, необходимо найти объект класса СОСИЯЕ, соответствующий новому объекту класса ОРГЕН1И6. Как это можно выполнить, описано в следующем подразделе. Замечание. Безусловно, такой метод не позвали~ создать объект для нового потока, если не будет найден соответствующий ему курс обучения.
Далее в этой главе такие исключительные случаи рассматриваться не будут. ° Следует найти "множество всех потоков" для данного объекта класса СОНЕЯЕ, ° Добавить идентификатор нового объекта класса ОРРЕИ1И6 к соответствующему "множеству всех потоков". Заметьте, что (как уже упоминалось в этой главе) здесь нельзя избежать применения таких пользовательских ключей, как СООНЯЕ!!. Действительно, они необходимы не только для отображения объектов окружающего мира, но и для организации подстановок справочных данных внутри базы данных.
3. Наконец следует вызвать только что определенный метод для каждого отдельного потока. 968 Часть РХ Объектные и объектно-реля!(ионные базы данных Обратите внимание, что (в соответствии с используемым представлением иерархии вложения) здесь не было создано "множество всех потоков". В результате для выполнения запроса, в котором данные коллекции используются в качестве анализируемой области (например, для запроса "Найти все потоки, преподаваемые в Нью-Йорке" ), потребуется дополнительно создать некоторую процедуру (см. следующий подраздел).