СТАТЬЯ 23.07.01

Обзор объектно-ориентированной СУБД Jasmine

Александр Зашихин,
Computer Associates
Cтатья была опубликована на сайте www.citforum.ru

1. Введение

Сегодня, чтобы быть конкурентноспособными, многие предприятия все чаще обращаются к Internet-приложениям и естественно - к мультимедийным типам данных. Пользователям современных предприятий уже недостаточно простых типов, им необходимо работать с изображениями, анимацией, звуком, текстами и т.п.

Многие понимают, что реляционная технология мало пригодна для работы со сложными объектами мультимедийных приложений. Возникают вопросы:

Еще в середине 1997 года, когда реляционные базы данных были на подъеме, ЦКБ АСУ НЕФТЕПРОДУКТ (Генеральный директор Веденеев Геннадий Иванович т. 178-34-10), с целью ответить на эти вопросы, а так же, как упростить а значит и ускорить процессы создания новых приложений и повысить их качество, как снизить затраты на их сопровождение и эволюцию, решило обратиться к объектным базам данных. Это не было гаданием на кофейной гуще, поскольку руководство ЦКБ уже имело определенный опыт работы с объектными базами данных. Еще в 1986 году по инициативе и при непосредственном участии Веденеева Г.И. в Краснодарском, Ставропольком краях и Ростовской области были внедрены системы "АСУ реализация н/п" (всего около 15 систем), уже тогда имевших клиент/серверную архитектуру, а в качестве базы данных - объектную СУБД !, разработанную одним из Ленинградских институтов. В 1997 году объектные базы данных естественно не были новшеством: Itaska (IBEX), Jasmine (Computer Associates), Matisse (ODB), Object Store (ODI), Ontos (Ontos), O2 (O2), Poet (Poet), Versant (Versant) и.т.д. Другой вопрос, сколь мощны были тогда наши компьютеры и как сильно мы нуждались в Internet(е) и мультимедийных приложениях ? Выбор был остановлен на Jasmine. В начале 1998 года Московское представительство Computer Associates (CA) (Менеджер Кузнецов Сергей Сергеевич т. 937-48-50) любезно предоставило ЦКБ АСУ НЕФТЕПРОДУКТ первую коммерческую версию объектной базы данных Jasmine. Последовательно были опробованы Jasmine v1.1 и v1.21. Сегодня это уже Jasmine ii (intelligent infrastructure).

Прежде чем начать обзор Jasmine, бегло обозначим основные термины и понятия, которые используют и к которым пришли в ЦКБ в процессе практического использования именно Jasmine. Терминологию можно оспаривать.

2. Терминология

Объект в общем смысле - это все, чему можно дать название, т.е. практически все, что угодно.

Объектный идентификатор (OId - Object Identifier) - это нечто, уникально идентифицирующее объект в базе данных.

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

Свойства бывают двух типов: свойства-атрибуты и свойства-связи, т.е. связь в Jasmine - это тоже свойство!

Необходимо видеть разницу между свойством класса и свойством экземпляра в классе. Свойство класса определяют именем и типом, а свойство экземпляра в классе заполняют значением (пояснить).

Метод. Физически - это код, реализующий некоторый алгоритм и записанный на одном из алгоритмических языков(!), называемых базовым, с включением кода на языке запросов в базу данных. С другой стороны, метод - это действие, которое может выполнить некоторый объект (а какой объект, - мы узнаем позже) при получении некоторого сообщения, обнаруживая тем самым некоторое поведение.

Приложение - это коллекция (набор) сцен (окон) с которыми работает пользователь.

Смысл создания мультимедийного приложения заключается в визуальном конструировании его сцен. Чтобы сконструировать сцену, необходимо сначала на нее "отбуксировать" (переместить) все необходимые объекты, а затем задать их поведение, теперь уже как элементов сцены.

Элементами сцены могут быть:

Локальными элементами называются поля редактирования, кнопки, элементы ActiveX и т.д.),

