Научная статья на тему 'Системи об’єктно-реляційної проекції для с++'

Системи об’єктно-реляційної проекції для с++ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
288
96
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Бондаренко Микола Андрійович, Макаренко Антон Юрійович

Виконано узагальнення теоретичної інформації в галузі проектування систем об’єктно-реляційної проекції, визначено ключові технічні вимоги для проектування ORM-систем, проаналізовано механізми проекції та інтерфейси існуючих ORM-систем.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Systems object-relational mapping for C + +

In this paper the generalization of theoretical information in the design of object-relational mapping was held, defined the key technical requirements for designing ORM-systems, analysied the mechanisms of mapping and interfaces of existing ORM-systems.

Текст научной работы на тему «Системи об’єктно-реляційної проекції для с++»

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

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

УДК004.45

СИСТЕМИ ОБ’ ЄКТНО-РЕЛЯЦІЙНОЇ ПРОЕКЦІЇ ДЛЯ C++

БОНДАРЕНКО М.А., МАКАРЕНКО А.Ю._____________

Узагальнюється теоретична інформація в галузі проектування систем об’єктно-реляційної проекції, визначаються ключові технічні вимоги для проектування ORM-систем, аналізуються механізми проекції та інтерфейси існуючих ORM-систем.

1. Вступ

Найбільш поширеним способом зберігання та первинної обробки інформації є використання реляційних баз даних, тоді як об ’ єктно-орієнтов ане програмуй ання є на сьогодні основною технологією розробки програмного забезпечення. Ключовим елементом реляційних баз даних є таблиця, звернення до якої відбувається шляхом формування запитів мовою, яку підтримує система керування базами даних (СКБД). Основною одиницею об’єктно-орієнтова-ного програмування є клас, який описується в рамках, встановлених синтаксисом мови програмування. В пошуку оптимізації шляхів роботи з даними при розробці програмного забезпеченняоб’ єктно-орієнтованої системи програмування працюють нові інструменти: об’єктно-ре-ляційні СКБД, об’єктно-орієнтовані бази данихта системи об’єктно-реляційної проекції. Проблема даного дослідження полягає у протиріччі між відомими перевагами систем об’єктно-реляційної проекції та низьким рівнем використання цих систем при розробці програмного забезпечення мовою С++.

2. Основний зміст

У рамках зазначеної проблеми мають бути виконані такі завдання: аналіз теоретичних питань в галузі об ’ єктно-реляційної проекції; введення ключової термінології; роль систем об’єктно-реляційної проекції в архітектурі програмного засобу; перелік інструментів для розробки системи; відповідність до цих вимог

РИ, 2013, № 3

ри информации компактное представление для линеаризированной трансформанты.

Литература: 1. Олифер В.Г. Компьютерные сети. Принципы, технологии, протоколы: Учебник для вузов. / В.Г. Олифер, Н.А. Олифер. СПб.: Питер, 2006. 958 с. 2. GonzalesR.C. Digital image processing / R.C. Gonzales, R.E. Woods. Prentice Inc. Upper Saddle River, New Jersey 2002. 779 p. 3. Баранник В.В. Кодирование трансформированных изображений в инфо-коммуникационных системах / В.В. Баранник, В.П. Поляков. Х.: ХУПС, 2010. 212 с. 4. Баранник В.В. Обоснование проблемных недостатков технологии компонентного кодирования трансформированных изображений для средств телекоммуникаций / В.В. Баранник, Ю.В. Стасев, С.В. Туренко // Сучасна спеціальна техніка. 2013. №4. С. 22 - 27.

Поступила в редколлегию 05.01.2013

Рецензент: д-р техн.наук, проф. Баранник В.В.

Туренко Сергей Викторович, аспирант ХНУРЭ. Научные интересы: обработка и передача информации. Адрес: Украина, 61023, Харьков, ул. Ленина, 14.

мови програмування С++; підхід до реалізації механізмів рефлексії; введення інструментів об’єктно-реляційної проекції для С++. Об’ єктно-реляційна проекція (Object-relational mapping- ORM) це програмна технологія, яка пов’язує реляційні бази даних з концепціями об’ єктно-орієнтованого програмування шляхом створення віртуальних об ’ єктних баз даних. Дана технологія може бути введена як програмний компонент (динамічна або статична бібліотека), а також у вигляді окремої розробки програми. ORM-технологія втілює в собі основні принципи концепції RAD (Rapid application development - швидка розробка програмного забезпечення). Це визначає її як інструмент для прискорення розробки ПЗ, підвищення якості роботи, надійності програмного продукту та зниження собівартості його розробки [1]. Для подальшого дослідження необхідно визначити ключову термінологію [2] системи об’єктно-реляційної проекції, а саме: проекція, проектувати, атрибут, проекція атрибуту, проекція зв’язку.

Проекція - зв’язок між об’єктами, співвідношенням об’єктів, які зберігаються в реляційних сховищах даних. Проектувати - визначати об’єкти, їх атрибути та взаємозв ’язки з іншими об ’ єктами, що зберігаються в постійному сховищі даних. Атрибут - загальнодоступний член класу, або значення особистого члена класу, який повертається у разі виклику методу класу. Він співвідноситься зі стовпцем реляційної таблиці.

Проекція атрибута описує метод зберігання значення атрибута об’єкта в реляційному сховищі. Проекція зв’язку - опис методу його збереження (асоціація, агрегація або композиція) між об ’ єктами. Архітектурна роль об’єктно-реляційної проекції в програмному засобі полягає у проекції компонентів бізнес-логіки. Вона представлена конкретними класами на відповідні об’єкти реляційної бази даних [3]. Порівняння узагальненої архітектури ПЗ з її використанням наведено на рисунку. Пунктирною лінією виділені компоненти системи, які мають бути розроблені самостійно. Система об’єктно-реляційної проекції включає в себе

55

вбудований інтерфейс доступу до даних. Вона оптим-ізує час розгортання системи та проектування бізнес-логіки. При цьому ліквідується необхідність розробки компонентів доступу до даних (Data access logic components - DALC).

Технологія об’єктно-реляційної проекції реалізована для використання з переважною більшістю мов програмування у формі окремих бібліотек. Вона реалізована у складі багатофункціональних фреймворків як частина шаблону проектування модель-вид-контролер (MV C). В шаблоні MVC об’єктно-реляційна проекція застосовується для опису моделі даних [4]. Ключовою вимогою до мови програмування для побудови системи об’єктно-реляційнї проекції є можливість рефлексивного програмування [5 ]. Результати узагальненого аналізу підходів до організації рефлексії для мови програ -мування С++ наведено в таблиці.

Існують такі реалізації механізму рефлексії для мови програмування С++: C++/CLI корпорації Microsoft; бібліотека Mirror; Qt Framework. Мета-об’єкти Qt додають нові члени класу до часу виконання програми. Для реалізації проекції виконується мета-об ’ єктний компілятор, який є надбудовою компілятора С++.

Розглянемо існуючі реалізації систем об’ єктно-реляц-ійної проекції для С++ для розробки ORM-систем, перевірки відповідності архітектури інтерфейсу користувача вимогам об’єктно-орієнтованого програмування. LightSQL - бібліотека кросплатформи з відкритим кодом, яка реалізує механізм об ’ єктно-реляційної проекції. Вона дає можливість створювати таблиці, модифікувати структуру бази даних, підтримує проекцію атрибутів та зв ’язків. Механізм проекції повністю реалізується за допомогою XML розмітки без побудови С++ класу. Класи С++ генеруються шляхом використання утиліти кодогенерації lightsql-gen, яка входить в комплект поставки бібліотеки. Розглянемо приклад проекції об ’ єкта засобами бібліотеки LightSQL:

<?xml version=”1.0"?>

<!DOCTYPE database SYSTEM “litesql.dtd”>

Стандартна схема побудови програмного забезпечення

Архітектура ПЗ збереження

<database name=”ExampleDatabase” namespace=”example”> <object name=”Person”>

<field name=”name” type=”string”/>

<field name=”age” type=”integer” default=” 15"/>

<field name=”sex” type=”integer”>

<value name=”Male” value=”0"/>

<value name=”Female” value=”1 "/>

</field>

<method name=”sayHello”/>

</object>

<relation id=”Mother” unidir=”true”>

<relate object=”Person” limit=”many” handle=”mother”/> <relate object=”Person” limit=”one”/>

</relation>

<relation id=”Children” unidir=”true”>

<relate object=”Person” handle=”children”/>

<relate object=”Person”/>

</relation>

</database>

В результаті кодогенерації створюється клас Person, який має відкриті члени класу- атрибути проекції. Розглянемо приклад використання об’єктів згенеро-ваного класу Person:

ExampleDatabase db(“sqlite3”, “database=example.db”);

db.verbose = true;

db.create();

db.begin();

Person jeff(db); jeff.name = “Jeff”; j eff. sex=Person:: Sex: :Male; jeff.age = 32; jeff.update();

Personjill(db);

Схема побудови ПЗ з використанням ORM

даних в реляційному сховищі

56

РИ, 2013, № 3

jill.name = “Jill”;

j ill. sex=Person:: Sex: :Female;

jill.age = 33;

jill.update();

jeff children().link(j ack);

Виборки здійснюються за допомогою визначеного шаблонного об’єкта select або sqlquery:

try {

select<Person>(db, Person::Id == 100).one();

} catch (NotFound e) {

cout << “No Person with id 100” << endl;

}

Реалізація проекції бібліотеки LightSQL обмежує стандартні можливості мови проектування класів через використання механізму кодогенерації класів.

ODB (Object data base- об’єктна база даних) - бібліотека C++, яка реалізує систему об ’ єктно-орієнтованої проекції та використовує компілятор GCC (GNU Compiler Collection- набір компіляторів GNU). Проекція класу досягається директивою компіляції, яка додає до класу необхідну метаінформацію. Розглянемо код проекції з використанням засобів бібліотеки ODB:

#pragma db object table(“people”) class person {

private:

friend class odb: :access; person ();

#pragma db id auto unsigned long id_;

string first_; string last_;

#pragma type(“INT UNSIGNED”) unsigned short age_;

};

Для організації виборки застосовується шаблонний метод об’єкта Database, який є інтерфейсом доступу до реляційної бази даних. Для зберігання об’ єктів використовується шаблонний об’єкт result (результат) стандартної бібліотеки С++. Для формування умов виборки існує шаблонний об’ єкт query (запит). Розглянемо програмний код механізму виборки в бібліотеці ODB:

typedef odb::query<person> query; typedef odb::result<person> result; transaction t (db.begin ());

result r (db.query<person> (query::last == “Doe” && query::age < 30));

for (result::iterator i (r.begin ()); i != r.end (); ++i)

Аналіз підходів до реалізації механізму рефлексії мови програмування С++

Підхід Переваги Недоліки

Аналіз інформації для відладки. Використання стандартного методу опису класу. Можливість отримати повну інформацію про типи даних. Необхідність побудови програми в режимі відладки. Залежить від компілятору.

Препроцесор аналізу та опису класу. Використання стандартного методу опису класу. Специфіка роботи компіляторів з членами класу та таблицями віртуальних функцій. Розробка аналізатора коду С++.

Модифікований компілятор з підтримкою рефлексії. Відсутність додаткових етапів побудови програми. Генерація ефективного коду для засобів рефлексії. Відтворення та адаптація програмної інфраструктури.

Ручне формування мета-опису класу засобами мови програмування. Незалежність від компілятору. Проста реалізація. Написання додаткового програмного коду, для опису метаінформації. Людський фактор.

Формування мета-опису класу в конфігурації зовнішніх класів. Використання стандартного методу опису класу. Можливість використання стандартних засобів опису структур даних (XML, JSON). Додаткові часові та ресурсні видатки на отримання метаінформації.

Формування мета-опису класу засобами скриптової мови програмування. Використання вбудованих можливостей скриптових мов програмування. Часові та ресурсні витрати на запуск та роботу з інтерпретатором скриптової мови програмування.

РИ, 2013, № 3

57

{

cout << “Hello, “ << i->first () << endl;

}

t.commit ();

Wt::Dbo (Web toolkit - Data base object, набір інструментів для веб-розробки — об’єктна база даних) -бібліотека реалізації інструментів об’єктно-реляційної проекції. Для проекції атрибутів та зв’зків бібліотека пропонує задавати програмісту метаінформацію вручну. Це імітує рефлексію класу. Кожен об’єкт для проектування має реалізувати шаблонний метод persist (зберігати), в якому описується структура відповідного об’єкта реляційної бази даних. Розглянемо приклад проекції класу:

#include <Wt/Dbo/Dbo>

#include <string> namespace dbo = Wt::Dbo; class User { public: enum Role {

