Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.

Attribute (атрибут)

Атрибутом называется описание поименованного слота определенного типа какого-либо класса. Каждый объект этого класса содержит отдельное значение для данного типа.

Семантика

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

Структура

У атрибута есть несколько основных составляющих. Их подробное описание вы найдете в отдельных статьях нашей "Энциклопедии". Ниже мы перечислим их с кратким пояснением.

Changeability (изменяемость) Указывает, может ли значение слота изменяться после инициализации; перечисление. По умолчанию используется значение changeable. Прочими возможными вариантами являются:
changeable
Без ограничений на изменения (устанавливается по умолчанию).
addOnly
Во множество значений атрибута могут быть внесены дополнения. После того как новое значение будет создано, его нельзя ни изменять, ни уничтожать (имеет смысл только в том случае, если значение множественности больше единицы).
frozen
После инициализации объекта значения изменять нельзя. Во множество значений атрибута также нельзя вносить никаких дополнений.
initial value (исходное значение)

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

Multiplicity (множественность) Допустимое количество существующих одновременно значений атрибута. Самое обычное - "ровно один" - указывает на скалярный атрибут. Значение "нуль или один" указывает на атрибут с необязательным значением. Отсутствующее значение отличается от любого другого значения для данного типа атрибута. (Другими словами, отсутствие значения отличается от значения, равного нулю, и представляет собой пустое множество.)
Прочие виды множественности указывают на атрибуты, у которых потенциально может быть много значений. Если множественность представлена не одним числом, то количество значений атрибута может меняться. Множественность "много" указывает на неограниченное количество значений.
name (имя)

Имя атрибута. Строка, уникальная в данном классе и у его предков. Имя также не должно иметь дубликатов среди имен ролей ассоциации, доступных этому классу.

owner scope (область действия хранения) Значение атрибута может быть различным для каждого объекта (атрибут с областью действия в масштабе экземпляра) или же единым для всех объектов данного класса (атрибут с областью действия в масштабе класса). Большая часть атрибутов имеет область действия в масштабе экземпляра. В них содержится информация о конкретном объекте. Атрибуты с областью действия в масштабе класса несут в себе информацию обо всем классе. Это единственный слот, в котором указывается значение, для целого класса.
Атрибут с областью действия в масштабе экземпляра является описанием значения, которое не существует до того момента, пока не будет создан экземпляр объекта. В отличие от него атрибут с областью действия в масштабе класса содержит значение, действительное на протяжение всего существования системы.
target scope (целевая область действия)

Значением атрибута может быть экземпляр класса или сам класс. В первом случае целевым будет область действия экземпляра, это является значением по умолчанию. Во втором случае целевым будет область действия класса. Используется это редко, как правило, с какими-либо метамоделями.

type (тип) Указывает на класс или тип данных, экземплярами которого являются значения, содержащиеся в слоте. Значение может быть экземпляром потомка данного класса или типа данных.
visibility (видимость) Указывает, видим ли атрибут для других классов. Перечисление с возможными значениями открытый (public), защищенный (protected) и закрытый (private). К ним можно добавлять и другие значения, в зависимости от используемых при реализации языков программирования.

Нотация

Атрибут представлен в виде строки текста, в которой заключены различные свойства. По умолчанию синтаксис атрибута выглядит следующим образом:

"стереотип"необяз видимость необяз имя множественность необяз: тип    необяз =
   =исходное эначение обяз {строка свойств} необяз

Видимость. Для изображения видимости служат пунктуационные знаки. Кроме этого, видимость может указываться с помощью ключевого слова, находящегося в строке свойств. Последний вариант используется в случае, когда это удобнее использовать в данном языке реализации или по желанию разработчика. Видимость бывает:
+ (открытая) Каждый класс, который видит этот класс, видит и атрибут
# (защищенная) Атрибут является видимым для класса или одного из его потомков
- (закрытая) Атрибут является видимым только для данного класса
Имя. Имя обозначается в строке идентификатора.
Тип. Тип атрибута указывается в текстовой строке, определяющей классификатор. Имя класса или типа данных является легитимным выражением, указывающим на тип данных, к которому должен принадлежать данный атрибут. Синтаксис выражения зависит от языка, на котором это выражение написано. В каждом языке есть свой синтаксис для построения новых, типов данных на основе простых. Например, в языке C++ есть синтаксис для указателей, массивов и функций. В языке Ada, кроме того, есть синтаксис для поддиапазонов (subranges). Язык выражения является частью внутренней модели системы, однако при этом не всегда указывается на диаграммах. Язык реализации либо должен быть известен для всей диаграммы системы, либо очевиден, исходя из синтаксиса выражений.
Строка с указанием типа атрибута может опускаться. При этом она все равно сохраняется в модели.
Множественность. Выражение, описывающее множественность, пишется в квадратных скобках после имени атрибута. Если множественность атрибута представляет собой "ровно один", то ее можно не указывать, так как она означает, что у каждого объекта есть только один слот, содержащий значение данного типа (наиболее распространенный случай). Во всех других случаях множественность должна быть указана. См. статью энциклопедии multiplicity, в которой содержится полное обсуждение синтаксиса множественности.
Например:

colors [3]: Saturation Массив из трех насыщенностей цвета
noints [2..*]: Point Массив из двух или более точек

Обратите внимание, что множественность вида 0..1 позволяет использовать значения null - то есть отсутствие значения. Значение null не входит в предметную область большинства типов данных. Таким образом, этот вид множественности дает возможность использовать значение, находящееся вне границ определенного типа данных. Значение null нередко является частью реализации указателей (однако даже в этом случае оно нередко используется условно. В языке С или C++ значение null относится к неопределенному значению для адресации памяти). Ниже вы видите объявление, которое позволяет различать значение null, и пустую строку. Такое различение поддерживают C++ и другие языки программирования.

name [0..1]: String Если имя (name) отсутствует, значит, используется значение    null

Исходное значение. Исходное значение указывается строкой. Язык для интерпретации выражения при этом не указывается явно, но присутствует в модели. В случае отсутствия исходного значения строку и знак равенства можно опустить. Если множественность включает в себя нуль и при этом исходное значение не указано, атрибут инициализируется значением null (нулевое количество повторений).
Изменяемость. Изменяемость обозначается ключевым словом. По умолчанию используется значение changeable.
Именованное значение. К атрибуту, как и к любому другому элементу модели, можно добавлять именованные значения. Именованное значение имеет форму тег = значение, где тег - это имя, а значение - его содержание. Именованные значения вместе с ключевыми словами помешаются в отдельный список свойств, разделенных запятыми. Список берется в скобки.
Область действия. Атрибут с областью действия в масштабе класса помечается подчеркиванием имени и строки, содержащей выражение для типа данных. В противном случае этот атрибут актуален в масштабе экземпляра. Такая нотация основывается на том, что атрибут с областью действия в масштабе класса является значением для работающей системы точно так же, как и объект, - экземпляр класса. Таким образом, подчеркиванием выделяется и то и другое.
Class-scope-attribute
На рис. 32 представлены объявления некоторых атрибутов.
Рис. 32. Атрибуты
Рис. 32. Атрибуты

Варианты представления

Синтаксис языка программирования. Синтаксис строки, описывающей атрибут, можно заимствовать из используемого языка программирования, например C++ или Smalltalk. В строку также можно включать особые свойства в виде комментария.

Стилистические указания

Имена атрибутов пишутся обычным шрифтом.

Обсуждение

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

Стандартные элементы

persistence (персистентность).

Алфавитный указатель