Научная статья на тему 'Предметно-ориентированный язык описания диаграмм пакетов и диаграмм алгебраических типов данных расширенной нотации UML'

Предметно-ориентированный язык описания диаграмм пакетов и диаграмм алгебраических типов данных расширенной нотации UML Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
135
50
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ФУНКЦИОНАЛЬНОЕ ПРОГРАММИРОВАНИЕ / АЛГЕБРАИЧЕСКИЕ ТИПЫ ДАННЫХ / ПРОЕКТИРОВАНИЕ / UML

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Борисенков Д. С.

В работе рассматривается способ представления алгебраических типов данных и предметно-ориентированный язык (Domain Specific Language, DSL) описания структурных диаграмм проектирования для функциональных языков программирования.

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

Текст научной работы на тему «Предметно-ориентированный язык описания диаграмм пакетов и диаграмм алгебраических типов данных расширенной нотации UML»

ПРЕДМЕТНО-ОРИЕНТИРОВАННЫЙ ЯЗЫК ОПИСАНИЯ ДИАГРАММ ПАКЕТОВ И ДИАГРАММ АЛГЕБРАИЧЕСКИХ ТИПОВ ДАННЫХ РАСШИРЕННОЙ НОТАЦИИ UML

© Борисенков Д.С.*

Филиал Национального исследовательского университета «МЭИ»,

г. Смоленск

В работе рассматривается способ представления алгебраических типов данных и предметно-ориентированный язык (Domain Specific Language, DSL) описания структурных диаграмм проектирования для функциональных языков программирования.

Ключевые слова функциональное программирование, алгебраические типы данных, проектирование, UML.

Редактирование графического представления больших объемов данных -трудоемкий процесс. В связи с этим современные редакторы моделей систем (от программых средств для редактирования HTML до систем программирования для ПЛИС) предоставляют возможность описывать систему на каком-либо высокоуровневом языке. В данной работе предлагается DSL для описания структурных диаграмм проектирования для функциональных языков программирования [1].

Существует два подхода к созданию DSL:

1. Внутренний DSL представляет собой библиотеку для одного из языков программирования общего назначения (General Purpose Language, GLP), описывающую синтаксис и семантику языка. Несмотря на то, что GPL накладывает некоторые ограничения на синтаксис DSL, такой DSL прост в реализации и позволяет пользователю при необходимости выходить за рамки, описанных в библиотеках DSL средств и пользоваться средствами GPL.

2. Внешний DSL представляет собой самостоятельный компилятор или интерпретатор. Такой язык сложнее в реализации, однако он позволяет создавать более гибкий синтаксис, удобный для специалистов предметной области.

В данной работе рассматривается внутренний DSL.

1. Обзор существующих текстовых представлений диаграмм нотации UML.

Стандартным текстовым представлением для UML-диаграмм является представление в виде особого подмножества расширяемого языка разметки

* Аспирант кафедры Вычислительной техники.

(Extensible Markup Language, XML) - XML Metadata Interexchange (XMI) [2]. XMI используется в распространенных Computer Aided Software Engineering средствах (CASE-средствах) в качестве одного из форматов хранения данных и средства их преобразования из формата одного CASE-средства в формат другого. Однако в качестве DSL XMI использовать неудобно по причине информационной избыточности синтаксиса, присущей XML (пример приведен на рис. 1 и 2), что сводит на нет преимущества от редактирования диаграмм UML в текстовом виде.

<?xml versions"!.О" encoding="UTF-8"?Xxsd:schema xmlns:xsd="http://www.w3.org^0M/){MLSchenna" xmlns:xmi="http://www.omg.org/spec/XMI^D31D7Dl"> <xsd:import

namespace="http://www.omg.org/spec/XMI^D13D7M" schemaLocation="XMI.xsd"/> <xsd:complexType name="Classl"Xxsd:choice min0ccurs="0" maxOccurs="unbounded"Xxsd:elemerit ref="xmi:EKten£ion"/x/x£d:choiceXxsd :at tribute ref="xmi:id"/> <xsd:attributeGroup r6f="xmi:Obj6ctAttribs"/> </xsd:complexType> <xsd ¡element name="Classl" type="Classl"/X)(sd:complexType riame="Class2"> <xsd ¡choice min0ccurs="0" maxOccur5="unbounded"> <xsd ¡element n ame=l¥ield" type="xsd:string" nillable="true"/> <xsd ¡element rc*="\mi Extension"^ </xsd:choice> <xsd ¡attribute ref="xmi:id"/> <xsd ¡attributed roup ref='xmiiObjectAttribsV1, <xsd ¡attribute name="field" type="xsd¡string1' usE="optional"/> </xsd:complexType> <xsd ¡element name="Class2" type="Class2"/x/xsd:schema>

Рис. 1. Диаграмма Рис. 2. XMI представление

классов UML диаграммы

Помимо XMI существуют нотации, используемые в средствах текстового редактирования UML, таких как yUML, UML Graph, TextUML, Meta-UML, modsl, USE, PlantUML, WebSequence. Однако ни одно из этих средств не поддерживает стандарт UML полностью. В частности, поддерживаются не все диаграммы и объекты UML. Список поддерживаемых диаграмм приведен ниже:

- диаграмма классов (поддерживается всеми средствами из списка);

- диаграмма вариантов использования (yUML, MetaUML, USE, Plant-UML);

- диаграмма последовательности (UML Graph, PlantUML, USE, Web-Sequence);

- диаграмма деятельности (modsl, PlantUML).

Диаграмма пакетов не поддерживается данными средствами. Несмотря на то, что диаграмма алгебраических типов данных (АТД) может быть описана в терминах классов соответствующей диаграммы UML, DSL при таком

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

2. DSL для диаграммы пакетов.

Ввиду перечисленных в п. 1 недостатков существующих текстовых языков описания UML-диаграмм с точки зрения анализа и проектирования функциональных программ, приведем текстовый DSL, учитывающий специфику функционального программирования [1].

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

Листинг описанной выше структуры диаграммы пакетов на языке F# приведен на рис. 2. Пример объявления двух пакетов (A и B), не содержащих диаграмм внутри, в котором первый пакет (A) импортирует второй (B) приведен на рис. 4.

Рис. 3. DSL для диаграммы Рис. 4. Пример использования DSL

пакетов для диаграммы пакетов

Использованный на рисунке 4 способ описание диаграмм отражает способ представления данных, однако не является удобным в использовании. Определим нескольно функций. Функция package с единственным аргументом строкового типа создает пустой пакет с заданным именем. Оператор <<- добавляет в пакет тип данных. Оператор <— задает отношение импорта. Тогда описание, представленное на рис. 4 можно сократить как показано на рис. 5.

Рис. 5. Другой вариант описания пакетов

3. DSL для диаграммы АТД.

На диаграмме АТД отображаются кортежи, записи и алгебраические типы данных (являющиеся размеченным объединением декартовых произведений множеств значений некоторых типов).

Размеченным объединением множеств Ai, i е I, где I конечное множество индексов, является объединение пар:

Ц4 = U«х'7')1Х е Ai}

