属性是一种结构特征,它可以表示
分类器的属性,
一个构件端的关联,
结构化分类器的一部分。
作为一种结构特征,属性表示分类器结构的某个命名部分。例如,患者类别可以有身份证、姓名、性别、出生日期等。作为它的属性。
患者类别的属性(属性)有
id,姓名,性别,出生日期,家庭住址,拜访。
创建分类器实例时,每个非静态属性都成为该实例状态的一部分,并通过将属性名称映射到实例状态所包含的一个或多个特定值来实现。每个属性的值都有特定的类型,并被分配到实例的插槽中或与该实例相关联。
Patient类的Instance newPatient
具有指定值的插槽。
属性的一般语法如下所示:
property ::= [ visibility ] ['/']
property-name [ ':' property-type ] [ '[' multiplicity
']' ] [ '=' default-value ] [ property-modifiers
]
visibility ::= '+' | '~' | '#'
| '-'
property-modifiers ::= '{' property-modifier
[ ',' property-modifier ] * '}'
property-modifier ::= 'id' |
'readOnly' | 'ordered' | ( 'seq' | 'sequence'
) | 'unique' | 'nonunique' | 'union' |
'redefines' property-name | 'subsets'
property-name | property-constraint
可选可见性是属性的可见性。请注意,没有默认可见性。此外,可见性可能会被抑制在图表上显示,即使它在模型中有一些值(例如,由UML工具存储)。因此,如果可见性没有显示在图表上,它要么没有被指定,要么被抑制。
正斜杠“/”表示属性是派生的。
属性类型是由分类器名称表示的属性类型。
属性可以有多重性。多重性界限限制属性值集合的大小。默认情况下,最大界限为1
默认值选项是属性值的表达式。
属性可以有可选的修饰符:
修饰符
|
描述
|
id |
属性是拥有该属性的类的标识符的一部分。
|
readOnly |
属性是只读的(isReadOnly
= true) |
unique |
多值属性没有重复的值(isUnique
= true)。 |
nonunique
|
多值属性可能有重复的值(isUnique
= false)。 |
sequence
(or seq) |
属性是有序包(isunique=false,is
ordered=true)。 |
union |
属性是其子集的派生并集。
|
redefines
property-name |
属性重新定义名为property-name的继承属性。
|
subsets property-name
|
属性是名为property-name的属性的子集。
|
property-constraint
|
适用于该属性的约束 |
属性:
在之前uml1.x规范,例如 1.4.2规范,将属性定义为分类器中的一个命名槽,描述分类器实例可能持有的一系列值。"
在UML 2.x中,分类器拥有的属性代表分类器的属性。属性的上下文是所属的分类器。
例如,患者类别可能有身份证、姓名、性别、出生日期等。作为它的属性。
患者类别的属性有
id,姓名,性别,出生日期,家庭住址,拜访。
当与分类器实例相关的一个或多个值被保存在实例的槽中时,UML规范非常模糊地将(non
static)属性的所有权描述为某种关系。
Slot是UML元素,它指定实例具有特定结构特征的一个或多个值。UML规范还说槽提供实例的结构特征的值。实例可以在其分类器的每个结构特征上具有一个槽,包括继承的特征。
创建分类器实例时,每个非静态属性都成为该实例状态的一部分,并通过将属性名称映射到实例状态所包含的一个或多个特定值来实现。每个属性的值都有特定的类型,并被分配到实例的插槽中或与该实例相关联。
Patient类的Instance newPatient
具有指定值的插槽。
属性对组合或关联的成员端
之前的UML 1.x版本的规范和用户指南认为属性是组成的快捷方式或语义等同物。例如,UML
1.4.2规范解释道:
请注意,属性在语义上等同于组合关联;然而,意图和用法通常是不同的。
(看一些关于势利的“通常不同的意图和用法”可能意味着什么的解释将是非常有帮助的,因此下一个引用提供了一些线索。)
类符号可以被认为是组合嵌套符号的一个例子(具有一些特殊的布局属性)。然而,属性符号在类中强烈地从属于属性;因此,当属性对象本身的结构和标识在类外不重要时,应该使用它。
这里显示 的Patient类的地址和访问属性为两个组合,如UML
1.x所允许的。
UML 2.x规范允许使用符号表示关联属性 ,以便可以在UML
2.5中呈现Patient类的前一个示例,如下所示。
可以使用UML 2.x中的关联表示法来显示 Patient类的地址和访问属性。
注意,关联的所有权由关联的患者类结束,由一个小的实心圆圈(也称为点,参见下面的解释)以图形方式表示。还要注意,在连接到类的关联端没有装饰(装饰品)。
关联成员端
当属性是关联端时,该属性的值与关联另一端的一个或多个实例相关。
关联 拥有 的属性表示关联的属性,并命名为member end。在关联的情况下,结束上下文是关联的另一端或另一端的类型集。
关联最终可以拥有或者通过
两端以上的关联的关联端必须归该关联所有。
UML标准不要求使用显式的最终所有权符号,但是定义了一个缺省值。当二进制关联中不使用点符号时,关联结束被假定为由关联拥有。
关联的成员端与属性
分类器属性可以在分类器拥有关联端时表示关联端。
关联分类器对关联结束的所有权可以用一个小的实心圆(也称为点)图形化表示。点画在直线与分类器相交的点上。它可以被解释为显示模型包括由点接触的分类器表示的类型的属性。这个属性属于另一端的分类器。
关联结束查询由分类器QueryBuilder拥有
,关联结束qbuilder由关联Builds本身 拥有
限定符
属性可以有其他属性(属性)作为限定符。限定符是相对于限定端的实例定义关联实例集的分区的属性。(限定词更合适的名称可能是选择器或键。)
限定词用于对Java中的哈希映射、C#中的字典、索引表等进行建模。其中使用限定符作为哈希键、搜索参数或索引来提供对链接对象的快速访问。
限定符显示为附加到限定分类器(也称为源)的小矩形。这个限定符矩形是关联的一部分,而不是分类器的一部分。UML不允许抑制限定符。
限定词的一个或多个属性在限定词框中绘制,一个到一行。限定词属性与分类器属性具有相同的符号,只是在这种情况下不使用初始值。
UML允许在单个关联的每一端都有一个限定符。
目标的多样性
给定限定对象和限定符实例,关联目标端的对象数量由声明的目标多重性约束。
如果限定符的域很大或无限,则目标多重性应允许0(“无结果”),例如number,long
string,date。 对于枚举或受限域的限定符,它可以正好为1。
在目标多重性为0..1的情况下,限定符值对于限定对象是唯一的,并且链接到最多一个关联对象。
给定公司和社会保险号(SSN)
最多只能找到一名员工
在目标多重性0 .. *的情况下,关联实例的集合被划分为可能为空的子集,每个子集由给定的限定符实例选择。
给定图书馆和作者名称,无法找到任何书籍
如果限定符的域很大或无限,则目标多重性应允许0,例如number,long
string, date。
ML 2.4规范是mumbo jumbo乱码,解释了限定符的多样性:
假设提供限定符值,则给出限定符的多重性。假定没有限定符的“原始”多重性为0
.. *。这不是完全一般的,但几乎总是足够的,因为原始多重性为1的情况最好在没有限定符的情况下建模。
鉴于棋盘和特定的等级和文件,我们将恰好找到1平方。
UML规范没有提供多重性1对于限定符的含义的清晰解释。
|