Введение в системы БД (542480), страница 253
Текст из файла (страница 253)
Возможность применять один и тот же метод для объектов класса Х и класса Х называется полиморфизмом. Обычно объектные системы поставляются с определенной встроенной иерархией классов. Например, в системе ОРАЬ (см. раздел 24.4) каждый класс рассматривается как подкласс некоторого уровня встроенного класса ОБЪЕСТ (поскольку "все является объектами"). Встроенные подклассы класса ОБЪЕСТ включают классы ВООЬЕАН, СНАН, 1НТЕОЕЕ, СОЬЬЕСПОН и др. Класс СОЬЬЕСПОН, в свою очередь, включает подкласс ВАО, а класс ВАО содержит класс ЯЕТ и т.д.
и т.п. Наконец, в некоторых системах, кроме одиночного наследования, в той или иной форме поддерживается множественное наследование. Однако автору не известно ни одной системы, которая поддерживала бы наследование кортежей или отношений (как одиночное, так и множественное) в смысле, который подразумевался в [3,3]. 24.4. Простой пример В предыдущей главе были представлены базовые концепции объектного подхода. В данной главе на простом примере последовательно демонстрируется применение этих идей на практике, а именно — как определяется объектная база ланных, как она пополняется данными, как в ней выполняются операции извлечения и обновления данных.
В рассматриваемом примере используются объектная СУБД ОешБгопе (разработка корпорации Оешбгопе Буз1ешз) и ее язык запросов ОРАЬ [24.14]. Язык ОРАЬ, в свою очередь, основывается на языке Бгпа111а!М [24.26], одном из наиболее истинно объектных языков (поэтому он здесь и используется). Зачечание Необходимо добавить, что язык БшаПга1М появился на рынке раньше, чем язык С++, и гораздо раньше, чем язык)ака. Однако несмотря на это два последних языка являются менее "чистыми" объектными языками, чем Бша])гаИс. В качестве примера воспользуемся упрощенной версией базы данных профессиональной подготовки из упр. 8.10 главы 8. В этой базе данных содержится информация о схеме подготовки и обучения специалистов внутри некоторой компании.
Для каждого курса обучения (СООНБЕ) в базе данных содержится описание отдельных потоков, организованных для его изучения (ОГГЕЕ1НО). Для каждого потока хранятся данные обо всех его слушателях (ЕННОЬЬИЕНТ) и преподавателях (ТЕАСНЕЕ). Кроме того, в базе содержатся сведения о сотрудниках компании.
Реляционную версию базы данных можно описать следующим образом. СООНБЕ ( СООЕБЕз, ПТЬЕ ОГГЕН1НО ( СООЕБЕФ, ОГРА, ОГГОАТЕ, ЬОСАПОН ) ТЕАСНЕЕ ( СООЕБЕ$, ОГГГ, ЕИРФ ЕННОЬЬМЕНТ ( СООЕБЕЗ, ОГГ(], ЕМРГ, ОНАОЕ ) ЕМР ( ЕМРМ, ЕНАИЕ, ЯАЬАЕГ, РОБ1ПОН ) На рис. 24.6 показана диаграмма связей для рассматриваемой базы данных. Более подробно она описана в главе 8, в упражнениях и ответах к упражнениям.
Часть $7. Объектные и объектно-реляционные базы данных Рис. 24.б. Диаграмма связей для образовательной базы данных Определение данных Теперь перейдем к определению данных на языке ОРА[. для образовательной базы данных. Ниже приводится первое определение объектного класса ЕМР, описывающего сотрудников (для удобства строки этого определения пронумерованы). 1 ОВЮЕСТ ЯОВСЬАЯЯ : 'ЕМР' 2 1НЯТЧАННАМЕЯ ! 4[ 'ЕМР4', 'ЕНАМЕ', 'РОЯ1ТХОН' ] 3 СОНЯТРА1НТЯ : 4[ 4[ ФЕИРФ, ЯТК1НЯ ] 4 [ 4ЕНАМЕ, ЯТК1НО 5 [ 4РОЯ1ТТОН, ЯТК1НО ] ] Пояснения. В строке 1 определен объектный класс ЕИР, производный от встроенного класса ОВЮЕСТ. (Согласно терминологии языка ОРА[.
в строке 1 отсылается сооби!ение объекту ОВаЕСТ с запросом выполнить метод ЯОВСВАЯЯ, причем с помошью предложений 1НЯТУАКНАМЕЯ и СОНЯТАА1НТЯ указываются параметры вызова этого метода. Для определения нового класса (как и всего прочего) необходимо отослать сообшение объекту.) В строке 2 указывается, что объекты класса ЕМР имеют три закрытые переменные экземпляра — ЕМР4, ЕНАМЕ и РОЯ1Т1ОН, а в строках 3-5 на эти переменные экземпляра накладываются ограничения, указываюшие, что они должны содержать объекты класса ЯТЕ1НО. Замечание. В настоящей главе опускаются чисто синтаксические подробности, несушественные для преследуемых нами целей (например, вездесушие знаки "$", присутствующие в приведенном выше примере).
Подчеркнем, что переменные экземпляра ЕМР$, ЕНАМЕ и РОЯ1Т1ОН вЂ” закрытые переменные для класса ЕМР, поэтому доступ к ним по именам допустим только в методах этого класса. В качестве примера ниже даны определения методов "получить и установить", т.е. методов, позволяющих выбрать и обновить номера служащих (здесь символ """ можно читать как "возвратить"). ИЕТНОО : ЕМР ОЕТ ЕМР4 тЕМР4 963 Глава 24. Объектные базы данных МЕТН00 : ЕИР ЯЕТ ЕМР№ г ЕМР№ РАЕМ ЕМР№ := ЕМР$ РАЕМ Ф В следующем подразделе о методах определения мы поговорим подробнее. А сейчас рассмотрим определение класса описания курса СООКБЕ. 1 ОВЮЕСТ БОВСЬАББ : 'СООВЯЕ' 2 1НЯТЧАВНАМЕЯ : $[ 'СООКБЕ$', 'Т1ТЬЕ', 'ОРРЕВ1НОБ' ] 3 СОНЯТВА1НТЯ г $[ $[ №СООКБЕ№, ЯТК1НО ] 4 №Т1ТЬЕ, ЯТК1НБ ] 5 [ №ОРРЕК1НОЯ, ОБЕТ ] ] Пояснения.
В строке 5 определена переменная ОРРЕВ1НОБ, которая содержит объект класса ОЯЕТ, или, точнее, идентификатор объекта класса ОЯЕТ. Выражаясь неформально, переменная ОРРЕКХНОЯ обозначает множество всех потоков для данного курса. Иначе говоря, связь "курс — поток" моделируется с помощью иерархии вложения, в которой потоки концептуально содержатся внутри соответствующего курса. Определение класса ОБЕТ будет дано ниже, а определение класса потока ОРРЕВ1НБ может быть записано так. 1 ОБЪЕСТ ЯОВСЬАЯБ : 'ОРРЕК1НБ' 2 1НЯТЧАКНАМЕБ г 4[ 'ОРР4', 'ООАТЕ', 'ЬОСАТ10Н', 3 'ЕНК01ЬМЕНТЯ', 'ТЕАСНЕВБ' 4 СОНЯТВА1НТЯ : $[ $[ $0РР$, БТК1НО ] 5 [ $00АТЕ, ОАТЕТ1МЕ ], б [ №ЬОСАТ10Н, БТВХНЯ 7 [ $ЕНВОЬЬМЕНТБ, НЯЕТ ], 8 [ №ТЕАСНЕКЯ, ТЯЕТ ] ] Пояснения.
В строке 7 определяется закрытая переменная экземпляра ЕНКОЬЬМЕНТЯ, содержащая идентификатор объекта класса НЯЕТ, Говоря неформально, переменная ЕНВ01ЛМЕНТЯ описывает множество всех слушателей в данном потоке. Аналогично пере- менная ТЕАСНЕКБ описывает множество всех преподавателей потока, Следовательно, здесь вновь используется представление иерархии вложения, Определения классов НЯЕТ и ТБЕТ будут даны ниже. Определение класса слушателей ЕНКОЬЬМЕНТ может быть запи- сано следующим образом.
1 ОБЪЕСТ ЯОВСЬАЯБ : 'ЕНВОЬЬМЕНТ' 2 1НЯТЧАВНАИЕБ : 4[ 'ЕМР', 'ОКАОЕ' ] 3 СОНЯТВА1НТЯ : 4[ 4[ №ЕМР, ЕМР ] 4 [ №ОВАОЕ, ЯТК1НЯ ] ], Пояснения. В строке 3 определяется закрытая переменная экземпляра ЕМР, содержащая идентификатор объекта класса ЕМР, представляющий отдельного сотрудника, который является слушателем курса.
Зииечиние. Чтобы продолжить иерархию вложения, объект ЕИР помещается в объект ЕНКОЬЬМЕНТ. Однако здесь можно заметить асимметрию: зачисление сотрудника на обучение в разные потоки описывается как отношение типа "многие ко многим", однако члены этого отношения, сотрудники и потоки, обрабатываются совершенно по-разному. 964 Часть РХ Объекпгные и объектно-реляционные базы банных И наконец рассмотрим объекты, представляющие преподавателей. В нашем примере следует несколько отвлечься от исходной реляционной версии базы данных и рассмотреть преподавателей (ТЕАСНЕК) как подкласс класса сотрудников (ЕМР).
1 ЕМР ЯОВСВАББ : 'ТЕАСМЕК' 2 ХКЯТЧАККАМЕБ : $[ 'СООКЯЕБ' ) 3 СОКЯТКАХКТЯ : $[ [[[ [[СООКЯЕЯ, СВЕТ [ [ Пояснения. В строке! определен объектный класс ТЕАСНЕК, который является подклассом ранее определенного класса ЕМР (иначе говоря, ТЕАСНЕК и1ЯАн ЕМР). Таким образом, каждый отдельный объект ТЕАСМЕК имеет закрытые переменные экземпляра ЕМР[[, КВАМЕ и РОБ1Т1ОК (которые унаследованы от класса ЕМРа), а также переменную СООКЯЕЯ, которая содержит идентификатор объекта класса СВЕТ.
Объект СВЕТ определяетмножество всех курсов, которые ведет конкретный преподаватель. Каждый объект ТЕАСНЕК также наследует все методы класса ЕМР. Как уже отмечалось, в предыдущих определениях классов предполагалось существование нескольких классов коллекций (например, коллекций объектов потоков, учеников, преподавателей и т.д.), но они не были определены. Теперь следует дать точное определение коллекции каждого класса, а именно: ЕБЕТ, СВЕТ, ОЯЕТ, КБЕТ и ТБЕТ. Например, объект класса СВЕТ будет состоять из множества идентификаторов отдельных объектов класса СООКБЕ.
Ниже даются определения всех этих классов, начиная с класса ЕБЕТ. 1 ЯЕТ ЯОВС1АЯБ е 'ЕЯЕТ' 2 СОКЯТКАХКТЯ : ЕМР Пояснения. В строке ! лается определение класса ЕЯЕТ, который является подклассом встроенного класса БЕТ. В строке 2 на объекты класса ЕЯЕТ накладывается ограничение: они должны быть множествами идентификаторов объектов класса ЕМР. В общем случае может существовать произвольное число объектов класса ЕЯЕТ, но в данной ситуации будет создан только один объект (подробности приводятся в следующем подразделе), который будет содержать множество идентификаторов всех объектов класса ЕМР.