Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб1_ Сосинская.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
958.73 Кб
Скачать

7.3. Объектная модель Caché.

Большинство сегодняшних разработчиков с удовольствием бы воспользовались преимуществами объектной технологии при проектировании новых прикладных программ. Однако на практике полная свобода выбора технологии встречается чрезвычайно редко. Как правило, в компании имеется значительный объем нaрaботок, опирающихся на реляционные СУБД, а значит, реляционную модель дaнных обязательно приходится учитывать при разработке новых приложений, интегрируемых в существующую информационную среду. Другим препятствием на пути применения объектно-ориентированных подходов в информационной технологии (ИТ) является необходимость в организации запросов к базе данных. Структурированный язык запросов (SQL) - это широко распространенный стандарт, от котoрoгo сильно зависят как многочисленные интерфейсы прикладного программирования, так и использующие их разработчики. SQL стал неотъемлемой частью таких важных функций ИТ, как генерация отчетов п анализ данных и обычно является компонентом высокопроизводительных систем обработки транзакций (OLTP).

Поэтому многие архитекторы баз данных и разработчики приложений оказываются перед выбором: либо SQL, либо объекты. Либо принимается решение, что объектная база данных лучше отвечает постановке задачи (с практически неизбежным началом разработки приложения «с нуля»), либо сохраняются инвестиции в реляционные СУБД (в этом случае преимущества объектной технологии ограничиваются изначально).

Для разрешения этой дилеммы в Cache предлагается новый способ интеграции двух миров на основе единой архитектуры данных. В рамках этой архитектуры существует единое описание объектов и таблиц, отображаемых непосредственно в многомерные структуры ядра базы данных, ориентированного на обработку тpaнзакций. Имеющиеся серверы Cache Objects и Cache SQL предоставляют в распоряжение разработчика все наиболее популярные интерфейсы, посредством которых и унаследованные реляционные, и новые объектно-ориентированные прикладные системы получают равноправный доступ к данным.

Объектная модель Cache соответствует стандарту ОDMG (Object Data Мапаgеmепt Group). При этом основные операции Cache Objects базируются на определении классов объектов в Cache Object Architect [или непосредственно на языке CDL (Class Dеfiпitiоп Lапguаgе)] и последующей компиляции в исполняемый код (Ruп Time). При создании, сохранении, загрузке и манипулировании экземплярами объектов Cache в полном объеме поддерживает все основные

концепции современной объектной технолоrии:

