Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методы и средства_пособие.doc
Скачиваний:
89
Добавлен:
21.05.2015
Размер:
4.97 Mб
Скачать

1.6 Общие механизмы

В UML имеются общие правила и механизмы, которые относятся не к конкретным элементам модели, а ко всему языку в целом. Обычно выделяют следующие общие механизмы:

  • внутреннее представление модели;

  • дополнения;

  • подразделения;

  • механизмы расширения.

Степень значимости и сложности этих механизмов, равно как и их влияние на применение языка отнюдь неодинакова.

Модель имеет внутреннее представление — как бы иначе работали инструменты? Для графов (а модель — это нагруженный граф) известно множество разнообразных способов их представления в компьютере.

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

У каждого элемента модели есть базовая графическая нотация. Эта нотация может быть расширена путем использования дополнительных текстовых и/или графических объектов, присоединяемых к базовой нотации. Такие дополнительные объекты так и называются — дополнения2 Дополнения позволяют показать на диаграмме те части внутреннего представления модели, которые не отображаются с помощью базовой графической нотации.

Например, базовой нотацией отношения ассоциации является сплошная линия. Эта базовая нотация может быть расширена целым рядом дополнений: именем ассоциации, указанием кратности полюсов ассоциации, ролей, направления навигации, агрегации и т. д. Еще пример: базовой нотацией класса является прямоугольник с именем класса. Эта нотация может быть расширена разделами со списками атрибутов и операций, дополнительными разделами, указанием кратности, стереотипа и т. д. (Рисунок 1.17).

Рисунок 1.17. Пример использования дополнений (украшений)

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

Дихотомия класс-объект означает, что всегда четко различается, о чем идет речь: об общем описании некоторого множества однотипных объектов (т. е. о классе) или о конкретном объекте из некоторого множества однотипных объектов (т. е. об экземпляре класса). Это важное различие передается единообразно: если это конкретный объект (экземпляр класса), то его имя подчеркивается; если это класс (описание множества), то оно не подчеркивается.

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

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

Механизмы расширения позволяют определять новые элементы модели на основе существующих управляемым и унифицированным способом. Таких механизмов три:

  • помеченные значения;

  • ограничения;

  • стереотипы.

Эти механизмы не являются независимыми — они тесно связаны между собой.

Помеченное значение — это пара: имя свойства и значение свойства, которую можно добавить к любому стандартному элементу модели.

Другими словами, помеченное значение — это свойство, добавляемое к внутреннему представлению модели. К любому элементу модели можно добавить любое помеченное значение, которое будет хранится также, как и все стандартные свойства данного элемента. Способ обработки помеченного значения, определенного пользователем, стандартом не определяется и отдается на откуп инструменту.

Помеченные значения записываются в модели в виде строки текста, имеющей следующий синтаксис: в фигурных скобках указывается пара: имя и значение, разделенные знаком равенства. Можно указывать сразу список пар, разделяя элементы списка запятыми. Если из контекста ясно, какое значение является значением по умолчанию, то знак равенства вместе со значением можно опустить. На рисунке 1.18 приведен пример использования помеченных значений.

Рисунок 1.18. Пример использования помеченных значений

Ограничение — это логическое утверждение относительно значений свойств элементов модели.

Логическое утверждение может иметь два значения: истина и ложь, то есть задаваемое им условие либо выполняется, либо не выполняется. Указывая ограничение для элемента модели, мы расширяем его семантику, требуя, чтобы ограничение выполнялось. Ограничение может относится к отдельному элементу или к совокупности элементов модели.

Ограничения записываются в виде строки текста, заключенной в фигурные скобки. Это может быть неформальный текст на естественном языке, логическое выражение языка программирования, поддерживаемого инструментом или выражение на некотором другом формальном языке, специально включенного для этой цели в UML. Аналогично помеченным значениям, ограничение можно написать после имени элемента или в отдельном примечании, присоединенном к элементу. На рисунке 1.19 приведен пример использования ограничения.

Рисунок 1.19. Пример использования ограничения

Стереотип — это определение нового элемента моделирования в UML на основе существующего элемента моделирования.

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

После того, как стереотип определен, его можно использовать как элемент модели нового типа. Если при создании стереотипа не использовались дополнения и графическая нотация взята от базового элемента модели, на основе которого определен стереотип, то стереотип элемента обозначается при помощи имени стереотипа, заключенного в двойные угловые скобки (типографские кавычки), которое помещается перед именем элемента модели. Если же для стереотипа определена своя нотация, например, новый графический символ, то указывается этот символ. Впрочем, для ясности, можно указать как имя стереотипа, так и графический символ (значок). На рисунке. 1.20 приведен пример использования стереотипа «PowerUser», который мы определили на базе стандартного стереотипа действующего лица.

Рисунок 1.20. Пример определения и использования стереотипа

В UML имеется большое количество предопределенных стереотипов.

Стереотипы являются мощным механизмом расширения языка, однако им следует пользоваться умеренно. Определяя большое число нестандартных стереотипов, легко сделать модель непонятной никому, кроме автора.

Не следует путать стереотип и отношение обобщения. Пусть суперкласс A является обобщением подкласса B. Тогда как A, так и B являются экземплярами одного и того же метакласса, определенного в метамодели. Если же стереотип C определен на основе типа D, то в метамодели им соответствуют разные метаклассы. Точнее говоря, в метамодели D является суперметаклассом для C. Другими словами, можно считать, что стереотип — это обобщение на мета уровне.