Программирование >>  Хронологические базы данных 

1 ... 308 309 310 [ 311 ] 312 313 314 ... 348


ку в объектных системах не всегда четко прослеживается разница между значениями и переменными (т.е. между неизменяемыми и изменяемыми объектами), возникают проблемы различения значения и возможного замещения переменной (этот вопрос обсуждается в главе 19). Возможность применять один и тот же метод для объектов класса X и класса Y называется полиморфизмом.

Обычно объектные системы поставляются с определенной встроенной иерархией классов. Например, в системе OPAL (см. раздел 24.4) каждый класс рассматривается как подкласс некоторого уровня встроенного класса OBJECT (поскольку все является объектами ). Встроенные подклассы класса OBJECT включают классы BOOLEAN, CHAR, INTEGER, COLLECTION и др. Класс COLLECTION, в свою очередь, включает подкласс BAG, а класс BAG содержит класс SET и т.д. и т.п.

Наконец, в некоторых системах, кроме одиночного наследования, в той или иной форме поддерживается множественное наследование. Однако автору не известно ни одной системы, которая поддерживала бы наследование кортежей или отношений (как одиночное, так и множественное) в смысле, который подразумевался в [3.3].

24.4. Простой пример

в предыдущей главе были представлены базовые концепции объектного подхода. В данной главе на простом примере последовательно демонстрируется применение этих идей на практике, а именно - как определяется объектная база данных, как она пополняется данными, как в ней выполняются операции извлечения и обновления данных. В рассматриваемом примере используются объектная СУБД GemStone (разработка корпорации GemStone Systems) и ее язык запросов OPAL [24.14]. Язык OPAL, в свою очередь, основывается на языке Smalltalk [24.26], одном из наиболее истинно объектных языков (поэтому он здесь и используется).

Замечание Необходимо добавить, что язык Smalltalk появился на рынке раньше, чем язык С++, и гораздо раньше, чем язык Java. Однако несмотря на это два последних языка являются менее чистыми объектными языками, чем Smalltalk.

В качестве примера воспользуемся упрошенной версией базы данных профессиональной подготовки из упр. 8.10 главы 8. В этой базе данных содержится информация о схеме подготовки и обучения специалистов внутри некоторой компании. Для каждого курса обучения (COURSE) в базе данных содержится описание отдельных потоков, организованных для его изучения (OFFERING). Для каждого потока хранятся данные обо всех его слушателях (ENROLLMENT) и преподавателях (TEACHER). Кроме того, в базе содержатся сведения о сотрудниках компании. Реляционную версию базы данных можно описать следующим образом.

COURSE { COURSEI, TITLE }