Наследование означает способность к порождению класса объектов из другого клаcca. Новый унаследованный класс находится с родительским классом в отношении «Х есть Super Х» ("Х is а Super Х» ) и наследует все общие свойства и мeтоды. Унаследованные элементы могут в дальнейшем конкретизироваться, более тoгo, к ним мoгут добавляться новые методы и свойства, действующие лишь в рамках производных классов. Cache; Objects обладает также множественным

наследованием, при котором класс происходит одновременно от нескольких poдительских классов.

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

И наконец, xpaнимость - важнейшее свойство объектной базы данных означает, что объекты длительное время хранятся в дисковой памяти и при необходимости могут оттуда извлекаться. Система СасЬе поддерживает несколько видов xрaнения объектов: автоматическое хранение в мноrомерной базе данных Cache, xpaнение в любых структурах, определенных пользователем, и храпение в таблицах внешних реляционных баз данных, доступных через шлюз Cache SQL Gateway.

Разработчик всегда может выбрать оптимальный способ хранения для каждого класса.

Основные компоненты СУБД Caché:

• Многомерное ядро системы, ориентированное на работу с транзакциями, позволяет реализовать развитую технологию обработки транзакций и разрешения конфликтов. Блокировка данных производится на логическом уровне. Это позволяет учитывать особенность многих транзакций, производящих изменения небольшого объема информации. Кроме этого, в Caché реализованы атомарные операции добавления и удаления без проведения блокировки, в частности, это применяется для счетчика идентификаторов объектов.

• Сервер Caché Objects. Представление многомерных структур данных ядра системы в виде объектов, инкапсулирующих как данные, так и методы их обработки. Позволяет реализовать объектный доступ к данным.

  • Сервер Cache SQL. Представление многомерных структур данных в виде реляци­онных таблиц. Позволяет реализовать реляционный доступ к данным.

  • Сервер прямого доступа (Cache Direct). Предоставление прямого чрезвычайно эф­фективного доступа к многомерным структурам данных ядра системы.

Саche Objects состоят из следующих компонентов (см. рис. ):

  • Сасhе Object Architect - интегрированная GUI - среда разработчика для определения классов, включая их свойства и методы. Эти определения могут быть экспортированы в файлы в формате CDL, который может использоваться также и напрямую для описания классов Cache.

  • Библиотека классов (Class Dictionary) - универсальный репозиторий, coдepжащий определения всех классов Cache. Остальные компоненты Cache Objects взаимодействуют с библиотекой классов через API. Библиотека классов может пополняться с помощью Сасhe Object Architect либо путем импорта из файлов в формате CDL, DDL и др. Точно так же она может экспортироваться в различные форматы. .

  • Компилятор классов компилирует определения классов в программный код, который может выполняться в виде модуля Run-Time.

  • Макропроцессор обрабатывает каждую строку исходноuо кода на языке Саche ObjectScript, заменяя все макровызовы и предложения встроенного SQL на выполняемый код Сасhе ObjectScript.

  • СасЬе ObjectServer lдля ActiveX - сервер автоматизации ActiveX, предоставляющий объект Cache

внешнему миру в виде обычных объектов ActiveX. Это позволяет работать с объектами Сасhе из внешних инструментальных сред разработки, таких как Visual Basic, С++ и др., получая доступ к их свойствам и возможность выполнения их методов.

  • СасЬе ObjectServer для Java открывает доступ к объектам: Сасhе приложениям, написанным на языке Java.

 

Среда разработки Caché

    Для разработки приложений и работы с базами данных система Caché предлагает следующий набор утилит:

  • Редактор конфигурации

  • Studio

  • Terminal

  • Проводник

  • Панель управления

  • SQL-менеджер

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

Утилита «Редактор конфигурации» предназначена для задания и просмотра следующих параметров конфигурации:

  • системной информации

  • рабочих областей

  • баз данных

  • сетевых соединений

  • CSP-приложений

  • лицензии Caché

    Большинство параметров конфигурации выполняются динамически и не требуют перезапуска системы Caché.

    «Редактор конфигурации» может использоваться для создания базы данных. База данных Caché это файл с именем Cache.dat. По умолчанию база данных Caché располагается в директории C:\CacheSys\MGR\User. Для создания своей базы данных в другой директории на вкладке «Базы данных» Редактора конфигурации по кнопке «Мастера…» выбирается соответствующий мастер. По умолчанию начальный размер базы равен 1 МБ. На рис.1 изображено окно «Редактора конфигурации».

На рис. 2 изображено окно выбора мастеров.

    Созданная база данных связывается со своей рабочей областью (namespace), которая так же может быть создана с помощью Редактора конфигурации, для этого необходимо выбрать мастер «Создание области». По умолчанию разработка ведется в рабочей области User.

    Caché Studio это интегрированная, визуальная среда создания объектно-ориентированных баз данных и Web-приложений. Она имеет следующие особенности для обеспечения быстрой разработки:

  • Возможность редактирования определений классов, CSP-страниц, программ на Caché Object Script(COS) в единой интегрированной среде;

  • Полнотекстовое редактирование с подсветкой команд, а также проверкой синтаксиса на следующих языках: Caché Object Script, Basic, Java, SQL, JavaScript, HTML, и XML;

  • Поддержка команды разработчиков, работающих с общим репозиторием кода приложения;

  • Наличие отладчика;

  • Организация кода в проект;

  • Наличие мастеров, позволяющих создавать классы, методы, свойства, связи, WEB-формы.

    Исходный код приложения Caché оформляется в виде проекта. Проект может содержать следующие компоненты: классы, программы, CSP-файлы. Можно создавать новые проекты, открывать и изменять существующие. Также существует возможность добавления или удаления компонентов из проекта.

    Внешний вид среды разработки Caché Studio приведен на рис.3.

    Утилита Caché Terminal может быть использована для отладки программ, процедур, функций, проверки работы отдельных операторов. Работа ведется в режиме командной строки. Утилита чрезвычайно проста. После приглашения набирается команда и нажимается ENTER. Здесь же выводится результат выполнения команды. Окно утилиты приведено на рис.4.

    Для доступа к многомерным структурам ядра СУБД Caché можно воспользоваться утилитой Caché Проводник. Утилита Caché Проводник предоставляет ряд интерфейсов для просмотра, импорта/экспорта, печати на принтер глобалов, классов Caché, программ Caché. Внешний вид утилиты приведен на рис.5.

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

Caché Terminal

    Caché Terminal – это программа эмуляции ASCII терминала, поставляемая вместе с Caché. Эта программа может быть с успехом использована для изучения моделей данных, поддерживаемых Caché, особенностей использования языка Caché ObjectScript, так как она немедленно выполняет любую команду Caché ObjectScript, записанную в командной строке с приглашением типа:

USER>

    где USER – это имя области Caché (NameSpace), в которой вы работаете.

Вы можете сменить имя области, использовав команду Caché ObjectScript:

ZNSPACE выражение или ZN выражение

    Например, команда

USER>ZN "SAMPLES"

выполняемая в области USER, немедленно приводит к смене области:

SAMPLES>

то есть вы теперь будете работать в области SAMPLES.

    Можно запустить на выполнение фрагмент из нескольких команд Caché ObjectScript, но все они должны быть записаны в одной строке. Редактировать команды в окне терминала достаточно сложно. Поэтому записывать приказы в строке длиннее, чем 80 символов, не рекомендуется. Если вы хотите выполнить какую-то последовательность команд, то лучше оформить их как программу, используя средство Caché Studio    Например, создадим и откомпилируем в Caché Studio пользовательскую функцию Random(min,max):

Random(min,max) New diff,zz Set diff=max-min,zz=$Random(diff)+1+min Quit zz

    Если функция откомпилирована в области USER как отдельная программа, то обращаться к ней в командной строке терминала можно следующим образом:

USER>Set st=$$^Random(100,1000)

Write st 784  // результат

или

USER>write $$^Random(10,1000),"****",$$^Random(10,1000) 287****376

    Заметим, что вызов пользовательской функции осуществляется в соответствии с синтаксисом:

$$Name(список параметров)

а циркумфлекс ^ перед именем нужен в том случае, если функция сохраняется как отдельная программа.

    Если программа прерывается по ошибке, то в заголовке приглашения появляется указание на место ошибки в тексте программы, например

USER 3e1>

    Чтобы восстановить прежний вид приглашения, выполните команду q (quit), которая завершит программу, а вид приглашения восстановится

USER>

Клавиатурный интерфейс Caché Terminal

Клавиатурный интерфейс программы Caché Terminal весьма примитивен. В режиме эмуляции реального терминала VT 320 работают следующие клавиши:

Клавиша

Действие

<Insert>

insert/overrite

<Delete>

Уничтожить литеру под курсором

<Home>

Перейти в начало строки

<End>

Перейти в конец строки

<Up Arrow>

Вниз по стеку команд сеанса

<Down Arrow>

Вверх по стеку команд сеанса

<Left Arrow>

Влево на символ

<Right Arrow>

Вправо на символ

<Ctrl>,I

Вставить пробел

<Ctrl>,L

Уничтожить от курсора до конца строки

<Ctrl>,U

Уничтожить от курсора до начала строки

<Ctrl>,W

Уничтожить от курсора до конца слова

<Ctrl>,G

Уничтожить от курсора до начала слова

<Ctrl>,X

Очистить строку

<Ctrl>,S

Заблокировать вывод на экран

<Ctrl>,Q

Разблокировать вывод на экран

7.5. Виды классов

    В Caché имеется принципиальное различие между классами типов данных и классами объектов. Классы типов данных позволяют представлять константы в виде строк символов (Strings), целых чисел (Integer) и других типов данных, в том числе определенных пользователем.

    Классы объектов содержат объекты и подразделяются далее на зарегистрированные и незарегистрированные классы. Незарегистрированные классы не несут в себе какого-либо предопределенного поведения; все их методы разработчик определяет сам. В противоположность этому зарегистрированные классы Caché автоматически обеспечены обширным набором встроенных функций, таких как метод $New() для создания нового экземпляра класса либо %Close() для его удаления из памяти    Зарегистрированный класс является временным; он не обладает кодом для хранения в базе данных. Для встраиваемых и для хранимых классов Caché создает методы хранения автоматически    При этом объект встраиваемого класса может храниться, только будучи встроен в некоторый хранимый объект, тогда как хранимый объект, имея собственный идентификатор, может храниться в базе данных независимо.

1. Классы типов данных

    Классы типов данных — это специальные классы, определяющие допустимые значения констант и позволяющие их контролировать. В противоположность классам объектов типы данных не имеют независимой идентификации и от них не могут образовываться экземпляры. Они просто приписываются атрибутам объектов, получающим константы соответствующего типа в качестве значений.     Классы типов данных содержат предопределенный набор методов проверки и преобразования значений атрибутов. Эти классы не могут содержать свойств.

2. Классы объектов

    Класс объектов определяет структуру данных и поведение объектов одного типа. Эти объекты называют экземплярами соответствующего класса, а создание объекта называют порождением экземпляра класса.    Каждый класс объектов обладает однозначным именем класса, а также свойствами, методами и ключевыми словами, определяющими общее поведение класса.

3. Незарегистрированные классы объектов

    Caché не осуществляет автоматического управления объектами незарегистрированных классов. Разработчик сам отвечает за назначение и поддержку уникальности идентификаторов объектов (OID) и объектных ссылок (OREF). Из-за того что управление объектными ссылками не реализовано на уровне Caché, незарегистрированные классы обнаруживают ряд ограничений:

  • Система не выделяет память для значений свойств объектов.

  • Отсутствует автоматическая подкачка объектов, на которые делаются ссылки.

  • Полиморфизм не поддерживается.

  • Переменные, ссылающиеся на незарегистрированные объекты, должны явно декларироваться с указанием соответствующего класса.

4. Зарегистрированные классы объектов

    Зарегистрированные классы объектов располагают полным набором методов управления поведением объектов в памяти. Они автоматически наследуют эти методы от системного класса %Library.RegisteredObject. Экземпляры зарегистрированных классов существуют лишь временно в памяти процесса, поэтому их называют временными объектами. Противоположность им составляют встраиваемые и хранимые классы объектов, которые могут храниться в базе данных длительное время.     Создание новых объектов зарегистрированных классов и управление их размещением в памяти осуществляется Caché. В распоряжение программиста предоставляется объектная ссылка (OREF), по которой можно ссылаться на объект в памяти. Зарегистрированные классы поддерживают полиморфизм.

5. Встраиваемые классы объектов

    Экземпляры встраиваемых классов могут храниться не только временно в памяти, но и продолжительное время в базе данных. Эти классы наследуют свое поведение от системного класса Caché %Library. Serial Object. Главным в их поведении является то, что их экземпляры в памяти существуют как независимые объекты, однако могут быть сохранены в базе данных, лишь будучи встроены в другие объекты.

    Для этого Caché оснащает встраиваемые классы объектов следующими функциональными возможностями:

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

  • Автоматически считывать эту последовательную строку из базы данных и представлять в памяти в виде самостоятельного объекта. Автоматическую загрузку в память связанных объектов будем называть подкачкой (по-английски swizzling).

    Встроенные объекты представляются в памяти и базе данных совершенно по-разному:

  • В памяти встроенный объект существует как отдельный объект, ничем не отличающийся от объектов других видов. Значение встроенного объекта в памяти — это объектная ссылка (OREF) на представления объекта в памяти.

  • В базе данных встроенный объект сохраняется в последовательной форме как часть объекта, в который он встроен. У встроенного объекта отсутствует идентификатор (OID), и он не может использоваться другими объектами без содержащего его объекта.

    В качестве примера рассмотрим класс объектов Производитель. У производителя имеются не только такие простые свойства, как Наименование и Отрасль, но также и адрес, содержащий Индекс и Город. Несомненно, атрибуты адреса можно было бы определить напрямую в виде нескольких свойств класса Производитель. Поначалу это кажется осмысленным, ведь адрес представляет собой свойство производителя, а значит, не должен существовать независимо от него. Однако и другие объекты — поставщики, клиенты, персоны — также имеют адреса. Поэтому крайне желательно, определив понятие Адрес лишь единожды, многократно применять его в различных классах объектов.     Именно это и происходит, когда при определении класса Производитель обращаются к ранее определенному классу объектов Адрес и встраивают его в новый класс. С одной стороны, этот класс может быть также использован в классах Поставщик, Клиент и Персона, что позволяет создать стандарт для разработки приложений. С другой стороны, сводятся к минимуму издержки, связанные с возможным в будущем изменением формата почтового индекса или с добавлением к адресу нового свойства «e-mail».

6. Хранимые классы объектов

    Хранимые (в переводе с латыни — длительные) классы объектов обладают обширными функциональными возможностями, обеспечивающими длительное хранение их экземпляров в базе данных. Эти возможности наследуются от системного класса %Library.Persistent.     Экземпляры хранимых классов обладают однозначными объектными идентификаторами (OID) и могут независимо храниться в Caché. Когда хранимый объект используется как свойство класса, говорят о ссылке на хранимый объект. Пусть производитель транспортного средства определен в виде хранимого класса Производитель. Если свойству Производитель класса Транспортное средство назначить тип Производитель, будет образована ссылка на хранимый объект. Каждый экземпляр класса Транспортное средство может теперь ссылаться на экземпляр класса Производитель, причем каждый производитель существует независимо от того, ссылаются ли на него транспортные средства и в каком количестве.

    С точки зрения класса Транспортное средство свойства и методы производителя, на которого делается ссылка, могут применяться аналогично собственным свойствам и методам. При этом Caché автоматически загружает в память объекты, на которые делается ссылка, осуществляя подкачку (swizzling).

 

Типы данных

    Caché поддерживает неограниченное количество типов данных для свойств классов, причем каждый тип данных представляет собой класс. Вы можете реализовать ваши собственные типы данных (Advanced Data Types — ADTs), определяя соответствующие классы типов данных. Кроме того, классы типов данных управляют поведением свойств объектов, когда они посредством SQL представляются в виде столбцов реляционных таблиц.

Являясь особой формой классов, типы данных имеют принципиальные отличия от классов объектов:

  • от классов типов данных невозможно образование экземпляров;

  • классы типов данных не могут содержать свойств;

  • методы классов типов данных предоставляются программисту через интерфейс типов данных.

Классы типов данных обладают следующими функциональными возможностями:

  • Отвечают за проверку значений, которая в дальнейшем может конкретизироваться с помощью параметров классов типов данных

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

  • Обеспечивают взаимодействие с SQL, ODBC, ActiveX и Java, предоставляя в их распоряжение необходимые в каждом случае операции и методы преобразования данных.

    Классы типов данных, поддерживаемые Caché, приведены в следующей таблице.

Тип данных

Назначение

Аналогичный SQL-тип

Поддерживаемые параметры

%Binary

Двоичное значение

BINARY, BINARY VARYING,RAW, VBINARY

MAXLEN, MINLEN

%Boolean

Логическое значение (0- ложь, 1- истина)

Не определен

 

%Currency

Валюта

MONEY, SMALLMONEY

DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST

%Date

Дата (внутренний формат)

DATE

DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST

%Float

Число с плавающей точкой

DOUBLE, DOUBLE PRECISION, FLOAT, REAL

DISPLAYLIST, FORMAT, MAXVAL, MINVAL, SCALE, VALUELIST, XSDTYPE

%Integer

Целое число

BIT, INT, INTEGER, SMALLINT, TINYINT

DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST, XSDTYPE

%List

Данные в формате $List, специфическом для Caché

не определен

ODBCDELIMITER

%Name

Имя в формате "Фамилия.Имя"

не определен

COLLATION, INDEXSUBSCRIPTS, MAXLEN, XSDTYPE

%Numeric

Число с фиксированной точкой

DEC, DECIMAL, NUMBER, NUMERIC

DISPLAYLIST, FORMAT, MAXVAL, MINVAL, SCALE, VALUELIST

%Status

Код ошибки

не определен

 

%String

Строка символов

CHAR, CHAR VARYING, CHARACTER, CHARACTER VARYING, NATIONAL CHAR, NATIONAL CHAR VARYING, NATIONAL CHARACTER, NATIONAL CHARACTER VARYING, NATIONAL VARCHAR, NCHAR, NVARCHAR, VARCHAR, VARCHAR2

COLLATION, DISPLAYLIST, MAXLEN, MINLEN, PATTERN, TRUNCATE, VALUELIST, XSDTYPE

%Time

Время во внутреннем представлении

TIME

DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST

%TimeStamp

Отметка времени, состоящая из даты и времени

TIMESTAMP

DISPLAYLIST, MAXVAL, MINVAL, VALUELIST

Параметры

    Классы типов данных поддерживают различные параметры, которые меняются от типа к типу и выполняют различные действия.

Примеры параметров:

MAXLEN — задает максимальное число символов, которое может содержать строка. MAXVAL— задает максимальное значение MINLEN — задает минимальное число символов, которое может содержать строка.MINVAL — задает минимальное значение. FORMAT — задает формат отображения. Значение параметра соответствует опции форматирования функции $FNUMBER, которая выполняет форматирование. SCALE — определяет число цифр после десятичной точки.

PATTERN — задает шаблон, которому должна соответствовать строка. Значение параметра PATTERN должно быть правильным выражением шаблона Caché.

TRUNCATE — если значение равно 1, то строка символов должна обрезаться до длины, указанной в параметре MAXLEN (умолчание), если равно 0, то нет. ODBCDELIMITER — задает символ-разделитель в списке %List, когда он передается через ODBC. VALUELIST–задает список значений для перечислимых свойств

DISPLAYLIST – определяет дополнительный список значений перечислимого свойства, задает формат отображения для перечислимого свойства, используется вместе с параметром VALUELIST.

Форматы данных и методы преобразования классов типов данных

Оперируя с константами, Caché, распознает различные форматы данных. В следующей таблице содержится их обзор.

Формат данных

Назначение

Display

Формат отображения данных

Logical

Формат внутреннего представления данных в оперативной памяти

Storage

Формат хранения данных

ODBC

Формат представления данных для ODBC и SQL

    Существуют методы для преобразования форматов, представленные в следующей таблице:

Метод

Назначение

DisplayToLogical()

Преобразует отображаемые значения во внутренний формат

LogicalToDisplay()

Преобразует значение из внутреннего формата в формат отображения

LogicalToODBC()

Преобразует значение из внутреннего формата в формат ODBC (опциональный метод)

ODBCToLogical()

Преобразует значение из формата ODBC во внутренний формат (опциональный метод)

LogicaToStorage()

Преобразует значение из внутреннего формата в формат базы данных (опциональный метод)

StorageToLogical()

Преобразует значение из формата базы данных во внутренний формат (опциональный метод)

Эти методы служат основой для создания методов свойств в соответствующих классах. В качестве примера рассмотрим класс Person со свойством DateOfBirth типа данных %Library.Date. Тогда для класса Person Caché будет автоматически создавать методы DateOfBirthDisplayToLogical(), DateOfBirthLogicalToDisplay() и т.д. и применять их для соответствующих преобразований.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]