Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Работа с объектной базой данных
Работа с объектной базой данных
Введение
Учебно-методические материалы «Работа с объектной базой данных» представляет собой методические указания к лабораторным работам по дисциплине «Постреляционные базы данных».
В материалах рассмотрены принципы взаимодействия с объектно-ориентированной СУБД на примере СУБД Cache Intersystems. Приведено краткое описание технологий настройки соединений с БД и языковых конструкций для создания объектов и работы с ними во внешней среде. Рассмотрены запросов к объектной базе данных. В заключительной части методических указаний приведены контрольные вопросы, список рекомендуемой литературы и пример задания.
Ознакомившись с методическими указаниями и разобрав приведенные в нем примеры, студент может получить у преподавателя свой вариант задания и приступить к его выполнению. Целью лабораторной работы является практическое изучение возможностей объектно-ориентированной СУБД на примере СУБД Cache Intersystems для создания, изменения, просмотра и удаления объектов из внешнего приложения используя объектное представление данных.
Оглавление
Введение..................................................................................................................................................... 1
Цель работы.................................................. 1
Время выполнения............................................. 2
Теоретическая часть................................................................................................................................. 2
Объектный доступ............................................. 2
Практическая часть................................................................................................................................... 6
Создание С++-проекции в среде Cache Project.................. 6
Создание проекции файлов в среде Microsoft Visual Studio..... 9
Описание основных методов клиента и сервера................. 13
Пример задания...................................................................................................................................... 15
Вопросы для самопроверки................................................................................................................. 15
Содержание отчета по лабораторной работе................................................................................. 16
Литература................................................................................................................................................ 16
Цель работы
· Изучить различные технологии взаимодействия внешних приложений с Cache`.
· Освоить методы обращения к\из СУБД Cache` используя объектный подход и реляционное представление.
· Получить навыки работы с инструментальными средствами среды Cache`, реляционных СУБД и объектных языков программирования для организации их взаимодействия.
Время выполнения
Время выполнения лабораторной работы 2 часа.
Теоретическая часть
Сердцем СУБД Caché является сервер многомерных данных (MDS - Multidimensional Data Server), позволяющий компактно и эффективно хранить данные произвольной сложности. Для доступа к сложноструктурированным данным не требуется производить изощренных и дорогостоящих операций соединения, что положительно сказывается на общей производительности, и, в совокупности с транзакционной многомерной моделью Caché и встроенными средствами многопользовательской работы, позволяет создавать промышленные приложения, лишенные недостатков реляционных СУБД.

В Caché реализована концепция единой архитектуры данных, то есть СУБД Caché является открытой системой и предоставляет огромное количество интерфейсов для взаимодействия с внешним миром, которые можно разделить по типу доступа: прямой, реляционный и объектный. Однако, стоит отметить, что подобное разбиение довольно условно, и некоторые способы взаимодействия Caché с внешним миром можно отнести сразу к нескольким категориям.
Прямой доступ к данным(Caché Direct), обеспечивает максимальную производительность. Разработчики приложений получают непосредственный доступ к многомерным структурам (так называемым глобалам) Caché.
Для построения отчетов и совместимости с реляционными продуктами СУБД Caché предоставляет реляционный доступ, в основе которого лежит стандарт SQL 92.
Однако, наиболее интересным является объектный доступ. С этой точки зрения Caché соединяет традиционную технологию проектирования баз данных с объектной моделью.
Cache' позволяет комбинировать три типа доступа.
Объектный доступ
Cache' Objects - объектный доступ, для максимальной продуктивности разработки при использовании Visual C. В Cache' реализована объектная модель в соответствии с рекомендациями ODMG (Группа управления объектными базами данных - Object Database Management Group).
- В Cache' полностью поддерживаются наследование (в том числе и множественное), инкапсуляция и полиморфизм. При создании информационной системы разработчик получает возможность использовать объектно-ориентированный подход к разработке, моделируя предметную область в виде совокупности классов объектов, в которых хранятся данные (свойства классов) и поведение классов (методы классов). Cache', поддерживая объектную модель данных, позволяет естественным образом использовать объектно-ориентированный подход при реализации приложений в ОО-средствах разработки (в частности C++).
Основный звеном является механизм объектной фабрики Caché, в основе которой лежит Caché ObjectServer, представляющий собой OLE In - Process Automation Server. Он позволяет держать на клиенте копии серверных объектов. К примеру, если в приложении на C++ средствами ObjectServer открывается объект, то идентичный объект открывается и на сервере. При изменении какого-либо свойства на стороне клиента соответствующее свойство у серверного объекта изменяется автоматически, вызов метода влечет его выполнение на сервере с передачей результатов на клиентскую часть
Архитектура ObjectServer подразумевает разделение приложения на две основные части: клиентскую и серверную. При этом организация получения метаданных серверных объектов может быть реализована двумя способами: раннее и позднее связывание. Раннее связывание означает, что на клиенте явно хранятся определения классов. Т. е. если клиент взаимодействует с серверным классом, то приложению заранее известна структура этого класса, описания свойств и сигнатуры методов, благодаря чему при компиляции можно создавать более эффективные способы обращения к экземплярам данного класса. Если с сервером связано более одного клиента, то, естественно, информацию о серверных классах необходимо продублировать на каждом клиенте, что в случае сильно распределенной системы может быть довольно трудоемко. Однако, основной недостаток такого подхода заключается в синхронизации изменений серверных классов с соответствующими определениями на клиентах. При изменении одного свойства необходимо провести корректировку и перекомпиляцию всех классов, которых потенциально могут быть тысячи и даже сотни тысяч.
Альтернативой раннему связыванию является использование механизма позднего связывания. Все что клиенту необходимо иметь, так это единственный класс Factory, который согласно паттерну проектирования Abstract Factory, берет на себя ответственность за создание объектов, инкапсулируя всю логику формирования экземпляров класса на стороне клиента. В совокупности с преимуществами технологии OLE (а именно, при использовании Variant) объектная фабрика избавляет клиента от необходимости хранить определения всех используемых серверных классов.
Механизм предоставляет возможность проецирования классов Caché в классы C ++. Архитектура C ++ binding сходна с проецированием в Java и наряду с отображением классов Caché в классы C++ заботится о конкурентном доступе к объектам и о транзакционности. Кроме того, стоит отметить, что C++-проецирование (как и все остальные виды проецирования) оптимизировано под распределенные архитектуры и использует механизм кэширования для минимизации трафика между C ++-приложениями и Caché-сервером.
Пример: использования классов Caché из C ++
d_ref <Sample_Person> p1 = Sample_Person::openid(&db, L"1"); p1->setDOB(1970,2,1); |
C++-библиотека, поставляемая вместе с Caché, содержит шаблонный класс d _ ref <>:
- данный класс инкапсулирует логику обращения к промежуточным классам; данный класс реализованный по концепции smart pointer, что позволяет вызывать методы промежуточных классов через “->” синтаксис, копировать d _ ref <> таким образом, что два экземпляра будут указывать на один объект, передавать экземпляр d _ ref <> в промежуточный метод «по ссылке».
Создать проекцию объектов из среды разработки Cache на какой –либо язык программирования можно двумя способами:
- Создание проекции объектов на язык С непосредственно из Cache Project; Создание проекции объектов непосредственно в среде Microsoft Visual Studio.
Рассмотрим оба этих варианта ниже.
Схема взаимодействия:

Взаимодействие между Cache и клиентской частью, написанной на С++, осуществляется через С++-проекцию (со стороны клиентской части приложения) и функции объектного доступа в Cache (со стороны серверной части приложения).
Практическая часть
Создание С++-проекции в среде Cache Project
С++-проекция – это код на языке С++, автоматически сгенерированный ПО Caché. Для того, чтобы создать С++-проекцию необходимо:
1) В среде разработки Caché выбрать Инструменты->Сгенерировать С++-проекцию (см. Рис.1).

Рис. 1
2)Система выдаст диалоговое меню, где необходимо нажать кнопку добавить и в предложенном диалоговом окне выбрать описание классов на основе, которых необходимо сгенерировать С++-проекцию (см. Рис.2 и Рис.3).

Рис. 2.

Рис. 3
3) После чего выбранные описания классов будут добавлены в список, классов на основе которых будет сгенерировать С++-проекция. После данной процедуры система автоматически сгенерирует описание на языке С++ и выдаст об этом сообщение (см. Рис.5 и Рис.6.):

Рис. 5

Рис.6
На каждое описание класса система генерирует два файла, спецификация которых такова:
<Название класса>.h
<Название класса>.cpp
где <Название класса> - это класс в среде Caché, на основе которого генерируется проекция.
1) *.h – содержит интерфейс описания класса, его общее описание, директивы включения различных библиотек и другую информацию;
2) *.сpp –содержит реализацию функций класса, интерфейсы которых прописаны в файле *.h, также содержит директивы включения различных библиотек;
Создание проекции файлов в среде Microsoft Visual Studio.
Cache Net Project, используя проекции объектов позволяет эффективно взаимодействовать с клиентскими приложениями, написанными на других языках.
Для создания проекции из среды Microsoft Visual Studio необходимо выполнить следующие действия.
В среде разработки Visual Studio Net (Рис.1) , необходимо зайти в меню Tools->External tools (Рис.2).

Рис.1

Рис.2
Появиться окно (Рис.3):

Рис.3
Необходимо нажать кнопку «Add» и добавить новый инструмент связывания (Рис.4):

Рис.4
В поле «Command» указать путь к приложению CacheNetWizard. exe.
Данное приложение расположено в директории <CacheSys>\Dev\dotnet\Bin. (Рис.5)

Рис.5
После того, как были проделаны данные операции необходимо зайти в меню Tools->Cache и запустить утилиту (Рис.6).

Рис.6
Пользователю будет предложено задать некоторые параметры соединения со средой разработки Cache (указать тип языка, в коды которого осуществляется проекция, выбрать классы для проекции, указать параметры соединения) - см. Рис.7:

Рис. 7
Нажав на кнопку «Connect» необходимо задать параметры соединения (Рис.8):
-хост;
-логин;
-пароль;
-выбрать пространство имен.

Рис.8
Далее будет сгенерирован код на С и автоматически в среде Microsoft Visual Studio будет создан проект, куда будут добавлены сгенерированные файлы (Рис.9):

Рис.9
Описание основных методов клиента и сервера
Ниже приведено описание стандартной процедуры связывания проекта на Cache с клиентской частью, написанной на С.
using System;
using InterSystems. Data. CacheClient;
using InterSystems. Data. CacheTypes;
namespace TinySpace {
class TinyProxy {
[STAThread]
static void Main(string[] args) {
CacheConnection CacheConnect = new CacheConnection();
CacheConnect. ConnectionString = "Server = localhost; "
+ "Port = 1972; " + "Namespace = SAMPLES; "
+ "Password = SYS; " + "User ID = _SYSTEM;";
CacheConnect. Open();
Sample. Person person = Sample. Person. OpenId(CacheConnect, "1");
Console. WriteLine("TinyProxy output: \r\n "
+ person. Id() + ": "
+ person. Name
);
person. Close();
CacheConnect. Close();
} // end Main()
} // end class TinyProxy
}
Следует обозначить два основных момента, которые необходимо использовать при связывании проекта на Cache с клиентской частью, написанной на С.
Необходимо использовать библиотеки:- CacheClient (using InterSystems. Data. CacheClient);
- CacheTypes (using InterSystems. Data. CacheTypes);
Необходимо создать объект «Соединение» (где прописываются основные параметры соединения: хост, пароль, логин, пор, пространство имен) для связывания клиентской и серверной частей:CacheConnection CacheConnect = new CacheConnection();
CacheConnect. ConnectionString = "Server = localhost; "
+ "Port = 1972; " + "Namespace = SAMPLES; "
+ "Password = SYS; " + "User ID = _SYSTEM;";
CacheConnect. Open();
Метод класса OpenID()–получает доступ к экземпляру класса по ID объекта. Sample. Person person = Sample. Person. OpenId(CacheConnect, "1"); |
Для создания объекта необходимо использовать методы класса new() Sample. Person person = new Sample. Person(CacheConnect); |
Метод класса Save() используется для сохранения объекта. CacheStatus sc = person. Save(); |
Метод класса ExistID() используется для проверки существования объекта по введенному ID. string personExists = Sample. Person. ExistsId(CacheConnect, ID).ToString() |
Метод Close() разрывает соединение с серверной частью приложения, но не удаляет данный объект из базы. Метод DeleteID() удаляет данный объект из базы. person. Close(); CacheStatus sc = Sample. Person. DeleteId(CacheConnect, ID); |
Метод KillExtent() –удаляет все экземпляры класса и их подклассы CacheStatus sc = Sample. Person. KillExtent(CacheConnect) |
Пример задания
Определить в среде Cache` Studio класс
Класс "School"(Школа) - хранимый класс. Содержит свойства:
l num - номер - целое,
l city - город - строковое,
l col – ученики (количество учеников) – целое.
l индекс типа IDKEY на поле номер,
l Inf() - метод экземпляра, который возвращает строку вида: «Номер — город — ученики — количество_секций»,
ñ Create (номер, город) — метод класса (и хранимая процедура), который проверяет существование объекта школа с номером, и, если он существует, то открывает его, иначе создает новый объект и устанавливает поле названия. Затем устанавливает значения полей город (переданное через параметры) и ученики (для нового объекта=200), сохраняет объект. Метод имеет входные параметры: номер и город школы; и выходной параметр — созданный объект.
Используя Портал и/или Терминал создать объекты класса Школа. В Терминале вызвать созданные методы и проверить их работоспособность. В Портале проверить содержимое таблицы Школа.
Создание проекции класса
Создать в среде Cache` Studio проекцию класса Школа (для проекции в С++) или в MS Visual Studio (для проекции в С#).
Использование проекции класса
Создать в среде Visual Studio на языке с++ или с# приложение (оконное или консольное), которое обращается к классу Школа как к объекту и выполняет следующие действия:
1. создать объект Школа (указать поля номер, ученики, город) через стандартные методы (New(), Save()) и метод класса create().
2. ввести номер Школы, проверить ее существование (метод ExistsId()), открыть (OpenId()) и выполнить метод Inf() для текущего объекта. Результат выполнения метода отобразить пользователю.
Проверить в Портале добавление объектов.
Вопросы для самопроверки
Что такое проекция класса и как ее создать? Каким образом из внешней среды через проекцию класса можно создавать, изменять, сохранять и удалять объекты? Каким образом из внешней среды через проекцию класса можно вызывать методы? В чекм отличия работы с объектами в среде СУБД и снешнем приложении? Как задать сохранение свойства? Как настроить соединение с БД? Как через проекцию добавлять, изменять и удалять объекты БД?Содержание отчета по лабораторной работе
· Титульный лист,
· Задание на работу,
· Исходный код описания классов в Cache,
· Исходный код описания классов С++ или С#,
· Исходный код приложения для работы с БД,
· Скриншоты полученных результатов.
Литература
«Постреляционная СУБД Cache» - http://www. citforum. ru/database/articles/cache. shtml «Взаимодействие СУБД Cache с внешним миром» - http://www. citforum. ru/database/cache/cache_ex/5. Справочные материалы по СУБД Cache`, http://www. intersystems. ru/cache/devcorner/index. html