Запрос. Физически - это код, реализующий алгоритм некоторого запроса в базу данных и полностью записанный, естественно, на языке запросов в базу данных. С другой стороны, запрос - это объект в общем смысле, который может быть "отбуксирован" на сцену, где и задается его поведение.

Поведение в Jasmine - это совокупность сообщения получаемого некоторым элементом сцены и действия выполняемого этим элементом.

Сообщение - это сигнал, уведомляющий элемент сцены о необходимости выполнения некоторого действия.

Действие - это реакция (ответ) элемента сцены на полученное сообщение.

Jasmine предоставляет большой набор как сообщений, так и действий (поряка двадцати только категорий сообщений и более двадцати категорий действий). Именно действиями являются методы!

Объектом в Jasmine называется экземпляр в классе с его свойствами-атрибутами, свойствами-связями и методами. Понятно, что о поведении речи не идет.

Между классами объектной базы данных Jasmine существует два вида отношений: наследования и агрегации.

Отношение наследования (общее - частное, или is - a) возникает между классами при их создании путем наследования и изображается в виде стрелки, идущей от потомка к его родителю означая, что потомок унаследовал свойства и методы (действия) родителя. Иерархическое дерево классов объектной базы данных напоминает структуру иерархической базы данных. Наследование считается множественным, когда потомок имеет более одного родителя.

Некоторые эксперты советуют никогда не использовать множественное наследование на том основании, что проблем может быть больше, чем выгоды. В Jasmine при использовании множественного наследования необходимо соблюдать только одно требование: родительские классы не должны иметь свойств и методов с одинаковыми именами.

Отношение агрегации (целое-часть, или has-a) возникает между классами при добавлении в класс свойства-связи и изображается в виде линии идущей от этого свойства, обозначаемого жирной точкой к другому классу означая, что свойство-связь из класса (целое или агрегат) ссылается на другой класс (часть), раскрывающий содержание свойства-связи. Свойства-связи мы рассмотрим несколько позже.

Эволюция - это изменение проекта системы или приложения в связи с изменившимися требованиями.

Сопровождение - это исправление допущенных ошибок как в проекте системы, так и в приложениях.

Сохранение - использование любых средств для поддержания жизни в дряхлеющей системе.

3. Мощность

В Jasmine можно делать все, что и в реляционных базах данных!

3.1. Свойства

Итак, класс в Jasmine - это шаблон свойств и методов, позволяющий группировать экземпляры с идентичными именами и типами свойств.

В Jasmine меется два вида свойств:

Свойство-атрибут (имея в виду классы) - это свойство, которое может быть определено:

1. Литеральными типами:

Decimal десятичный тип ( Decimal[1,0] - Decimal[18,18] )
Integer целый тип ( - 2 147 483 648 - + 2 147 483 647 )
Real вещественный тип ( + 4.941e -324 - + 1.797e +308 )
String строка ( до 65 536 символов )
ByteSequence произвольные двоичные данные  
Date дата ( 1 янв. 1582г. - 31 дек. 2382г.)
Boolean логический тип ( TRUE, FALSE )

2. Мультимедийными типами, базовыми из которых являются:

Audio звук (*.WAV)
Video видео (*.AVI)
Text текст (*.TXT, *.HTM)
Bitmap изображение (*.BMP, *.GIF, *.JPG, *.TGA, *.TIF)

Обычно упоминают семь мультимедийных типов:
звук, видео, текст, изображение, графика, анимация, составной.

Недостающие мультимедийные типы (три последних), а так же еще около пяти с лишним десятков других мультимедийных типов, Вы можете взять в семействе классов mediaCF. Но их можно получить и из базовых. Далее мы узнаем, как можно получить анимационную последовательность из базового типа Bitmap.

Свойство-связь надо рассматривать комплексно:

С одной стороны, свойство-связь класса указывает на некоторый класс, с другой стороны, значения этого свойства-связи ссылаются на конкретные экземпляры указанного класса. Мы помним, что свойство класса определяется типом и именем, а свойство экземпляра в классе заполняется значением.

