Научная статья на тему 'Реализация метамодели языка UML на основе хранилища данных фирмы Google'

Реализация метамодели языка UML на основе хранилища данных фирмы Google Текст научной статьи по специальности «Компьютерные и информационные науки»

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

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

В статье рассматриваются особенности реализации библиотеки классов метамодели языка UML 2.4 на основе хранилища данных (Data Store) предоставляемого фирмой Google в своей инфраструктуре для разработки облачных приложений. Репозиторий для хранения модели, реализованный в соответствии со стандартом на язык UML, является центральной частью используемых для проектирования программного обеспечения CASE-инструментов. Как и другие приложения, CASE-инструменты могут быть разработаны как облачные приложения предоставляющие сервис через интернет-браузер. Данная реализация метамодели языка UML разработана для такого CASE-инструмента. При реализации метамодели использовался подход генеративного программирования по компактной спецификации модели.

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

Текст научной работы на тему «Реализация метамодели языка UML на основе хранилища данных фирмы Google»

Романов В.Ю.

факультет ВМК МГУ им. М.В. Ломоносова vromanov@cs.msu.su, vladimir.romanov@gmail.com

Реализация метамодели языка UML на основе хранилища

данных фирмы Google

Аннотация

В статье рассматриваются особенности реализации библиотеки классов метамодели языка UML 2.4 на основе хранилища данных (Data Store) предоставляемого фирмой Google в своей инфраструктуре для разработки облачных приложений. Репозиторий для хранения модели, реализованный в соответствии со стандартом на язык UML, является центральной частью используемых для проектирования программного обеспечения CASE-инструментов. Как и другие приложения, CASE-инструменты могут быть разработаны как облачные приложения предоставляющие сервис через интернет-браузер. Данная реализация метамодели языка UML разработана для такого CASE-инструмента. При реализации метамодели использовался подход генеративного программирования по компактной спецификации модели.

1. Введение

Унифицированный язык моделирования UML является стандартом для CASE-инструментов, используемых для моделирования программных систем. В стандарте на язык UML 2.4 [1], в частности, содержится описание модели языка UML называемой метамоделью языка UML. Описание метамодели содержится описание классов, из экземпляров которых строится UML-модель, а также описывается графическая нотация для представления классов метамодели и их связей на UML-диаграммах. Для такого описания классов метамодели используется графическая нотация языка UML. Для формализованного представления графической нотации языка UML также стандарте определены классы, из экземпляров которых должно строиться изображение UML-диаграмм [2]. Для обмена моделями и диаграммами между поддерживающими стандарт CASE инструментами в стандарте определено отображение классов метамодели в расширение языка XML - формат XML Metadata Interchange (XMI) [3].

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

Описание языка состоит из нескольких объемных документов превышающих [1, 2, 3] 700 страниц, которые постоянно изменяются и дополняются при появлении новых версий стандарта. Объем и регулярное изменение документов стандарта существенно затрудняют реализацию классов метамодели и взаимодействующих с ней компонентом метамодели.

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

Выбор языка для создания компактной спецификации весьма важен. В документах, описывающих стандарт языка UML, классы метамодели и связи между ними описываются с помощью диаграмм UML с комментариями к диаграммам на английском языке. В дополнение к этим диаграммам в документе UML содержится описания на формальном текстовом языке Object Constraint Language (OCL)[]. Такие описания содержат либо логические выражения, которые должны быть всегда истинными для атрибутов и ролей ассоциаций классов модели. Либо на языке OCL описываются алгоритмы для вычисления значений порождаемых атрибутов классов метамодели. Для формального описания классов метамодели в дополнение к текстам также предоставляется описание модели на расширении языка XML - языке XMI.

Рис. 1. Фрагмент спецификации метамодели языка UML с использованием графической нотации UML

Наличие этих трех разрозненных и весьма различающихся языков описания стандарта UML затрудняет их использование для генерации реализации метамодели на языке программирования. Удобная для визуального восприятия графическая нотация затрудняет ввод

информации о метамодели в генерирующую программу. Для текстового описания на языке OCL нет соответствующего текстового описания контекста, в котором выражения на OCL должны вычисляться. Описание на языке XMI удобно для распознавания программой, но затрудняет определение его соответствия описанию на языке графической нотации, а также определения контекста для вычисления выражений на языке OCL.

По указанным выше причинам в качестве языка спецификации был разработан и использован текстовый язык TinyUML, синтаксис и семантика которого эквивалентны используемому для описания классов метамодели подмножеству графической нотации. Нотация языка TinyUML приближена к обозначениям, используемым на UML-диаграммах и описании стандарта. Текстовая природа языка позволяет в одном текстовом файле хранить описание классов и связей между ними, которое также является контекстом для вычисления выражений на OCL, а также служить исходными данными для генератора реализации на языке программирования.

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

package Ownership {

abstract class Element {};

as /ownedElement[*] : Element {union} <->/owner[0:1] : Element {union};

};

package Namespace {

abstract class NamedElement : Ownership::Element {

at name[0:1] : String = ""; at /qualifiedName[0:1] = "";

};

abstract class Namespace : NamedElement {};

as /member[*] : NamedElement {union} <- ns[1] : Namespace;

as /ownedMember[*] : NamedElement {union, subsets ownedElement, subsets member}

<-> /namespace[0:1] : Namespace {union, composite, subsets owner};

};

Как можно заметить, текстовые элементы, показанные на UML диаграмме, в языке TinyUML полностью повторяются. Графические элементы нотации UML представлены в виде текста. Так, например, отношение ассоциации между классами представлено с помощью ключевого слова as языка TinyUML, а направленность отношения ассоциации - символами больше и равно.

