9.5.3 语义

Property可能代表了分类符的一个属性(attribute)、关联的一个成员端,或有些情况下两者兼而有之。

建模中的一个有用惯例是把那些类型为类的Property作为关联端来处理,而那些类型为数据类型的property不这样。UML没有施加该惯例。

Property根据其与一个或多个值的命名关系代表了一个或多个实例的一个已声明的状态。当Property是分类符的一个非静态属性时,与分类符实例相关的值保存在实例的slots中。当Property是一个关联的成员端时,其值关联到另一端的实例(参见11.5 Associations)。当Property是分类符的静态属性时,它的值关联到在特定执行区域内的分类符自身。

成员端类型的Property自身可以有充当限定符(qualifiers)的其它Properties。

当一个Property通过ownedAttribute被一个分类符而非关联所拥有时,它代表该分类符的一个属性。当通过成员端关联到一个关联(Association)时,它代表了该关联的一个端。对于二元关联,它可能同时是上述两者。不管是那种情况,当被实例化后,Property代表了与一个(或者在三元或高阶关联中,多个)分类符一个实例相关的一个或一组值。这个分类符集合称为该Property的上下文;在是一个属性的情况下,上下文是所属的分类符,在是一个关联端的情况下,上下文是关联的另一端的分类符集合。

如果为Property指定了缺省值(defaultValue),缺省值在Property实例创建后没有为其指定一个特定的设置或者模型中的约束需要该Property具有特定值的时候被计算。计算后的缺省值成为该Property的初始值。

如果一个Property的isDerived=true,那么它是衍生的,它的值可以从其它信息中计算出来。涉及衍生属性的Actions,其行为与对待非衍生的属性一样。衍生属性通常指定为只读(即客户不能直接修改它的值)。但在衍生属性是可变更的地方,实现应该确保满足所有约束,尤其是衍生属性的衍生约束。衍生属性的衍生可以通过一个约束来指定。

Property是一个间接的RefefinableElement,因此,它们可以被重定义。属性的名字和可见性不必与它重定义的属性相匹配。

一个衍生属性可以重定义一个非衍生的属性。实现应该确保衍生所暗示的约束在属性被更新时得到满足。

如果属性有一个特定的缺省值,并且被它重定义的属性也有一个特定的缺省值,那么在使用被重定义的属性的缺省值的地方使用重定义属性的缺省值。

有时,一个属性用于对一个实例用于对一组实例进行组织的场景进行建模,这称为聚合(aggregation)。为了表示该场景,属性有一个aggregation属性,类型为AggregationKind;代表整个组的实例称为属性的宿主,代表组织个体的实例由属性的类型来分类。AggregationKind是具有如下字面量的枚举:

  • none:指示该属性没有聚合语义。
  • shared:指示该属性具有共享的聚合语义。共享聚合的准确语义随应用领域和建模者而不同。
  • composite:指示该属性时一个组合聚合,即组合对象负责被组合对象的存在和存储(参见11.2.3中parts的定义)。

组合聚合是聚合的一种强形式,它需要部分(part)对象某个时刻最多只能被一个组合对象所包含。如果组合对象被删除了,它的所有部分实例也都会随它被删除。

注意. 一个部分对象可能在组合对象被删除之前已被移除,从而不会被作为一个部分而删除。

组合可以被链接到一个具有传递删除性质的有向无环图中;也就是说,删除该图中的一个对象会导致该对象下的子图对象亦被删除。组合聚合的精确生命周期语义有意没有被定义。被组合对象的创建次序和方式有意没有被定义。当组合或部分对象的类型是数据类型时,该组合聚合的语义有意没有被定义。

一个Property可以被标记为另一个subsettedProperty的子集(subset)。此种情况下,通过从subsetting属性指示的值集合中删除重复值来计算一个集合。然后该集合被包含到(或者相同)通过从subsettedProperty指示的值集合中删除重复值得到的集合中。它们处于相同的上下文。

一个Property可以通过将isDerivedUnion设为真来标注其为一个衍生的联合(union)。这意味着在一些上下文中由该Property所指示的值集合是通过将相同上下文内定义为它的子集的属性所指示的值集合进行严格的联合而生成的。如果该Property的multiplicity上限是1,那么这意味着所有子集的值要么为空(null)要么相同。

当一个被标记为衍生联合的熟悉被标记为有序时(isOrdered=true),并且在一个特定的上下文中它的所有子集属性都被标记为有序或上限为1,并且在该上下文中Classifier::allAttributes()操作给出了一个定义良好的次序,那么该联合的次序通过按序计算它的allAttributes()结果中出现的子集属性并将结果连接起来而定义。在所有其它情况下,标记为有序衍生联合的属性时未定义的。

一个Property可能通过isID属性被标注为所属分类符的(部分)标识。对此的解释仍是开放的(left open),但它应当被映射到类似关系数据库中表的主键或XML中的ID属性那样的实现。

如果多个属性被标记为isID,那么对于任意实例,这些属性值联合的元组将会从逻辑上提供唯一性。因此,这不需要次序并且其中的一些属性值可以为空。如果属性是多值的,那么所有的值都包括在内。

Property特化了ParameterableElement,用于指定一个Property可以暴露为一个形式ConnectableElementTemplateParameter(参见11.2.3),并且在一个模板绑定中作为一个实际参数被提供。在一个模板中,一个Property TemplateParameter可以像其他可访问的Property一样被使用。模板中任意对该Property TemplateParameter的引用都会归解为在被绑定(bound)元素中引入那个实际的Property。

results matching ""

    No results matching ""