UML - это стандартный язык для составления чертежей программного обеспечения. Однако ни один язык в достаточной мере не пригоден для выражения всех нюансов модели в разных предметных областях на протяжении работы системы. Поэтому в идею UML заложена открытость - иными словами, возможность расширять язык контролируемым способом. К механизмам расширения UML (см. главу 6) относятся:
Стереотип (Stereotype) расширяет словарь UML, то есть позволяет создавать из существующих строительных блоков новые, специфичные для конкретной решаемой задачи. Помеченное значение (Tagged value) расширяет свойства строительного блока UML, то есть дает возможность включать новую информацию в спецификацию элемента. Ограничение (Constraint) расширяет семантику строительного блока UML, позволяя добавлять новые или модифицировать существующие правила.
Эти три механизма расширения в их совокупности позволяют приспособить UML к нуждам вашего проекта. Они также оставляют возможность адаптировать UML к новым технологиям программирования, например к вероятному появлению более мощных языков распределенного программирования и к взаимопроникновению языков моделирования программных и аппаратных средств. Разрешается добавлять новые строительные блоки, модифицировать спецификации существующих и даже изменять их семантику. Естественно, это надо делать контролируемым способом, так чтобы изменения не затронули сам смысл языка UML как средства обмена информацией.
UML можно использовать и не прибегая к механизмам расширения. В действительности за счет трактовки всех вариантов строительных блоков UML как расширений его ядро удалось сделать компактнее и проще.
Однако при построении сложных моделей, когда возникает необходимость визуализировать или специфицировать тонкую, но существенную семантику, вы снова и снова будете пользоваться стереотипами, помеченными значениями и ограничениями. Некоторые расширения обрели такую популярность, что были определены как стандартные элементы UML.
В настоящем разделе описываются все стандартные элементы подобного рода.
Следующие стереотипы определены в качестве стандартных элементов UML. В приведенной таблице для каждого стереотипа указываются имя, символ UML, к которому применим стереотип, и назначение.
Примечание: Некоторые из элементов, представленных в таблице, являются, строго говоря, не стереотипами, а стандартными ключевыми словами. Различие между ними довольно тонкое. В метамодели UML некоторые элементы, например trace, имеют очевидную семантику, то есть являются явной частью метамодели, а не настоящими стереотипами. С точки зрения разработчика, однако, они все равно изображаются в нотации стереотипов. Такие элементы определены как стандартные ключевые слова, чтобы можно было зарезервировать их использование в согласии с метамоделъю UML. В таблице ключевые слова выделены курсивом.
Обычно стереотипный элемент изображается следующим образом: имя стереотипа размещается над именем элемента и заключается в двойные кавычки, например "trace". Co стереотипом может быть ассоциирована пиктограмма, используемая как альтернативная форма визуализации данного элемента. Хотя в самом UML такие пиктограммы ни для одного стереотипа не заданы, в таблице все же приводятся некоторые общепринятые изображения.
Стереотип/ ключевое слово | Символ, к которому он применим | Назначение |
actor | Класс (class) | Определяет связанное множество ролей, которые играет пользователь прецедента при взаимодействии с ним |
access | Зависимость (dependency) | Сообщает, что открытое содержание целевого пакета доступно в пространстве имен исходного пакета |
association | Концевая точка связи (link end) | Указывает, что соответствующий объект видим ассоциацией |
become | Сообщение (message) | Целевой объект совпадает с исходным, но в более поздний момент времени. При этом, возможно, у него будут другие значения, состояния или роли |
bind | Зависимость (dependency) | Исходный класс инстанцирует целевой шаблон с данными фактическими параметрами |
call | Зависимость (dependency) | Исходная операция вызывает целевую |
copy | Сообщение (message) | Целевой объект - это точная, но независимая копия исходного |
create | Событие (event), сообщение (message) | Целевой объект создан в результате события или сообщения |
derive | Зависимость (dependency) | Исходный объект может быть вычислен по целевому |
destroy | Событие (event), сообщение (message) | Целевой объект уничтожен в результате события или сообщения |
document![]() | Компонент (component) | Компонент представляет документ |
enumeration | Класс (class) | Определяет перечислимый тип, включая его возможные значения как набор идентификаторов |
exception | Класс (class) | Определяет событие, которое может быть возбуждено или перехвачено операцией |
executable![]() | Компонент (component) | Описывает компонент, который может быть выполнен в узле |
extend | Зависимость (dependency) | Целевой вариант использования расширяет поведение исходного в данной точке расширения |
facade | Пакет (package) | Пакет, который является лишь представлением другого пакета |
file![]() | Компонент (component) | Компонент, который представляет документ, содержащий исходный код или данные |
framework | Пакет (package) | Пакет, состоящий в основном из образцов (паттернов) |
friend | Зависимость (dependency) | Исходный класс имеет специальные права видимости в целевом |
global | Концевая точка связи (link end) | Соответствующий объект видим, поскольку принадлежит объемлющей области действия |
import | Зависимость (dependency) | Открытое содержание целевого пакета становится частью плоского пространства имен исходного пакета, как если бы оно было объявлено непосредственно в нем |
implementation | Обобщение (generalization) | Потомок наследует реализацию родителя, но не открывает и не поддерживает его интерфейсов, вследствие чего не может быть подставлен вместо родителя |
implementationClass | Класс (class) | Реализация класса на некотором языке программирования |
include | Зависимость (dependency) | Исходный прецедент явно включает поведение другого прецедента в точке, определяемой исходным |
instanceOf | Зависимость (dependency) | Исходный объект является экземпляром целевого классификатора |
instantiate | Зависимость (dependency) | Операции над исходным классом создают экземпляры целевого класса |
interface | Класс (class) | Описывает множество операций, определяющих, что может делать класс или компонент |
invariant | Ограничение (constraint) | Ограничение, которое всегда должно выполняться для ассоциированного элемента |
library ![]() | Компонент (component) | Статическая или динамическая объектная библиотека |
local | Концевая точка связи (link end) | Соответствующий объект видим, так как находится в локальной области действия |
metaclass | Классификатор (classifier) | Классификатор, все объекты которого являются классами |
model | Пакет (package) | Описывает семантически замкнутую абстракцию системы |
parameter | Концевая точка связи (link end) | Соответствующий объект видим, так как является параметром |
postcondition | Ограничение (constraint) | Ограничение, которое должно выполняться после выполнения операции |
powertype | Класс (class) | Классификатор, все объекты которого являются потомками данного родителя |
Зависимость (dependency) | Говорит, что целевой классификатор связан с исходным отношением powertype | |
precondition | Ограничение (constraint) | Ограничение, которое должно выполняться перед выполнением операции |
process | Класс (class) | Классификатор, экземпляр которого представляет ресурсоемкий поток управления |
refine | Зависимость (dependency) | Говорит, что исходный объект является более детальной абстракцией, чем целевой |
requirement | Комментарий (comment) | Описывает желаемое свойство или поведение системы |
responsibility | Комментарий (comment) | Описывает контракт или обязательство класса |
send | Зависимость (dependency) | Исходная операция посылает целевое событие |
signal | Класс (class) | Асинхронный стимул, который передается одним экземпляром другому |
stereotype | Класс (class) | Классификатор - это стереотип, который может быть применен к другим элементам |
stub | Пакет (package) | Пакет выступает в роли заместителя для открытого содержимого другого пакета |
subsystem | Пакет (package) | Описывает группирование элементов, ряд которых составляет спецификацию поведения других элементов |
system | Пакет (package) | Описывает пакет, представляющий всю моделируемую систему |
table![]() | Компонент (component) | Компонент, представляющий таблицу базы данных |
thread | Класс (class) | Классификатор, экземпляр которого представляет облегченный поток управления |
trace | Зависимость (dependency) | Целевой элемент - это исторический предок исходного |
type | Класс (class) | Абстрактный класс, который используется только для спецификации структуры и поведения (но не реализации) множества объектов |
use | Зависимость (dependency) | Семантика исходного элемента зависит от семантики открытого содержания целевого элемента |
utility | Класс (class) | Определяет класс, для которого область действия всех атрибутов и операций - класс |
Приведенные ниже помеченные значения определены как стандартные элементы UML. Для каждого помеченного значения в таблице указывается имя, символ UML, к которому оно применимо, и назначение.
В большинстве случаев помеченное значение изображается посредством размещения метки и значения под именем элемента, к которому оно присоединено. При этом все сочетание заключается в фигурные скобки, например {location = client }. Если значение метки представляет собой длинный текст, то помеченное значение можно поместить в дополнительный раздел классификатора.
Помеченное значение | Символы, к которым оно применимо | Назначение |
documentation | Все элементы | Содержит комментарий, описание или пояснение к тому элементу, к которому присоединено |
location | Большинство элементов | Определяет узел или компонент, которому принадлежит элемент |
persistence | Класс (class), ассоциация (association) атрибут (attribute) | Определяет, сохраняется ли состояние , экземпляра после завершения создавшего его процесса. Состояния бывают устойчивыми (сохраняющими значение) или временными (не сохраняющими значение) |
semantics | Класс (class), операция (operation) | Описывает назначение класса или операции |
Приведенные ниже ограничения определены как стандартные элементы UML. Для каждого помеченного значения в таблице указывается имя, символ UML, к которому оно применимо, и назначение.
В большинстве случаев ограничение размещается рядом с элементом и заключается в фигурные скобки, например {complete}. Можно изображать ограничение и по-другому - помещая в примечание, соединенное с элементом зависимостью.
Ограничение | Символ, к которому оно применимо | Назначение (о чем говорит данное ограничение) |
complete | Обобщение (generalization) | В модели специфицированы все потомки в данном обобщении (хотя некоторые могут быть скрыты на диаграммах), и дополнительных потомков определять не разрешается |
destroyed | Экземпляр (instance), связь (link) | Экземпляр или связь уничтожаются до завершения выполнения объемлющего взаимодействия |
disjoint | Обобщение (generalization) | Объекты данного родителя могут иметь не более одного заданного потомка в качестве типа |
implicit | Ассоциация (association) | Отношение является не явно выраженным, а концептуальным |
incomplete | Обобщение (generalization) | Специфицированы не все потомки в обобщении (учитывая и скрытых). Разрешается определять дополнительных потомков |
new | Экземпляр (instance), связь (link) | Экземпляр или связь создаются в процессе выполнения объемлющего взаимодействия |
or | Ассоциация (association) | Из множества ассоциаций ровно одна является явно выраженной для каждого ассоциированного объекта |
overlapping | Обобщение (generalization) | Объекты данного родителя могут иметь более одного заданного потомка в качестве типа |
transient | Экземпляр (instance), связь (link) | Экземпляр или связь создаются в процессе выполнения объемлющего взаимодействия, но уничтожаются до его завершения |
Релятивисты и позитивисты утверждают, что "мысленный эксперимент" весьма полезный интрумент для проверки теорий (также возникающих в нашем уме) на непротиворечивость. В этом они обманывают людей, так как любая проверка может осуществляться только независимым от объекта проверки источником. Сам заявитель гипотезы не может быть проверкой своего же заявления, так как причина самого этого заявления есть отсутствие видимых для заявителя противоречий в заявлении.
Это мы видим на примере СТО и ОТО, превратившихся в своеобразный вид религии, управляющей наукой и общественным мнением. Никакое количество фактов, противоречащих им, не может преодолеть формулу Эйнштейна: "Если факт не соответствует теории - измените факт" (В другом варианте " - Факт не соответствует теории? - Тем хуже для факта").
Максимально, на что может претендовать "мысленный эксперимент" - это только на внутреннюю непротиворечивость гипотезы в рамках собственной, часто отнюдь не истинной логики заявителя. Соответсвие практике это не проверяет. Настоящая проверка может состояться только в действительном физическом эксперименте.
Эксперимент на то и эксперимент, что он есть не изощрение мысли, а проверка мысли. Непротиворечивая внутри себя мысль не может сама себя проверить. Это доказано Куртом Гёделем.
Понятие "мысленный эксперимент" придумано специально спекулянтами - релятивистами для шулерской подмены реальной проверки мысли на практике (эксперимента) своим "честным словом". Подробнее читайте в FAQ по эфирной физике.
|
![]() |