На приведенном выше фрагменте спецификации описаны базовые

классы метамодели, представляющие наиболее фундаментальные свойства элементов модели. Так, из спецификации следует, в частности, что пространство имен (представлено абстрактным классом Namespace) может включать в себя неограниченно число именованных элементов (представленных абстрактным классом NamedElement), которые могут входить не более чем в одно пространство имен. Указанные классы служат базовыми классами для конкретных классов, которые представляют в модели пространства имен и их элементы. Например, для пакетов, классов и интерфейсов представляющих в метамодели соответствующие конструкции объектно-ориентированных языков программирования.

3. Реализация метамодели языка UML как части облачного приложения фирмы Google

В последнее время все большее распространение получает разработка приложений как веб-сервисов расположенных на облаке и доступных через обычный интернет браузер. Как такое облачное приложение может быть разработан и CASE-инструмент. Инфраструктура фирмы Google[5] для разработки облачных приложений получает все большее распространение. Для разработки как клиентской, так и серверной части предоставляет инструментарий для написания приложения, в частности, на языке Java.

Особенностью облачных приложений фирмы Google является способ хранения данных этим приложением на сервере. Файловая система сервера, на котором расположено приложение, может использоваться приложением лишь для хранения статической информации. Для работы же с изменяемой информацией инфраструктура облачного приложения предоставляет специализированное хранилище данных Data Store [6]. Хранилище данных представляет собой масштабируемую объектную базу данных, каждый объект (Entity) которой может включать в себя одно или несколько свойств. Свойства объектов имеют имена и могут хранить значения одного из поддерживаемых типов данных, а также могут быть ссылкой на другой объект. Это позволяет создавать между объектами, в частности, отношения один-к-многим и многие-к-многим. Некоторые из свойств могут быть ключами объекта и использоваться для уникальной идентификации объектов. Для работы с данными хранилище данных предоставляется схожий с языком SQL язык запросов Google Query Language (GQL) [7]. Механизм транзакций хранилища данных использовался для реализации изменения состояния базы данных сгенерированными методами классов метамодели.

Указанные возможности хранилища данных была использованы для реализации метамодели языка UML как множества хранимых в базе специализированных объектов-сущностей. Реализация метамодели генерировалась по спецификации метамодели на языке Java. Базовым классом такой реализации классов метамодели является класс-сущность из API хранилища данных. Таким образом, от базового класса из API

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

Стандарт на язык UML [1, 2, 3] не содержит явно описания функционального интерфейса предоставляемого классами метамодели. Вместе с тем свойства и множественность атрибутов и ролей отношения ассоциации неявно определяют имена и сигнатуры методов классов метамодели. Разработавшим стандарт языка UML консорциумом фирм Object Management Group разработан язык определения интерфейсов IDL [8] используемый для описания функциональных интерфейсов разрабатываемых консорциумом стандартов. Вместе с тем для одного из подмножеств языка UML отображение классов метамодели в спецификацию на языке IDL [9] определено явно. Определенная аналогичным образом функциональность классов метамодели поддерживается и в широко используемой реализации метамодели UML для среды Eclipse [10]. Такой же функциональный интерфейс определен и в реализации метамодели с использования хранилища данных Google.

4. Заключение

Важнейшей компонентой CASE-инструмента является репозиторий для хранения моделей программных систем. Определение в стандарте на язык UML [1, 2, 3, 4] модели репозитория CASE-инструмента, выполненное с помощью графической нотации самого языка UML, получило название метамодели языка UML. Большой объем стандарта (более 700 страниц) существенно осложняет непосредственную реализацию метамодели. В статье рассматривается применение апробированного ранее при реализации на языке C# метамодели для CASE-инструмента интегрированного в среду Visual Studio [11]. Данный подход был успешно применен к программной генерации реализации метамодели на языке Java c использованием хранилища данных фирмы Google. Данная реализация метамодели разработана для CASE-инструмента [12] реализованного как облачное приложение фирмы Google.

Литература

1. Object Management Group, UML 2.4 Superstructure Specification,

OMG document. http://www.omg.org/spec/UML/2A1/

2. Object Management Group, UML Diagram Interchange, OMG document, http://www.omg.org/spec/UMLDI/1.0/PDF

3. Object Management Group, XML Metadata Interchange, OMG document,

http://www.0mg.0rg/spec/XMI/2.4.1/

4. Object Constraint Language, OMG document, http://www.0mg.0rg/spec/OCL/2.3.l/

5. Инфраструктура облачных приложений фирмы Google. http://code.google.com/intl/ru-RU/appengine/

6. Хранилище данных Data Store App Engine фирмы Google. http://www.googleappengine.ru/docs/datastore/

7. Описание языка Google Query Language

http: //www.googleappengine.ru/docs / datastoregqlrefere/ nce.html

8. Interface Definition Language (IDL) 3.5 http://www.omg.org/spec/IDL35/

9. MOF to IDL Mapping, http://www.omg.org/spec/MOF2I/2.o/

10. Model Development Tools, http://www.eclipse.org/modeling/mdt/?project=uml2

11. В.Ю.Романов, Реализация метамодели языка UML 2.0 на языке C# // Сборник трудов первой международной научно-практической конференции "Современные информационные технологии и ИТ-образование». 19-23 сентября 2005 г. С.332-339.

12. Романов В.Ю. Сервис анализа и визуализации кода и текстов на языках программирования как облачное приложение Google // Сб. трудов V Международной научно-практической конференции "Современные информационные технологии и ИТ-образование". М., 2011. С.743-748, 12-14 декабря 2011 г.

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