OFFERING { COURSE*, OFF#, OFFDATE, LOCATION } TEACHER { COURSE*, OFF#, EMP* } ENROLLMENT { COURSE*, OFF*, EMP*, GRADE } EMP { EMP*, ENAME, SALARY, POSITION }

Ha рис. 24.6 показана диаграмма связей для рассматриваемой базы данных. Более подробно она описана в главе 8, в упражнениях и ответах к упражнениям.




COURSE

OFFERING

ENROLLMENT

TEACHER

EMPLOYEE

Puc. 24.6. Диаграм.ма связей для образовательной базы данных

Определение данных

Теперь перейдем к определению данных на языке OPAL для образовательной базы данных. Ниже приводится первое определение объектного класса ЕМР, описывающего сотрудников (для удобства строки этого определения пронумерованы).

1 OBJECT SUBCLASS : ЕМР

2 INSTVARNAMES : [ EMPi, ENAME, POSITION ]

3 CONSTRAINTS : l[ l[ lEMPl, STRING ] ,

4 [ #ENAME, STRING ],

5 [ #POSITION, STRING ] ] .

Пояснения. В строке 1 определен объектный класс ЕМР, производный от встроенного класса OBJECT. (Согласно терминологии языка OPAL в строке 1 отсылается сообщение объекту OBJECT с запросом выполнить метод SUBCLASS, причем с помощью предложений INSTVARNAMES и CONSTRAINTS указываются параметры вызова этого метода. Для определения нового класса (как и всего прочего) необходимо отослать сообщение объекту.) В строке 2 указывается, что объекты класса ЕМР имеют три закрытые переменные экземпляра- ЕМР#, ENAME и POSITION, а в строках 3-5 на эти переменные экземпляра накладываются ограничения, указывающие, что они должны содержать объекты класса STRING.

Замечание. В настоящей главе опускаются чисто синтаксические подробности, несущественные для преследуемых нами целей (например, вездесущие знаки присутствующие в приведенном выще примере).

Подчеркнем, что переменные экземпляра ЕМР#, ENAME и POSITION - закрытые переменные для класса ЕМР, поэтому доступ к ним по именам допустим только в методах этого класса. В качестве примера ниже даны определения методов получить и установить , т.е. методов, позволяющих выбрать и обновить номера служащих (здесь символ можно читать как возвратить ).

METHOD : ЕМР GET EMPi ~ЕМР#



METHOD : EMP

SET EMP* : EMP# PARM EMP# := EMP PARM

В следующем подразделе о методах определения мы поговорим подробнее. А сейчас рассмотрим определение класса описания курса COURSE.

1 OBJECT SUBCLASS : COURSE

2 INSTVARNAMES : #[ COURSE*, TITLE, OFFERINGS ]

3 CONSTRAINTS : t[ l[ *COURSE#, STRING ] ,

4 [ ITITLE, STRING ] ,

5 [ iOFFERINGS, OSET ] ] .

Пояснения. В строке 5 определена переменная OFFERINGS, которая содержит объект класса OSET, или, точнее, идентификатор объекта класса OSET. Выражаясь неформально, переменная OFFERINGS обозначает множество всех потоков для данного курса. Иначе говоря, связь курс - поток моделируется с помощью иерархии вложения, в которой потоки концептуально содержатся внутри соответствующего курса. Определение класса OSET будет дано ниже, а определение класса потока OFFERING может быть записано так.

1 OBJECT SUBCLASS : OFFERING

2 INSTVARNAMES : *[ OFFi, ODATE, LOCATION,

3 ENROLLMENTS, TEACHERS ]

4 CONSTRAINTS : *[ *[ iOFFi, STRING ] ,

5 [ iODATE, DATETIME ],

6 [ iLOCATION, STRING ],

7 [ iENROLLMENTS, NSET ],

8 [ iTEACHERS, TSET ] ] .

Пояснения. В строке 7 определяется закрытая переменная экземпляра ENROLLMENTS, содержащая идентификатор объекта класса NSET. Говоря неформально, переменная ENROLLMENTS описывает множество всех слушателей в данном потоке. Аналогично переменная TEACHERS описывает множество всех преподавателей потока. Следовательно, здесь вновь используется представление иерархии вложения. Определения классов NSET и TSET будут даны ниже. Определение класса слушателей ENROLLMENT может быть записано следующим образом.

1 OBJECT SUBCLASS : ENROLLMENT

2 INSTVARNAMES : i[ EMP, GRADE ]

3 CONSTRAINTS : i[ i[ iEMP, EMP ] ,

4 [ IGRADE, STRING ] ].

Пояснения. В строке 3 определяется закрытая переменная экземпляра ЕМР, содержащая идентификатор объекта класса ЕМР, представляющий отдельного сотрудника, который является слушателем курса.

Замечание. Чтобы продолжить иерархию вложения, объект ЕМР помешается в объект ENROLLMENT. Однако здесь можно заметить асимметрию: зачисление сотрудника на обучение в разные потоки описывается как отношение типа многие ко многим , однако члены этого отношения, сотрудники и потоки, обрабатываются совершенно по-разному.



1 ... 308 309 310 [ 311 ] 312 313 314 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика