В данной статье производится построение формального описания объектного и реляционного представлений произвольной предметной области для реализации инструменты объектно-реляционного преобразования
Ключевые слова: ООП, СУБД, база данных, объектный подход, объектно-реляционное преобразование, ORM
There are making construction a formal description of object and relational representations of an arbitrary domain for object-relational mapping tool implementation
Keywords: OOP, DBMS, database, object approach, object-realtional mapping, ORM
В настоящее время наиболее востребованным подходом при разработке программного обеспечения является объектно-ориентированный подход [1]. В рамках этого подхода предполагается разбиение предметной области на набор связанных между собой классов объектов, обладающих состоянием и поведением. Состояние определяется набором данных, присущих объекту класса, а поведение — набором методов, которые могут изменить это состояние [2]. Данный подход широко используется, о чем говорит большое количество изданий, посвященных ему. Существуют специальные издания, описывающие общие шаблоны, которые можно использовать при разработке программного обеспечения с использованием объектного подхода [3], [4].
Большинству приложений требуется производить сохранение результатов своей работы в постоянные хранилища данных. Чаще всего используются хранилища на основе реляционных систем управления базами данных. Эти хранилища используются ввиду их надежности, отказоустойчивости, эффективности и удобства эксплуатации. Однако представление предметной области при реляционном подходе отличается от объектного. Предметная область разбивается на набор связанный отношениями сущностей, однако данные сущности являются простыми структурами данных, не имеющими состояния и не способными его менять [5]. Отсутствуют основные отличительные особенности объектного подхода: инкапсуляция, наследование и полиморфизм
Два вышеописанных представления одинаково широко используются, и часто в рамках одного приложения встает проблема совмещения двух подходов. Объектный подход удобен для разработки самого приложения, а реляционный - для хранения и извлечения данных.
Как можно заметить, проблема актуальна и ее решением занимаются, но приемлемого решения не получено.
Для совместного использования двух вышеописанных представлений используется несколько подходов:
1. Ручное указание процедур преобразования. Используется достаточно часто ввиду своей простоты, однако малоэффективно с точки зрения разработки и поддержки, поскольку требуется производить много похожих действий.
2. Указание шаблонов преобразования. В различных системах реализовано по разному, но сводится к тому, что в некотором виде описывается соответствие объектной и реляционной модели предметной области, а специальный инструмент, пользуясь этим описанием, производит построение процедур преобразования и доступа к данным.
3. Описание смешанного представления, позволяющего построить на его основе как объектное, так и реляционное представления.
Для описания возможности преобразования объектного представления в реляционное было проведено построение формальных описание объектного и реляционного представлений предметной области.
Объектное представление
Объектное представление предметной области (ОV) задается моделью, элементами которой являются классы и связи между ними
OV=<Cm, Lm>,
где Cm — множество классов, а Lm — множество связей между классами.
Класс описывается именем и содержит в себе поля и методы. Поля описывают данные экземпляра класса, а методы реализуют его поведение.
C=<N, Fс, Mс>,
где N — наименование класса, Fс — множество полей, Mс — множество методов.
Конкретное поле описывается следующим образом:
F=<N, DT, AM>,
где N — наименование поля, DT — тип данных поля, AM — модификатор доступа к полю.
Связи между классами описывают, какую роль играет один класс по отношению к другому (другим). Связь в общем случае описывается следующим образом:
L=<N, T, Cl, Rl, Ml, Al>,
где N — наименование связи, Cl- множество классов, которые данная связь объединяет, T- тип связи, Rl — множество ролей классов, принимающих участие в образовании данной связи. Ml — множество мощностей связи для каждого из классов, Al — множество собственных атрибутов связи.
Конкретная роль описывается следующим образом:
R=<N,C>,
где N — наименование роли, C — класс, играющий данную роль.
Мощность связи (мультипликатор) означает число связей между каждым экземпляром класса (объектом) в начале линии с экземпляром класса в ее конце[6].
Мощность связи для класса можно описать следующим образом:
M = <С1, С2, V1, V2>,
где C1 — первый класс, для которого описывается мощность, C2 — второй класс, для которого описывается мощность, V1 — значение мощности для первого класса, участвующего в образовании связи, V1 — для второго.
Для примера возьмем фрагмент предметной области, описывающий студентов и их группы. Каждый студент обладает такими признаками как «Фамилия», «Имя», «Отчество», «Дата рождения». Каждая группа имеет признаки «Наименование», «Курс», «Поток». Студенты учатся в группе.
Объектное представление данной предметной области будет выглядеть следующим образом:
OV=<Cm, Lm>
Объектная модель предметной области состоят из 2-х классов:
Cm = { C1,C2}
Опишем первый класс (для упрощения описания методы опустим):
C1 = < «Студент», Fc1, Ø>
Fc1 = {Fc11, Fc12, Fc13, Fc14}
Fc11 = {«Фамилия», «Строковый», «Публичный»}
Fc12 = {«Имя», «Строковый», «Публичный»}
Fc13 = {«Отчество», «Строковый», «Публичный»}
Fc14 = {«Дата рождения», «Дата/время», «Публичный»}
Опишем второй класс (для упрощения описания методы опустим):
C2 = < «Группа», Fc2, Ø>
Fc2 = {Fc21, Fc22, Fc23}
Fc21 = {«Наименование», «Строковый», «Публичный»}
Fc22 = {«Курс», «Числовой», «Публичный»}
Fc23 = {«Поток», «Числовой», «Публичный»}
Опишем связи:
Lm = {L1}
L1 = < «Обучение» , «Простая агрегация», {C1, C2}, {R1,R2}, {M1}, Ø}
R1 = < «Обучается», C1>
R2 = < «Содержит», C2>
M1 = < C1, C2, M, 1 >, где M — много
Реляционное представление
Реляционное представление описывается совокупностью сущностей и связывающих их отношений[7].
RV=<Em, Rm>,
где Em — множество сущностей предметной области, Rm- множество отношений между сущностями.
Каждая сущность описывается именем и обладает набором атрибутов.
E=<N, Ke, Ae>,
где N — имя сущности, Ke — множество ключевых атрибутов, а Ae — множество неключевых атрибутов сущности.
Конкретный атрибут сущности (ключевой либо неключевой) можно описать следующим образом:
A=<N, D>,
где N — наименование атрибута, D- домен атрибута.
Отношение (реляция) является аналогом связи в объектной модели, Отношение также описывает взаимосвязь между сущностями.
R=<N, Er, Ro, Mr>,
где N — имя отношения, Er — множество сущностей, между которыми устанавливается отношение (количество элементов множества равно двум), Ro — множеств ролей сущностей (количество элементов множества равно двум), Mr — множество мощностей сущностей (количество элементов множества равно двум).
Роль в реляционном представлении описывается аналогично роли в объектной модели:
Ro=<N, E>,
где N — наименование роли, E — сущность, играющая данную роль
Мощность связи можно описать следующим образом:
M = <E1, E2, V1, V2>,
где E1- первая сущность, для которой описывается мощность, E2- вторая сущность, для которой описывается мощность, V1 — значение мощности для первой сущности отношения, V2 — для второй.
Реляционное представление вышеуказанной предметной области можно описать следующим образом:
Rv = <Em, Rm>
Реляционная модель содержит в себе 2 сущности
Em = {E1, E2}
E1 = < «Студент», Ke1, Ae1>
Ke1 = {Ke11}
Ke11 = < «Идентификатор», «Число» >
Ae1 = {Ae11, Ae12, Ae13, Ae14}
Ae11 = < «Фамилия», «Строка» >
Ae12 = < «Имя», «Строка» >
Ae13 = < «Отчество», «Строка» >
Ae14 = < «Дата рождения», «Дата/время» >
E2 = < «Группа», Ke2, Ae2>
Ke2 = {Ke21}
Ke21 = < «Идентификатор», «Число» >
Ae2 = {Ae21, Ae22, Ae23, Ae24}
Ae21 = < «Наименование», «Строка» >
Ae22 = < «Поток», «Число» >
Ae23 = < «Курс», «Число» >
Rm = {R1}
R1 = < «Обучение», {E1, E2}, {R1,R2}, {M1}>
R1 = < «Обучается», E1>
R2 = < «Содержит», E2>
M1 = < E1, E2, M, 1 >, где M — много
Выводы
Как можно заметить, представления(реляционное и объектное) имеют сходство. Объектное представление предметной области может служить расширением реляционного. В объектном представлении присутствует такое понятие, как «метод», которое не может быть соотнесено ни с одним понятием реляционного представления, поскольку в реляционном представлении описывается структура данных, а метод определяет способ поведения объекта, а не его свойства. Другие понятия, описывающие структуру данных, в объектной модели имеют расширенное представление.
Таким образом, встает задача преобразования расширенных свойств объектного представления предметной области для выражения их в терминах реляционной модели, а также обратное преобразование (для получения данных из БД).
Список использованных источников и литературы
1. TIOBE Software: Tiobe index [Электронный ресурс]. – Режим доступа: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html (дата обращения 03.01.2008).
2. Фундаментально про объектно-ориентированное программирование [Электронный ресурс]. – Режим доступа: http://www.interface.ru/home.asp?artId=4382 (дата обращения 03.01.2008).
3. Фаулер М, "Архитектура корпоративных приложений" / М.Фаулер — Вильямс, 2007 —544с.
4. Erich Gamma "Design Patterns: Elements of Reusable Object-Oriented Software" /Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides — Addison-Wesley Professional, 1994 — 416с.
5. Кириллов В.В. "Введение в реляционные базы данных" / В.В.Кириллов, Г.Ю.Громов — СПб:БХВ-Петербург, 2008
6. Диаграмма классов [Электронный ресурс]. – Режим доступа: http://ru.wikipedia.org/wiki/Диаграмма_классов (дата обращения 03.01.2008).
7. Entity-relationship model [Электронный ресурс]. – Режим доступа: http://en.wikipedia.org/wiki/Entity-relationship_model (дата обращения 03.01.2008).