Skip to main content

7.6 定义和使用

7.6.1 定义和使用概述

定义和使用

SysML的建模能力有助于在不同的上下文中进行复用。 定义和使用元素对于SysML语言中的许多构件提供了一致的基础,以提供这种能力, 这些构件包括属性、实存、项目、部件、端口、连接器、接口、分配、动作、状态、 计算、约束、需求、关注、案例、分析案例、验证案例、用例、视图、视角以及渲染器。

一般地,定义(definition)元素是对特定种类元素的分类(例如,属性、部件、动作)。 使用(usage)元素是定义元素在某个特定上下文中的使用。 使用必须被至少一个定义元素所定义。 例如,一个部件使用被一个部件定义所定义, 一个动作使用被一个动作定义所定义。 如果没有显式地给出定义,那么该使用隐式地被系统库中最一般的合适种类的定义所定义。 例如,部件使用可以隐式地被模型库Parts中的最一般的部件定义Part所定义。

特征

定义可能会有内嵌的拥有的使用元素,称为它的特征(feature)。 使用也可能会有内嵌的作为特征的使用元素。 这种情况下,内嵌的使用的上下文是所包含的使用。 一个简单的例子是由部件使用的层级结构所定义的部件树。 由Vehicle所定义的一个vehicle使用可以包含这些部件使用: enginetransmissionfrontAxlerearAxle。 每一个部件使用有它自己的部件定义(隐式或者显示)。

特征将它所表征的定义或者使用的实例,和它的定义的实例关联起来。 例如,一个定义为MassValue的特征mass,其表征的定义为Vehicle, 它将Vehicle的每一个特定的实例,和特定的MassValue联系起来,称为某vehicle的mass特征的

一个使用也可以直接被包含在一个包中。 这种情况下,该使用元素被认为是最一般的内核类型Anything的一个隐式特征。 即包层面的使用是一个通用的特征,可以在任意上下文中使用,或者在特定的上下文中再进行特化。

使用可以具有重数,以约束其基数,即对于它所表征的定义或使用的实例的允许的数量。 重数通过一个范围指定。TODO: 例如,一个Vehicle定义可以包括一个叫做wheels,且重数为4的使用元素, 意味着每一个Vehicle正好有4个wheels。 更弱的约束,例如重数为4..8,则意味着每一个Vehicle可以有4到8个轮子。

使用可以是引用(referential)的或者复合(composite)的。 一个引用的使用表示在表征的实例和一个或多个值之间的简单的引用。 一个复合的使用,则表示相关的实例是包含的实例结构的必要组成部分。 因此,如果包含的实例被销毁,那么通过复合使用关联的任意实例也被销毁。 例如,Vehicle可以有wheels作为其复合使用,但是它所行驶的road只能作为它的一个引用使用。

注意: 复合的概念仅对时间上存在,并且可以被创建和销毁的实存适用。 属性使用总是引用的,而属性定义和使用的任何内嵌特征也总是引用的。

特化

定义和使用元素可以通过几种不同种类的特化关系来是实现特化。

定义可以使用子分类(subclassification)关系来特化。 特化的定义从一般定义元素继承特征,并可以添加其他的特征。 例如,如果vehicle具有特征fuel,其类型为Fuel, 而TruckVehicle的一个特化,那么Truck会继承特征fuel。 如下所述,一个继承的特征可以进行子分割或者重定义。 Truck可以添加自己的特征,例如cargoSize

一个定义可以特化多个定义,这种情况下定义从它所特化的每一个定义中继承特征。 所有继承的特征必须具有可以和其他继承特征以及拥有的特征相区分开的名字。 名称冲突可以通过对存在冲突的特征进行重定义来解决。

使用从它的定义元素继承特征,方式和一个特化的定义从更一般的定义元素中继承特征一样。 例如,如果部件使用vehicle被部件定义Vehicle所定义, 且Vehicle有一个被MassValue所定义的特征mass, 那么vehicle会继承特征mass。 在某些情况下,一个使用可能有多个定义元素,则该使用从它的每一个定义元素继承特征, 其中冲突名称的规则和上述子分类中的相同。 使用也可以添加自己的特征,以及对继承的特征进行构建子集或者重定义。 这使得每一个使用在其上下文中可以被修改。

使用可以通过* 子集使用可进一步约束其定义和重数。 TODO:

重定义(redefinition)是子集构造的一种。