(1)

В функциональных языках программирования каждый из элементов размеченного объединения создается конструктором данных [4]. Тип данных на диаграмме АТД отображается в виде дерева. Каждая вершина может содержать имя и тип. Корнем дерева является вершина с именем типа данных. Вершины 2-го и последующих ярусов дерева содержат типы элементов записи, кортежа или АТД смежных вершин предыдущего яруса. Подробнее диаграмма описана в [1].

Листинг описанной выше структуры диаграммы АТД на языке F# приведен на рис. 6.

type TypeEither =

| Safe of System.Type | Unsafe of string type Type =

Prim of TypeEither | Plain of PlainCartes

//объявление типа данных //используется стандартных типов данных //используется для проектируемых типов данных //тип данных на диагрмамме //является или примитивным типом //или декартовым произведением типов

| Discr of DiscriminatedUnion //или АДТ and PlainCartes = { //декартово произведение

Name : string; //имя типа данных

Members : Type list; //члены декартового произведения

FieldNames : string list; //имена членов IsTuple : bool; //флаг кортежа

>

and DiscriminatedUnion = { Name : string;

Constructors : Constructor

>

and Constructor = {

Name : string;

Members : Type list;

>

//АДТ //Имя ДДТ ]_151:;//Конструкторы данных АДТ

//Конструктор данных //Имя конструктпра данных //Члены декартового произведения

Рис. 6. DSL для диаграммы АТД

Рассмотрим пример. АТД ADTX содержит два конструктора данных -Cons1 и Cons2. Cons1 содержит один элемент строкового типас именем Name. Конструктор Cons2, в свою очередь содержит один элемент - кортеж типа TupleX, который состоит из строкового и целочисленного элементов (см. рис. 7-8).

adt

:ADTX

«consv

Consl

«predicate» Cons2

«selector»

Name: String

i

:TupleX

let TupleX : PlainDecart = {Name = "TupleX"; Members = [Prim(String); Prim(Int)]; FieldNames = ["", ""]j isTuple = true;} let Consl:Constructor -

{Name="Consl"; Members=[Prim(String)]; } let Cons2:Constructor =

{Name="Cons2" j Members= [Plain(TupleX) ] ; } let ADTX : DiscriminatedUnion = {Name-"ADTX"; Constructors=[Consl; Cons2];}

:String ilnteger

Рис. 7. Диаграмма ЛТД

Рис. 8. DSL-описание диаграммы АТД

Введем функции record, tuple, adt, cons от одного строкового аргумента задающие соответственно пустые запись, кортеж, АДТ и конструктор данных с указанным именем. Перегрузим введенный ранее оператор <<- таким образом чтобы о добавлял соответствующие элементы к контейнерам в записях, кортежах, АДТ и конструкторах данных. Введем так же оператор <<+ который добавляет именованный элемент данных. Тогда диаграмму на рисунке 7 можно описать как показано на рисунке 9.

let ADTX = adt "ADTX" <<- (cons "Consl" <<- String) <<- (cons <<- "Cons2" <<- (tuple

Рис. 9. Альтернативное описание диаграммы АТД

Заключение

Предложенный DSL в виду его лаконичности по сравнению с XMI может быть использован для хранения и редактирования диаграмм пакетов и АТД расширенной нотации UML. Язык используется в программном средстве для проектирования в рамках функциональной парадигмы программирования.

Список литературы:

1. Борисенков Д.С. Диаграмма алгебраических типов данных расширенной нотации UML // Информационные технологии, энергетика и экономика (электроэнергетика и электротехника, теплоэнергетика и энергосбережение, математическое моделирование и совершенствование технических систем и технологических процессов). Сб трудов 10-ой Межд. науч.-техн. онф. студентов и аспирантов: в 3 т. Т. 1. - Смоленск: «Универсум», 2013. - С. 99-103.

2. Object Management Group. OMG MOF 2 XMI Mapping Specification. Version 2.4.1 [Электронный ресурс]. - Режим доступа: http://www.omg.org/ spec/XMI/2.4.1/PDF (дата обращения: 26 мая 2013).

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