Из рисунка видно, что в классе Automobiles свойство-связь определено именем motors и типом Motors, указывающим на некоторый класс Motors (CA рекомендует давать свойствам-связям имена классов, на которые они ссылаются, только с маленькой буквы), а заполненные значения свойства-связи motors указывают на конкретные экземпляры класса Motors, т.к. являются объектными идентификаторами экземпляров класса Motors (пояснить). В классе Motors, в свою очередь, тоже может быть свойство-связь (например, automobiles), указывающее на класс Automobiles. Это к вопросу о реляционных связях типа "многие ко многим" . . . и никаких при этом связующих таблиц (пояснить).

Свойство коллекции значений

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

В случае атрибутов литерального типа в реляционной базе данных возможны следующие записи:


Резервуар1  ТРК1 . . .

Резервуар1  ТРК3 . . .

Резервуар2  ТРК2 . . .

Резервуар2  ТРК4 . . . и т.д.

Свойство коллекции значений объектной базы данных позволяет представить экземпляры более просто:


Резервуар1  ТРК1,ТРК3 . . .

Резервуар2  ТРК2,ТРК4 . . . и т.д.

В реляционных базах данных, чтобы идентифицировать подобные записи, приходится прибегать к сегментированным первичным ключам. Последние, в свою очередь, приводят к усложнению связей между таблицами и SQL-запросов. Вспомним, что заполнить запись в реляционной базе данных мы можем двумя командами Insert и Update. При этом, команда Insert обязательно должна быть первой и единственной, с ее помощью заполняются атрибуты, заданные как уникальные, обязательные, первичный ключ. Следующие команды Update заполняют все остальные атрибуты записи, включая и те, что вычисляются из значений, вставленных командой Insert. Ну а если вычисляемый атрибут из числа обязательных или уникальных? Вот тут начинают появляться новые атрибуты в виде Zip-кодов, новые связи, а с ними и . . . перепроектирование системы.

В объектной базе данных Jasmine нет даже первичных ключей. Небезызвестное свойство name нельзя считать аналогом первичного ключа, поскольку это свойство может иметь коллекцию одинаковых значений. Даже в случае полной идентичности значений всех свойств и методов нескольких экземпляров - это разные экземпляры. И возможно это только благодаря объектным идентификаторам, значения которых можно и не знать.

Если говорить о мультимедийных типах, то анимационная последовательность - это и есть коллекция значений мультимедийного типа Bitmap (какие типы файлов он поддерживает, мы знаем). В коллекции можно использовать даже разные типы файлов!

Следует различать мультимедийный тип Video и коллекцию мультимедийных типов Bitmap. В случае коллекции каждый тип (кадр) - это отдельный объект, характеристики которого и порядок размещения в коллекции можно изменять. Хотя смотрятся эти типы одинаково.

Свойство может быть:

Уровня экземпляра - это когда значение данного свойства для разных экземпляров класса может различаться, т.е. у каких-то экземпляров оно может иметь и одинаковое значение.

Уровня класса - это когда значение данного свойства для разных экземпляров класса одно и то же.

Свойство, как и в реляционных базах данных, может быть:

Уникальным (Unique) - это когда значение этого свойства для разных экземпляров класса всегда различно. Необходимо помнить, что уникальность:

Обязательным (Mandatory) - это значит, что при добавлении экземпляра в класс это свойство должно иметь значение. Обязательность, как и уникальность, наследуется.

Кроме того, говоря о значениях свойств, необходимо отметить, что в Jasmine существует понятие значения NIL. Но это не то же самое, что NULL в реляционной базе данных. NULL - это значит нет значения, а NIL - это неизвестно, есть значение или нет.

Продолжение статьи

Дополнительную информацию Вы можете получить в компании Interface Ltd.

Отправить ссылку на страницу по e-mail
Обсудить на форуме Computer Associates


Interface Ltd.
Тel/Fax: +7(095) 105-0049 (многоканальный)
Отправить E-Mail
http://www.interface.ru
Ваши замечания и предложения отправляйте автору
По техническим вопросам обращайтесь к вебмастеру
Документ опубликован: 23.07.01