Visitor = 0,

Admin = 1,

Alien = 42

};

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

std::string name; std::string password;

Role role; int karma;

template<class Action> void persist(Action& a)

{

dbo::field(a, name, “name”); dbo::field(a, password, “password”); dbo::field(a, role, “role”); dbo::field(a, karma, “karma”);

}

};

Звернення до реляційної бази даних та реєстрація нових об ’ єктів відбувається за допомогою об ’ єкта класу Session (сесія). Він здійснює з’єднання з базою даних та представляє інтерфейс для маніпуляції об ’ єктами та записами в базі даних:

dbo: :ptr<User> joe = session.find <User>().where(“name = ?”).bind(“Joe”);

QxOrm (Qx object relation mapping- об’єктно-реляуійна проекція) - бібліотека, спроектована для надання програмістам можливостей роботи з об ’ єктно-реляційною проекцією. Вона має зовнішню залежність від boost та Qt Framework. Проекція класу відбувається за принципом

ручного додавання метаінформації. Інтерфейс роботи з реляційним сховищем не є об’єктно-орієнтованим. Він зроблений у вигляді функцій, кожна з яких виконує одну конкретну операцію. Аналіз існуючих ORM-систем показує, що найбільш розповсюдженим методом для організації проекції є рефлексія ручного додавання мета-інформації в клас проекції. ORM-бібліотеки надають програмісту неповноцінний об’єктно-орієнтований інтерфейс. Об ’ єкти проекції активно використовують шаблони статичного поліморфізму без прийомів спадкування та динамічного поліморфізму.

Висновки

Наукова новизна. Виконано теоретичний аналіз аспектів проектування архітектури ORM-системита дизайну інтерфейсу користувача. Показано, що ORM-системи програмного засобу заміщують компоненти логіки доступу до даних. Введено терміни об ’ єктно-реляційної проекції: проекція, проектувати, атрибута, проекція атрибуту, проекція зв’язку. Механізм рефлексії є ключовою технічною вимогою до мови програмування для організації проекци реляційної таблиці на клас. Стандарт мови С++ частково реалізує механізм інтроспекції типів даних — можливості доступу об’єкта до структури свого класу у час виконання. Показано, що загальними підходами для реалізації механізму рефлексії для С++ є аналіз інформації для відладки, створення препроцесора, модифікація компілятора, ручне формування мета-опису класу. ORM-системи для С++ відходять від об’єктно-орієнто-ваної концепції побудови програмних інтерфейсів.

Література: 1. Coleman G., Verbruggen R. A Quality Software Process for Rapid Application Development // Software Quality Control. 1998. Vol. 7, № 2. P. 107-122. 2. Van ZylP, Kourie D.G., Boake A. Comparing the performance of object databases and ORM tools // Proc. of the 2006 annual research conference of the South African institute of computer scientists and information technologists on IT research in developing countries. Republic of South Africa: South African Institute for Computer Scientists and Information Technologists, 2006. P. 1-11. 3. Van Zyl P. et al. The influence of optimisations on the performance of an object relational mapping tool // Proceedings of the 2009 Annual Research Conference of the South African Institute of Computer Scientists and Information Technologists. New York, NY, USA: ACM, 2009. P. 150-159. 4. Ireland C. et al. A Classification of Object-Relational Impedance Mismatch // First International Conference on Advances in Databases, Knowledge, and Data Applications, 2009. DBKDA ’09. 2009. P. 36-43. 5. Smith B.C. Procedural reflection in programming languages: Thesis. Massachusetts Institute of Technology, 1982.

Надійшла до редколегії 22.08.2013

Рецензент: д-р техн. наук, проф. Кривуля Г.Ф.

Бондаренко Микола Андрійович, канд. техн. наук, професор Української інженерно-педагогичної академії. Наукові інтереси: інформаційні технології та проектування технічних систем. Адреса: Україна, 61000, Харків, вул. Клочківська, 195 г, кв. 44, тел. 7 19 50 01.

Макаренко Антон Юрійович, асистент кафедри електроніки та комп’ютерних технологій систем управління навчально-наукового професійно-педагогічного інституту Української інженерно-педагогічної академії. Адреса: Україна, Ар-темівськ, вул. Носакова, 9.

58

РИ, 2013, № 3

i Надоели баннеры? Вы всегда можете отключить рекламу.