Объектные модели данных
Создаём класс
Создадим простейший класс с единственным атрибутом Name. Запускаем Cache Studio. Выбираем в меню пункт Файл-Создать (рисунок 10.10).
Затем выделяем иконку "Класс Cache" и нажимаем кнопку "OK". Появляется первый экран мастера создания класса (рисунок 10.11).
Пакет, который предлагается указать, служит для объединения некоторой совокупности родственных классов. Пакеты %SYS, DOCBOOK, SAMPLES и USER создаются СУБД при инсталляции.
Оставляем имя пакета по умолчанию (User) и указываем имя класса. Можно дополнить описание класса комментарием, который как всегда будет проигнорирован компилятором. Кнопкой "Далее >" переходим к следующему шагу (рисунок 10.12).
Здесь мастер предлагает нам выбрать тип объекта (таблица 10.3).
Persistent | Тип объектов хранимых в базе |
---|---|
Serial | встраиваемые объекты; экземпляры классов этого типа могут сохраняться в базе только в случае включения в хранимые объекты |
Registered | тип объектов, которые могут существовать только в оперативной памяти без возможности их сохранения на диске |
Abstract | тип объектов у которых не может быть экземпляров |
Data Type (тип данных) | указывает на то, что данный класс будет типом данных |
CSP | класс типа CacheServerPage, предназначенный для построения серверных страниц Cache |
Extends (расширяет) | указывает на то, что данный класс является наследником некоторого уже существующего типа или типов; организовать множественное наследование можно перечислив через запятую имена классов родителей |
Выбираем тип Persistent и кнопкой "Далее >" продолжаем создание класса (рисунок 10.13).
В последнем окне, изображенном на рисунке 10.15, мастер предлагает указать дополнительные характеристики. Их значения станут частично понятными из дальнейшего изложения, а пока давайте оставим их пустыми и завершим создание кнопкой "Готово".
Пополним созданный класс свойством Name. Для этого выбираем пункт меню Класс > Добавить > Новое свойство для запуска мастера (рисунок 10.14).
Указываем имя свойства Name и, если есть желание, добавляем комментарий.
Идём далее (рисунок 10.15).
Выбираем тип создаваемого свойства.
В Cache поддерживаются несколько типов свойств:
- Единичное значения типа. Простые типы данных (%String, %Integer, %Date и т.д.) наследуют свое поведение от класса типов данных.
- Коллекция типа. Объектные базы, в отличие от реляционных, могут хранить множество значений в одном свойстве. В Cache поддерживаются два типа коллекций — массив и список. Элементы массива имеют индекс, уникально характеризующий элемент в массиве. Элемент списка определяется номером его позиции в списке.
- Отношение. Связи представляют собой двунаправленные зависимости между хранимыми объектами. В Cache реализовано два типа связей — Parent - Child (родитель - потомок) и One - Many (один-ко-многим). Первая связь зависимая, то есть при удалении предка, автоматически удаляются все наследники. Связь One-Many независимая связь, поэтому удаление предка при существовании наследников приводит к ошибке.
Логично предположить, что свойство Name является строкой. Поэтому не меняя типа переходим к следующему шагу (рисунок 10.16).
Здесь необходимо небольшое пояснение. Первый пункт аналогичен заданию свойства NOT NULL для полей SQL-таблиц, второй — создает индекс для определяемого свойства, третий — аналогичен ограничению UNIQUE , четвертый указывает на то, что данное свойство является вычислимым, то есть его значение вычисляется во время обращения к нему. Ниже будет установлено, что при создании класса определяется соответствующая ему таблица. Её имя может отличаться от имени класса. Если необходимо, чтобы имена свойств и соответствующих им столбцов таблиц не совпадали, укажите имя SQL-столбца.
Характеристики свойства по умолчанию оставим без изменения. Остаётся ещё раз нажать кнопку "Далее >". Появится список параметров созданного свойства (рисунок 10.17).
Изменим в нём значение параметра MAXLEN "20". На последнем шаге мастер предлагает переопределить методы доступа к свойствам Get и Set. Мы не станем этого делать и завершим создание свойства Name нажатием на кнопку "Готово" (рисунок 10.18).
Теперь в окне Studio мы получим следующий текст
Class User.A Extends %Persistent { Property Name As %String(MAXLEN = 20); }