SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模

  1. 使用模块图建模

本章讨论建模系统的结构根据它们的层次和互联。描述模块—SysML的主要的结构构件,被使用来表示两种类型的结构图:模块定义图内部模块图。这些表示方法是一种系统工程模块图的传统形式,并使能接口和系统结构其它方面的更准确一种表示方式。

注:本章包含介绍在SysML版本1.3中的端口的明显变化。第7.1节包含一个变化的概述和第7.9节描述已经被丢弃在这个版本中的特征。

    1. 概述

在SysML中,模块(block)是模块化的结构单元,被使用来定义系统的一种类型、组件、或在系统中流动的项、外部实体、概念实体或其它逻辑抽象。模块描述共享模块的定义的一组唯一的可标识的实例。模块被定义通过它拥有的特征,可以被划分为结构特征和行为特征

模块定义图使用来定义模块和模块之间的关系,诸如,它们的层次关系。也可以被用来指定模块实例,包含它们的配置和数据值。内部模块图被使用来描述模块的内部结构,根据它的组成部分之间的关系。

属性是模块的主要结构特征。本章描述属性的不同形式包含那些组成部分(part)引用(reference)值(value)属性。组成部分属性被使用来描述一个模块的组合层次并定义一个整体一部分语境。数值属性描述一个模块可量化的物理、性能、和模块的其它特征,诸如,它的重量或速度。数值属性被定义通过一种数值类型,描述它的值的有效范围,带有数量类型(例,长度)和单位制(例,英尺或米)。数值属性可以关联到参数化约束,随后讨论在第8章。

行为与一个模块的关联定义模块如何响应激励。不同的行为形式,包含活动、交互、和状态机,分别论在第9章到第11章。模块的行为特征包含操作和接收,提供一个机制对应外部激励来调用这些行为。

组成部分可以被连接在一个内部模块图中,使用连接器使能发生在它们之间的交互,包含流入和流出它们并调用行为的中继项。端口是一个模块的结构特征,指定模块可以与其它模块交互的令牌存取点。

SysML v1.3丢弃流端口和流说明,支持两种新的类型的端口,完整端口(full port)代理端口(proxy port)。SysML v1.3保留这些以前的功能,并也增加了功能对应端口,诸如,内嵌端口的功能,并指定其它类型接口交互的功能,诸如,配合面。

除了组合层次,模块可以被管理在分类层次中,分类层次允许模块将根据它们的相似之处和不同之处被定义。在一个分类层次内部,一个模块可以指定另外一种更通用的模块,允许它继承特征来自通用模块并添加特定新特征到它。

实例规范(Instance specifications)可以被用来标识模块的特定配置, 包含它的数值属性的值。

      1. 模块定义图

模块定义图(block definition diagram)使用来定义模块根据它们的特征,和它们与其它模块的关系。模块定义图的标题如下:

bdd [model element kind] model element name [diagram name]

  • 图的类型是:bdd
  • 模型元素类型可以是一个包、一个模块、或一个约束模块。

图7.1显示一个模块定义图的一个例子,包含一些通用的标志。图显示一个ACME公司的摄像头产品的组合层次的两个层级。符号使用在模块定义图来描述模块和它们的联系被显示在附录,表A.3到A.6。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第1张图片

7.1模块定义图示例

      1. 内部模块图

内部模块图(internal block diagram)ibd类似于一个传统的系统模块图,并显示一个模块的组成部分之间的连接关系。内部模块图的标题如下:

Ibd [Block] block name [diagram name]

一个内部模块图的框架常常表示一个模块,所以模型元素类型常常被省略在标题中。模块名称是模块的名称,其被设计通过框架。

图7.2显示内部模块图包含一些通用标志的一个例子。图描述Camera的内部结构的组成部分,光线如何流动并通过中间组成部分最终到Optical Assembly

使用在内部模块图中的符号描述模块的用法,称为组成部分,和它们的互联被显示在附录表A.6、A.11和A.12中。内部模块图符号也可被显示在一个模块定义图中的一个模块的结构化舱段中。图7.26和图7.27提供相应的示例。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第2张图片

7.2 内部模块图示例

    1. 构建模块在一个模块定义图上

在SysML中,模块是描述系统结构的基础模块单元。可以定义一个逻辑或概念实体的类型、一个物理实体(例,一个系统)、一个硬件、软件、或数据组件、一个个人、一个设施;一个流动通过系统实体 (例,水)、或自然环境中的一个实体(例,大气或海洋)。模块常常使用来描述可重用的组件在许多不同系统中。模块特征的不同分类用来定义模块,被广泛分类为结构特征行为特征、和约束描述在后续的章节中。

模块是一种类型,也即是一组相似实例(instances)对象(objects)的一个描述,所有这些表现出共同的特征。一个模块拥有描述它的实例的一组特征集。结构特征定义它的内部结构和属性;行为特征定义它如何与环境交互或者它的状态如何变化。例如,一个汽车模块,模块包含汽车的物理和性能以及其它属性(例,它的重量、速度、仪表读数)、车辆注册编号、和也可包含定义它如何响应转向和油门指令。汽车模块的每个实例将包含这些特征并唯一标识通过它的属性的值。所以,例如,一辆Honda Civic可以被建模作为一个模块,而一辆特定的Honda CivicHonda Civic模块的一个实例,它的值A1F R3D对应它的注册属性。在SysML中,一个模块的实例可以显式地被建模作为一个唯一的设计配置,正如描述在第7.7.6节。一个实例可以包含数值属性,它的值随着时间变化,诸如,速度和里程表读数。

模块的标志是一个矩形,内部划分成一系列舱段。名称舱段出现在标志的顶部并且是强制舱段。模块特征的其它分类,诸如,组成部分(part)、操作(operation)、数值属性(value properties)、端口(port),可以表示在模块标志的其它舱段。所有舱段,除了名称舱段外都有标签,标签说明它包含特征的分类,并被描绘以小写、斜体、复数、并且词之间有空格。

在模块定义图中,名称遵循与包图相同的约定。模型元素或直接包含或导入到命名空间中通过图表示,被设计仅通过它们的名称。为了突出显示它们在模型层次中的位置,其它模型元素必须被设计通过它们的限定名称。

在模块定义图上,一个矩形标志被默认解释为一个模块的表示,但可选的«block»关键字可以被使用,如果期望可以有前缀名称在名称舱段中。为了减少混乱,约定在本章如果模块出现在相同的模块定义图上,«block» 关键字被使用,正如其它模型元素表示通过矩形。

图7.3显示一个模块定义图,其中有三个模块在公司企业模型中,称为ACME Surveillance Systems Inc。模块的名称使用包含路径的限定名称,显示它们在模型的包层次内部的定位,显示在图6.4。模块显示包含了使用范围:Camera是一个ACME产品的一个描述;Stepper Motor模块是一个现成的组件使用在ACME的摄像头中;和Video被使用来描述摄像头生成的视频图像,。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第3张图片

7.3 在一个模块定义图上的模块

    1. 使用属性建模块的结构和特征

属性是一个模块的结构特征,属性定义了它的特征的类型,可以是另外一个模块, 或一些更基础的类型,诸如,一个整数。本节描述模块使用的三个属性分类。

  • 组成部分属性(part properties)(简称组成部分)描述一个模块分解到它的构成元素。这些被描述在第7.3.1节。
  • 引用属性(Reference properties)是它的值引用其它模块的组成部分的属性,被描述在第7.3.2.节。
  • 数值属性(Value properties)描述一个模块的量化特征,诸如,它的重量或速度,描述在第7.3.4节。

更高级的主题关联到属性包含在下面:

  • 属性偏离、静态属性和只读属性,描述在第7.3.4节。
  • 属性重定义和构造子集(subsetting)分别定义在第7.7.1和7.7.6节
  • 属性顺序和唯一性被定义在第8.3.1节。
      1. 使用组成部分属性建模块的组合层次

组成部分属性(Part),简称为组成部分,用来描述模块之间的组合关联。这种模块组合层次的类型常常被视作BOM结构(也称为零件列表或装备树)。组合关系也称为一个整体-部分关系,其中,模块表示整体组成部分属性表示部分。组成部分属性通常是一个模块,尽管也可以是参与者(actor),正如描述在第12.5.1节。

组成部分属性标识它的类型在一个语境中的用法。一个组成部分和一个模块的一个实例之间关键区别是:组成部分描述一个实例或一个模块的一个实例在它的组合模块的一个实例的语境中,而作为一个实例不需要一个语境。

组合模块的一个实例可以包含一个组成部分属性的多个实例,潜在的实例数目被指定通过组成部分属性的多重性,定义如下:

  • 下限(实例的最小数目)可以是0或任何正整数。术语可选的常常用来对应当下限是0时的多重性,当下限值是0时,整体的实例没有义务来包含任何组成部分实例。
  • 上限(实例的最大数目)可以是1,许多(用“*”),或任何正整数等于或大于下限值。

一个组成部分属性是模块的一个特征,并且此类特征可以被列举在模块独立的组成部分舱段中。组成部分舱段头部使用关键字parts标识,包含一个入口对应模块中的每个组成部分。每个入口有下面的格式:

part name:  block name [multiplicity]

多重性([multiplicity])的上限值和下限值典型的组合在‘lower bound..upper bound’表达式中,除了它们有相同的值,在这种情况下,多重性仅显示上限值。如果没有显示多重性,值:‘1..1’被假定。

图7.4显示一辆汽车有四个车轮的一个简单的例子,图中,Wheel的每个使用通过一个唯一标识的组成部分属性。在这种情况下Automobile是整体,而Wheel被表示作为部分。4个车轮有一个通用的Wheel模块定义,带有一些特征 (例,尺寸、压力、等等),在一个特定的车辆语境中,每个车轮可以有一个唯一的用法或功能。前轮有一个不同的功能与后轮区别,并可以有不同的值对应它们的压力。每个车轮也可以有不同的行为,汽车加速或减速和受不同的约束情况时。类似的,一辆前轮驱动的车辆的前轮与后轮驱动的车辆的前轮功能是不同的。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第4张图片

7.4 一辆汽车带有4个车轮描述作为独立的组成部分

组成部分属性定义一组实例集,其属于整体或组合模块的一个实例。如果一个模块由一个以上的组成部分组合而成时,SysML语义是,在任何时刻,每个组成部分实例最多是一个模块实例的部分。一个例子是一台发动机可以是两个不同类型车辆模块的组成部分,诸如,一辆轿车和和一辆卡车。然而,发动机组成部分在一个时刻任何特定实例仅对应某一个车辆模块的实例。这条规则意味着在实例级别,组合层次是一个严格的树,一个实例可以有最多一个父。

典型的,整体-部分关系意味着,特定的操作应用到整体,也应用到它的每个组成部分。例如,如果一个整体表示的一个物理对象,它的位置发生变更时,它的每个的组成部分的位置也跟着发生变更。整体的属性,诸如,它的质量,也可以推断根据它的组成部分。然而,这些推断的特征必须被指定,在模型中通常使用约束进行表示,参考第8章相关章节。

当模块表示物理系统的组成时,整体-部分关系常常被认为是一个装配关系。在其中,一个模块的实例在整体的终点被制作根据来自组成部分终点的模块实例。整体-部分关系对应软件,与计算关联表示使用和销毁的内存位置,也可以应用到操作,定义对应部分和整体的操作。对应软件对象,对应整体/部分关系的一个典型的解释‘整体被生成、删除和拷贝操作也应用到所有它的组成部分’。例如,整体-部分语义指定:当一个实例在整体终点被销毁时,实例在组成部分终点也将被销毁。

        1. 组合关联

组合关联(composite association)关联两个模块在一个整体-部分关系中。它有两个端点,一个描述整体,另一个描述组成部分。关联的组成部分终点是一个组成部分属性的视图。关联的整体终点提供附加的信息,诸如,它的多重性不能仅仅被表示通过组成部分属性。由于一个组成部分的实例仅在某个时刻存在于整体中,多重性的上限在整体终点常常是1。然而,多重性的下限在整体终点可以是0或1。值1意味着,组成部分的实例终点必须一直有模块的实例在整体的终点内部;值 0意味着模块的一个实例在组成部分的终点可以存在即使没有整体存在。在随后情形中,一个模块的一个实例在组成部分终点可以被组成在许多其它模块的内部随着时间,但它一直授权,实例仅是一个组成部分的实例在任何给定的时间。例如,一个发动机的一个实例可以自身物理存在的,或实例可以是一辆汽车或卡车的一个实例的组成部分在任何给定的时间。

组合关联被显示通过两个模块之间的一条线,终点带有多个修饰。组合关联的整体终点被修饰通过一个黑色钻石。一个速记符号可以被用来表示一个模块,许多组合关联显示通过一个单一的黑色钻石带有一系列直线连接到每个组合关联的组成部分终点。

组合关联的每个终点可以在其它修饰之间显示一个名称和一个多重性。当终点的多重性没有显示时,默认的解释是一个整体的‘0..1’多重性终点和一个组成部分终点多重性1。如果一个名称出现作为一个修饰在组成部分终点时,它是组成部分属性相应的名称,尽管组成部分属性不经常命名。关联的终点也可以显示修饰对应到它们表示属性的其它特征,正如描述在本章的后面。在大多数组合关联的通用使用中,组合关联的整体终点通常没有命名和组成部分终点有一个在组成部分上的终点箭头。部分终点箭头的缺乏说明是一种引用属性的表示,正如定义在第7.3.2节。

在一个组合关联的组成部分终点表示的模块,组成部分舱段可以显示组成部分属性,但典型的在任何给定的图上,组成部分属性被显示或在一个组成部分舱段或作为一个关联终点,但不是两者。

图7.5显示一个摄像头的一个组合层次的顶层两个层级的部分。Camera的组合关联Mount Assembly被显示。Camera ModuleElectronics Assembly的组成部分被显示在舱段中。尽管多层级分解可以显示在一个单一的图上,这可能引起混乱,即使对应简单的系统。作为一个结果,通常一个实例仅显示一个特定图的一个单一的层级的分解。注:图框架说明在标题表示包名称为Structure,其包含所有模块。

关于那个组成部分属性的名称有许多不同的哲理。在本章中,除了陈述的,下面的命名哲理被使用:

  1. 名称使用来区分2个组成部分使用相同的类型(模块)的属性。一个例子是Stepper Motor Module的使用,使用名称 elevation motor(高度电机)和azimuth motor(方位电机)区分两个组成部分属性。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第5张图片

7.5在一个模块定义图显示一个模块的组合层次

  1. 当类型(模块)的名称不能充分描述组成部分扮演的角色时,组成部分属性被给定一个名称。例子是模块名称Tilt GimbalPan Gimbal不能明显描述移动摄像头的功能时,使用名称elevation gimbalazimuth gimbal
  2. 组成部分属性没有命名,类型(模块)的名称提供充分信息来推断组成部分的角色。这种的例子是Protective HousingCamera ModuleElectronics Assembly。这是常规的情形,当一个模块已经被明确生成表示这个组成部分时。这应该也应用到Mount Assembly,但一个名称被需要来说明一个附加符号形式在图7.8中。

如果存在一个组成部分名称,当描述图时,它可以被引用;否则模块名称被使用。

在这个图中,所有组成部分终点的多重性修饰的缺乏,说明每个组成部分有一个具体的实例对应摄像头的组合层次。修饰它们的整体终点的多重性说明:Electronics Assembly,maCamera Module是摄像头的组成部分,模块Protective Housing可以被使用在其它模块中。ma的所有组成部分类型化使用可重用的模块,其已经使用在许多其它语境中。Electronics AssemblyElectronics Assembly都带有一个组成部分舱段,其列举它们的组成部分属性。没有组成部分有一个名称,并它们都有默认的多重性1。

        1. 在一个内部模块图中建模组成部分

除了出现在一个模块定义图上,组成部分属性也可以显示在另外一种图称为内部模块图,表示模块组成的不同可视性。内部模块图中的组成部分连接使用连接器和端口,正如随后描述的。

组合关联之间的关系,正如显示在一个模块定义图和在一个内部模块图,如下:

  • 整体终点或组合模块(block)被设计通过图框架在内部模块图带有模块名称在图的标题中。它提供语境对应所有图元素在图上。
  • 组成部分属性,显示作为一个组合关联的组成部分终点,它的整个终点是组合模块,或在组合模块的组成部分舱段中,出现作为一个盒子标志带有一个实体边界在内部模块图的框架内。盒子的名称字符串标志由组成部分名称组成,紧跟提供一个冒号跟随通过组成部分的类型。或组成部分的名称或类型名称可以被忽略。

每个组成部分属性的多重性可以被显示在组成部分标志的右角落或在方括号中,类型名称之后。如果没有多重性被显示,随后一个多重性1被假定。

图7.6 是一个内部模块图衍生自组合关联,其整体的终点是Mount Assembly来自图7.5。标题标识符Mount Assembly作为封闭的模块,为显示在图中的五个组成部分提供语境。在这种情况下,多重性没有显示,说明多重性默认值是1。(参考图7.1对应一个例子没有默认的多重性。)注:这是内部模块图的一个简单形式的示意图。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第6张图片

7.6 Mount Assembly’ 内部模块图

        1. 在一个内部模块图上连接组成部分

内部模块图可以用来显示一个模块的组成部分之间的连接,有些没被显示在模块定义图上。一个连接器(connector)被使用来连接两个组成部分和提供那些组成部分交互的机会,尽管连接器单独来说没有相互交互的性质。连接器也可以连接端口,正如描述在随后的第7.6.3节。

交互在一个模块的组成部分之间,被指定通过组成部分的行为,正如描述在第9、10、和11章。交互可以包含组成部分之间的输入和输出流、组成部分上的服务调用、组成部分之间的发送和接收消息、或可以被指定通过在两个端点上的组成部分属性之间的约束。在适当的时候,连接器上流动的项的方向和性质可以被显示使用项流,正如描述在第7.4.3节。

连接器的终点可以包含多重性,描述实例的数目可以被连接通过链接(links)描述通过连接器。例如,一个笔记本电脑和许多USB设备之间的连接可以被建模作为一个单一连接器,但将有对应每个连接设备的一个独立的链接。一个连接器可以是一个关联或关联的模块,其允许连接的详细特征的定义,正如描述在第7.3.3节。

在内部模块图中,两个组成部分之间的连接器被描绘为一条线标志。一个组成部分可以连接到多个其它组成部分,但一个独立的连接器被需要对应每个连接。连接器名称字符串的完整形式如下:

connector name: association name

连接器的终点可以包含一个箭头,意味着,输入的连接器的关联有等效的修饰,但这常常没有显示,并不应该与流混淆。连接器的终点可以被修饰使用名称和连接器终端的多重性。如果没有多重性被显示,随后一个多重性1被假定。当连接器标志互相交叉,它们的相交可以被设计通过一个半圆形的突起来说明,它们没有互相联系。

Camera摄像头)的内部模块图被显示在图7.7。Protective Housing保护摄像头内部被机械的链接到Mount Assembly (ma)Mount Assembly提供平台对应Camera ModuleElectronics Assembly,其被链接来传递摄像头允许的功能的电子信号。连接器在这个例子中有名称, 说明它们被机械连接(m1m3)或电子链接(e1),但名称没有隐藏语义。通过键入连接器可以添加有意义的语义,正如描述在第7.3.3节,或通过使用一个域特定配置文件正如描述在第15章。所有连接器有默认的多重性暗示一对一的连接。

        1. 建模内嵌的结构和连接器

在内部模块图中,有时有必要在一个系统层次的内部显示内嵌的组成部分的多个层级。内嵌的组成部分可以被表示通过显示组成部分标志在组成部分标志内部,正如显示在图7.8。SysML也引入一个可选的符号来绘制一个内嵌的组成部分,也显示在图中,在其中每个层级的内嵌的组成部分被分离通过一个句号(即,‘.’)在一个单一的组成部分标志的名称字符串内部。标志的名称字符串,使用点符号,表示路径在分解层次从语境模块层级向下到内嵌的组成部分。在图7.8中,azimuth gimbal被表示作为一个内嵌的矩形在ma:Mount Assembly标志内部和也表示使用点符号使用高层级的组成部分名称ma,和组成部分名称azimuth gimbal的一个点前缀。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第7张图片

7.7 连接组成部分在一个内部模块图

连接器可以连接组成部分在不同的内嵌层级不需要直接连接到内嵌的组成部分的中间级别。例如,一个轮胎可以被直接连接到一个路面不需要来连接路面到车辆,汽车到悬架,悬架到车轮,和车轮到轮胎使用中间连接器在内嵌的每个层级。连接器简单穿越内嵌的组成部分边界为了直接连接轮胎到路面。模块有一个特定的布尔属性称为被封装(is Encapsulated),如果是true,禁止连接器来自交叉边界没有连接到任何中间的内嵌的组成部分。通常的情形,连接器被初始制定在顶层组成部分之间,和随后随着组成部分的内部细节变得清晰,连接器被指定在底层元素之间。它是一个建模选项,是否外部连接器被删除或保持。

连接器带有内嵌的终点被显示以相同的方式同常规的连接器,除了它们交叉在组成部分标志的边界。isEncapsulated 属性在一个模块上被显示,代表属性为true,如果没显示为false。如果显示,它出现在名称舱段的括号中在模块名称之前。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第8张图片

7.8 显示深度内嵌的组成部分在一个内部模块图上

图7.9 包含一个更详细的连接器的查看在子装配的内部在图7.7。经过进一步的调查之后,连接器m1已经增强使用一个连接器称为platform to housing,它的内嵌的终点直接连接ma(Mount Assembly)的PlatformCamera ModuleCamera Housing。相似的,电子的连接器e1已经增强使用一个连接器称为imaging to video,其连接Camera ModuleImaging AssemblyElectronics AssemblyImage Processor

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第9张图片

7.9 在一个内部模块图上,内嵌的连接器

当一个连接器在结构的一个层级被使用来添加更多关于一个连接器的细节在一些更高层次,有潜在的问题使用维护结果模型。例如,如果来自图7.7的m1连接器被删除从模型中,platform to housing应该也被被删除? 如果这种类型的关系是重要的,随后一个关联的模块可以被用来显示连接器的分解以模块显示组成部分的分解相似的方式。关联的模块被描述在第7.3.3节。端口的使用也是重要的对应解决这种类型的问题,正如描述在第7.6节。

      1. 使用引用属性建模模块之间联系

引用属性(Reference properties),简称引用, 启用包含引用属性对应的模块的实例,引用该模块的实例类型,也即该模块类型的引用属性。整体-部分关系的组合语义,正如描述通过组成部分属性,定义一个特定模块的实例在整体终点和组成部分终点模块的一个实例在之间的关系,正如描述在先前的章节。这种的一个示例是销毁语义,当模块在整体终点一个的实例销毁时,也销毁组成部分终点模块的实例。对于引用属性,销毁意义与组合关联么不同。引用属性模块的数目没有限制,也即一个被引用模块实例(引用属性实例)可以同时被多个其它模块引用。这是特别重要的一点,下面提供应用的明确如描述。

引用属性可以被用来描述一个逻辑层次,其引用其它组合层次的组成部分模块。引用属性因此被用来跨越一个组合层次的树结构不同层级, 除了主要的系统整体-部分层次结构外允许增加附加的视图。这种逻辑的层次组织可以被表示在模块定义图和内部模块图上。讨论在第14章的分配也可以被用来在一个逻辑的层次和组合层次之间结构之间,使用引用属性建立相应的关系。另外一种引用属性的使用是来建模存储项(例,水存储在一个水箱中)。水不是水箱的部分,以相同的方式一个阀门是水箱的一部分。对应这种情形,水可以被占有通过另外一种模块和显示作为一个水箱的引用属性。

像组成部分属性,引用属性可以被列举在模块的一个独立的舱段内部。引用属性舱段头部标识有关键字reference,并在模块中包含每个对应的引用属性的入口,与表示作为组成部分属性类似。

        1. 引用关联

讨论在本章的前面的组合关联使用来表示模块之间的层次结构。在模块定义图中,使用引用关联(Reference associations)来绘制模块之间的一个不同关系,模块在关联的终点被引用通过另一个终点的模块。在模块的一个或两个终点上指定一个引用属性表示引用关联。

引用关联表示作为在两个模块之间的一条线。黑色钻石表示组合关联没有使用。当有一个引用属性在一个终点时,线有一个开放的箭头在关联的终点,指向引用属性的所有者类型也即被引用的模块。在占有引用属性的关联模块的终点没有箭头。如果引用关联是双向的(即,有引用属性在两个终点),两个终点都没有箭头。多重性在引用关联的终点有相同的形式同组合关联。

引用关联的一个终点表示通过一个白色钻石。SysML分配相同的意义到关联,是否白色钻石被表示或没有。然而,白色钻石标志试图来被使用带有构造类型的一个应用,可以指定一个特定领域的一个特定唯一的语义。

组合关联也可以定义引用属性。如果没有箭头在组合关联路径的终点,随后模块类型组成部分有一个相应的引用属性,它的名称被给定在路径的整体终点

图7.10显示一个模块名称为Mechanical Power subsystem,其使用引用关联来引用摄像头的Power Supply,它的动力机械组件,包含在多个装配体中的电机和Distribution HarnessDistribution Harness包含引用属性引用其它harnesses,它们是摄像头中的不同装配的部分。在摄像头的组合层次中, 组件是许多不同装配的部分,其中的一些被显示在图7.5。Mechanical Power subsystem表示这些组件的一个逻辑组合,交互为摄像头提供动力。白色钻石修饰被使用在这个例子中来强调Mechanical Power subsystem的本质是引用关联,但这种强调是严格的符号和没有语义隐藏。

不同的基于模型的方法可以包含一个模块,诸如,Mechanical Power Subsystem在模型结构的不同部分。这里它被包含在摄像头模块自身,但它可以仅作为简单的已经被放置进相似的子系统的一个特定的包。Mechanical Power Subsystem的一个实例不显示在摄像头的装备树,但是更像一个装备树的部分的一个交叉视图。

引用关联也用来表示关联在模块对应其它目标之间,诸如,那些可以被使用在典型的数据类型建模实体-关系-属性(ERA)或更通用的类建模。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第10张图片

7.10 在一个模块定义图上的引用关联

        1. 在内部模块图中建模引用属性

引用属性被描述以一种相似的方式与组成部分,当显示内部模块图时,除了它们的矩形标志的四周被虚线代替。否则它们有相似的修饰,并可以被连接采用组成部分标志的相同的方式。

图7.11显示连接在Mechanical Power Subsystem的引用属性使用来支持动力传输在子系统内部。在这种情况下,一个单一的power source为所有摄像头提供机械部分需要的动力通过Distribution Harness

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第11张图片

7.11 引用属性和它们的互联在一个内部模块图

      1. 使用关联到组成部分之间的类型连接器

正如模块可以被作为组成部分类型来建模一个系统的结构,关联可以被使用作为连接器类型来建模组成部分之间的连接。关联可以被使用以两种方式:定义模块如何可以被有效链接,和来定义详细,包含这些连接的详细结构。

        1. 输入连接器通过关联来断定兼容性

一种类型连接器的一种用法是来断定组成部分之间的连接的兼容性,通过请求组成部分在连接器的每一端必须满足约束实施通过它相关的类型。对于一个连接器将输入使用一个关联,连接的组成部分必须有一种类型也即是兼容于关联的终点。一个兼容的组成部分类或是相同的类型同关联的终点,或一个那种类型的指定。

一个学科的过程可以请求所有连接器类型化来确保它们终点的兼容性。在此类的一个过程中,一个库关联与兼容的终点类型被提供,和每个连接器必须类型化使用一个关联从这个库,其确保,仅组成部分被视图来连接可以是。它被假定在这个过程中,终点类型的特征的兼容性已经被确认(参考7.4.3和第7.5.4节)。

关联定义模块实例的多重性在它每个它的终点上。尽管连接器可以有它们自己的多重性,它们的下限和上限被约束将是处理定义的多重性内对应关联的终点的输入类型。

图7.12显示对应监控住宅用户的ACME Surveillance Network。一个异步数字用户线(ADSL)连接被使用来链接一些Surveillance SystemsCommand Center,正如显示通过相关的ADSL ConnectionADSL Connection的终点表示模块的引用属性,在每个终点并被命名为adsl dteadsl dce指明相关的模块的表示角色。一个Surveillance Systems是一个数据终端和因此有更高级的下载功能而不是上传功能,并必须被关联,通过它的引用属性adsl dce,为了一个精确的Command Center。一个Command Center被关联,通过它的引用属性 adsl dte,到0个或多个Surveillance Systems

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第12张图片

7.12 两个模块之间的一个引用关联

图7.13显示ACME Surveillance Network的住宅部分在一个内部模模块图中。显示residential center连接到一组residences集。连接器res comms输入ADSL Connection并因此必须符合它的两个终点的类型和它们的多重性。在这种情况下,连接器不进一步限制多重性陈述在关联上,所以没有需要来添加多重性到连接器。对应连接器带有多重性的一个例子,参考图7.42。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第13张图片

7.13 连接器类型化提供一个关联

        1. 使用关联模块来定义连接器的结构

更详细的可以被指定对应连接器通过类型化它们使用关联模块。一个相关的模块,正如名称隐含地,是一个关联和一个模块的一个组合,所以它可以关联2个模块一起,但也可以有内部结构和其它特征。内部结构可以被用来分解连接器,键入相关的模块。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第14张图片

7.14使用关联来关联模块

关联模块的每个终点被表示通过一个特定的类型的属性称为一个participant属性,其类似于一个引用属性。这使模块在关联模块的终点上将被引用通过关联的模块,不需要作为关联模块的部门。这依次确保相关模块不会混淆与系统组合层次的其它部分。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第15张图片

7.15 一个关联模块的内部结构

相关模块被显示在模块定义图作为一个相关路径使用一个模块标志附着到它通过一条虚线。相关的模块的名称被显示在模块标志而不是在相关的路径上。

图7.14显示一个提炼到图7.12在它的ADSL连接,现在是一个相关的模块。图也显示 附加内部结构在监控系统和命令中心内部,分别一个ADSL调制解调器和一个ADSL网关。这些新的组成部分被使用来处理它们之间的ADSL通讯,正如显示在图7.15。图也包含另外一种相关的模块,SDSL连接。SDSL连接表示一条同步数字用户线 (SDSL)的使用在命令中心之间,但组成部分需要来支持SDSL没显示。此外,图显示ACME监控网络的详细方面关联到公司客户和连接器,res comms、bus commscenter comms用来连接它们。参考下一节关于连接器属性对应这些的详细讨论。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第16张图片

7.16 一个ACME 监控网络带有2个命令中心的示例

一个相关的模块的内部可以被指定类似任何其它模块。最通用的方式指定相关模块的内部结构是带有一个内部模块图,其中图的框架表示相关的模块。一个参与者(participant)属性被表示使用一个虚线框,像一个引用属性,但区别于其它属性通过关键字«participant»相关的终点也可以被说明,它表示使用字符串:end=propety name,在括号中。

图7.15显示ADSL连接相关模块的内部细节。它的两个participant属性—adsl dceadsl dte—被显示使用«participant»关键字。在这种情况下终点属性没显示由于participant属性有相同的名称作为相关的终点。为了描述adsl dteadsl dce内嵌的组成部分被显示,一个ADSL连接如何被达到,在这种情况下通过一个连接器,称为adsl link,在一个ADSL调制解调器和一个ADSL网关之间。现在隐含,每个连接器类型化使用ADSL连接确保它adsl dte的ADSL调制解调器和它的adsl dce的ADSL网关被连接通过一个连接器称为adsl link。注:连接器adsl link没有类型化和所以没有附加的细节在连接本质上。如果详细的内部细节,诸如,ADSL连接的物理细节的本质,被需要,连接器可以键入一个相关的模块。

图7.16显示ADSL连接和SDSL连接都在使用中。正如显示在图7.14‘CME Surveillance Network’带有两个命令中心,一个对应公司客户端和另外一个对应主治客户端。命令中心相互之间通讯通过一个SDSL连接和到它们客户端通过ADSL连接。

        1. 连接器属性

不像其它属性, 连接器不能被绑定到约束参数在参数图上(参考第8章对应参数图的描述)。然而,有时连接器之间的约束的表达可以是有用的,并且所以SysML允许一个连接器,类型化使用一个相关的模块,将被表示通过 一个连接器属性,其可以被绑定到约束参数。

连接器属性可以被显示在一个模块定义图使用一个组合关联来自一个模块到一个相关的模块。名称在组成部分终点上表示一个连接器属性占有通过模块在整体的终点。它也可被显示在一个内部模块图作为一个矩形标志连接使用一条点线到连接器路径。连接器的标志对应连接器属性有名称字符串:

«connector» connector name:association name

图 7.14 显示三个连接器属性res commsbus commsADSL connectioncenter comms类型是SDSL connection

        1. 建模块的可量化的特征使用数值属性

数值属性被使用来建模一个模块的数量特征,诸如,它的重量或速度。它们也可以被使用来建模向量数量,诸如,位置或速度。其中作为组成部分属性或引用属性的定义基于一个模块,数值属性的定义基于一个数值类型,其指定数值属性可以被采用的有效值的特定范围,当它占有的模块的描述一个实例。SysML定义单位制和数值类型的概念,其可以被用来详细刻画一个数值属性,尽管数值属性不需要有数量类型或单位制。数值属性可以有默认值与它们关联,和它们也能定义一个它们值的概率分布。

      1. 在一个模块定义图上建模数值类型

数值类型(ValueType)被使用来描述数量的值。例如,名称为总重和组件重量的数值可以是一个数值类型称为千克(Kg),它的值可以是任何实数类型。数值类型的目的是提供一个数量的一个统一定义,许多数值属性可以共享。数值类型定义可以被重用通过输入多个数值属性使用相同的数值类型。

数值类型描述数据结构对应表示一种数量指定它的允许的值集。这是特别重要的,当依赖计算有关的值的操作来执行多种计算时。数值属性可以是基于多个预先定义的数值类型,SysML提供的或新的数值类型可以被定义。下面的是不同的数值类型的分类:

  • 基本类型:支持标量的定义。整数、字符串、布尔、和实数是预先定义的基本类型在SysML中。
  • 枚举:定义一组命名的值称为枚举值。枚举的例子是色彩和一周的每天。
  • 结构化的类型:表示一种数据结构的规范,其包含超过一个数据元素,其中的每个被表示通过一个数值属性。Complex是一个预先定义的结构化类型提供通过SysML。另外一个例子是一个数值类型称为Position带有x,y,和z数值属性。

数值类型表示值而不是实体,因此不像模块,它们没有标识的概念。特别是这隐含,一个数值类型的两个实例是相同的,如果它们有相同的值,其不是实例模块的‘true’。

数值类型被表示在模块定义图上通过一个矩形标志带有一个体边界。数值类型的名称舱段有关键字 «valueType» 优先于名称。表示枚举的标志有一个单一的舱段列举枚举的所有值并且关键字«enumeration»在它的名称舱段前面,标志表示一个结构化的类型也有一个单一的舱段标签为values,其列举数值类型的子元素,使用相同的舱段符号正如显示对应其它数值属性。

图7.17显示一些数值类型在Basic Definitions包中。Size是一个结构化的类型,带有三个子元素:widthheightlength;它们的数值类型是数值类型m(对应米)。m的定义包含它的单位制和数量类型和被随后显示在图7.19。Image Quality是一个枚举被使用来指定通过摄像头捕捉到的图像的质量,其可以被用来控制,多少数据被需要捕捉到每个视频帧。其它数值类型都是实数类型,所以指定SysML数值类型为Real。在这种情况下指定被简单开始,数值类型对应MHz、MBFrames per Second是实数类型。参考第7.7节获取更专业的讨论关于符号和意义。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第17张图片

7.17在一个模块定义图中,定义基础数值类型

        1. 添加单位制和数量类型到数值类型

SysML定义单位制概念和数量类型来使它们用作共享的定义,可以被使用在整个模型中,或绘制在一个模型库中,可以被重用在一组模型集中。数量类型标识一种物理数量类型,诸如,长度,它的值可以被描述根据定义的单位制(例,米或英尺)。单位制必须常常与一个数量类型关联,但一个数量类型不需要任何相关的单位制,经常可以根据数值被表示等式,包含数量类型没有特定的单位制。数量类型和单位制都可以有标志,诸如,那些显示在图7.18,SysML和其它工具可以使用在数量类型和单位制类型的全名的位置。

数值类型,其表示一个物理数量可以引用一个数量类型和/或单位制,作为它的定义的部分,并因此赋值单位制和数量类型到任何数值属性的类型。

        1. SI标准对应单位制和数量类型

国际标准单位制(SI)是一个标准对应单位制和数量类型发布通过国际标准组织(ISO)。SI数量类型和单位制的完整集,描述在一个模型库OMG SysML标准的附录D,基于一个复杂的基础库,其支持定量分析。这个模型库可以被导入到任何模型允许SI definitions被使用,或使用它们作为定义更特定的单位制和数量类型。尽管这个模型库是SysML标准的非正式的部分,其不需要工具供应商兼容,它鼓励更多的SysML建模工具将包含这个库和可能的扩展。正如先前陈述在第6章,这个库被重命名在SysML1.3中为“SysML Quantity Kinds and Units for ISO 80000-1”,但在本章中,我们保留使用初始的名称SI Definitions

图7.18显示SysML的SI Definitions模型库中的一些定义。尽管SysML提供SI单位制和数量类型的描述,它不定义标准数值类型,由于数值类型常常被客户化对应用于基于数据表示的需要的应用和准确性。SI数值类型是一个局部定义的模型库,其导入SI Definitions为了定义一组SI数值类型集对应这个应用基于SI单位制和数量类型。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第18张图片

7.18 导入‘SI definitions通过 SysML

在SI中的一些数值类型模型库被显示在图7.19,使用单位制定义导入从SysML的SI Definitions包。这使数量的一个协调的表示,其可以被检查数量类型和单位制的一致性。尽管这里没显示,在这个图中所有数值类型被定义作为实数类型。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第19张图片

7.19使用单位制在数值类型的定义中

        1. 添加数值属性到模块

一旦数值类型被定义,它们可以被用来输入到模块的数值属性。数值属性与其它属性有相同的特征,诸如,多重性,和类似于其它属性,显示模块在的一个独立舱段。舱段为有标签values

图7.20显示一个模块定义图包含三个带有数值属性的模块:Camera、Electronics AssemblyOptical Assembly。数值属性中的一些,诸如,Electronics Assembly模块的clock speedmemory类型化使用数值类型定义在图7.17。其它类型化使用显示在图7.19。例如,Camera模块的sensitivity数值属性键入lux,其测量照度。数值类型的名称并不限于字母数字字符。例如, Camera模块中的pan field of regard键入字符“0”,其是一个角度的标志。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第20张图片

7.20 一个数值类型的使用键入一个数值属性在一个,非一个模块定义图

        1. 只读和状态属性

属性可以被指定作为只读,其意味着,它们的值不能发生变更在它们的所有者的生命期内。一个只读属性被说明使用关键字readOnly在括号中在属性字符串的最后。

属性也可被指定作为静态的(static),其意味着它的值在整个这个模块描述的实例中是相同的。静态属性常常被使用来描述一些配置特征,其有相同的值对应一种特定类型,诸如,一个多维数据集的数量。静态属性被显示通过属性名称字符串下划线。

        1. 衍生的属性

属性可以被指定作为衍生的,其意味着,它们的值衍生自其它值。在软件系统中,一个衍生的属性典型的计算通过软件在系统中。在物理系统中,一个属性典型的标记作为衍生的来说明,其衍生的属性值计算基于分析或仿真,和也可以被提交到约束作为描述在第8章,第8.3.1节。通过定义,约束表达属性之间的非因果关系,但衍生的属性可以被即使作为依赖的变量,和因此允许等式表示在约束中被当做数学函数。

衍生的属性被表示通过放置在一个斜杠(/)在属性名称的前面。图7.21显示Optical Assembly带有一个附加的属性f-number,其被标记作为衍生的。也显示了focal lengthaperture之间的一个约束,和f-number,其可以被使用给定焦距和孔径,来计算f-number的值。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第21张图片

7.21 衍生的属性的例子

        1. 建模属性值和分布

属性的一个默认值可以被赋值到属性。属性的默认值被明确说明作为它的属性字符串的部分,在模块的合适位置使用下面的语法:

property name: type name = default value

组成部分的初始值可以被指定使用一个独立的舱段标签为initial Values。初始值放置属性的默认值在模块中,输入组成部分中。如果没有初始值定义,默认值被使用对应组成部分的属性。initial Values舱段可以被使用在组成部分上,但不能被使用在模块上。

数值属性的值范围可以被描述通过一个概率分布不是一个单一值。OMG SysML标准的附录D定义包含一个通用分布定义的模型库,可以被重用。下面的符号被使用表示一个分布属性:

«distributionName» {p1=value, p2 =value …} property name:type name

标签p1、p2,等作为概率分布的特征化。例如,一个meanstandard deviation是属性描述一个正态的分布,或一个minmax值描述一个内部分布。

图7.22显示多个分布属性,其中的pan field of regardfocal lengthpan field of regard是弧的尺寸,Camera可以在这个范围内旋转,被定义作为一个内部分布带有一个最小值00和一个最大值3600,由于实际的pan field of regard值依赖于摄像头的安装。Optical Assemblyfocal length被定义作为一个正态分布带有一个7mm的平均值和和一个0.35mm的标准偏离(standardDeviation)。这对应使用制造过程造成的的超差,微小偏差的将影响组合透镜和反射镜的位置。

pan field of regardfocal length的分布在整个相机的入口和光学组件上。CameradimensionsOptical Assemblyaperture有默认值,一个简单的标量对应aperture,和dimensions的每个方向(3维)都有对应的值。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第22张图片

7.22属性值和分布的例子

    1. 建模流

系统规范的一个重要方面是定义发生在系统的不同组成部分之间的流。流可以是自然界中物理的,例如,水流进流出一台水泵,并且水泵可以有电力可以输入。常常,在电子系统中,它是流动的信息和/或控制,诸如,一个信号,一个雷达系统可以检测一个目标,或一个按钮被按下在一个键盘上。

通用的术语项(item)被使用来定义流动的事物。模块可以包含流动的属性,称为流属性,定义可以流入或流出模块的项。此外,流动项被指定在组成部分之间的连接器上,什么实际执行流动。

      1. 建模流动的项

项(item)使用来描述流动在一个系统中的实体的类型;可以是包含事物和能量的一个物理流动,或一个信息流动。项可以是模块、数值类型、或信号。项建模作为模块时,典型的包含描述项的数量的数值属性,诸如,一个模块表示水的温度和压力。项可以有明确的内部结构,诸如,一辆汽车流动在一个汽车装配线上或一个复杂的消息发送贯穿一条数据线。流也可以被简化来表示仅仅一个量化的属性(例,水温),在这种情形下,项可以表示作为一个数值类型而不是一个模块。控制和/或信息的流动也可表示通过信号。这些信号可以使用来控制一个组成部分的行为,也即是控制流的目标。

项可以定义在不同层级的抽象动作上,或在整个设计过程中可能会被细化。例如, 来自一个安全系统的警报流动到一个操作者,可以被表示作为一个信号在一个高层级的抽象动作上。然而,在更详细的探索警报如何通讯的过程中,项可以被重定义。如果警报被通讯作为一个音频警报,例如,它可以被重定义作为一个模块,包含表示声音的大小和频率的属性。

图7.23显示Standard Item Definitions模型库的部分,包含摄像头模块中的流动项。显示的项被建模作为模块,并包含描述它们特征的数值属性。Light模块定义它的辐射flux根据瓦特(W)和illuminance根据luxMPEG4模块定义frame rate使用Hertz和一帧中的lines的数目。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第23张图片

7.23在一个摄像头系统中流动的项

      1. 流属性

在SysML 1.3中,模块规范包含一组流属性集,对应输入和/或输出流的个体规范。每个流属性(flow property)有一个名称、类型、多重性和方向。流属性的类型可以是一个模块、数值类型、或依赖于流动规范的信号。流属性的多重性说明属性有多少个值,可以包含作为它占有的模块的一个实例的组成部分。

模块的流属性被显示在一个特定的舱段标签为flow properties每个流属性显示采用下面的格式:

direction property name:item type[multiplicity]

流属性的方向可以是in、out、inout之一。

模块图7.24显示两个光学设备,一个Light Source和一个Light SensorLight Source输出beam,Light Sensor接收incoming light,两个模块的流属性都是Light模块显示在图7.23。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第24张图片

7.24 流属性在模块上

      1. 在内部模块图的组成部分之间建模流

流发生作为一个值被赋值到一个流属性的一个结果(或值,如果属性的多重性是大于1的),其必须有outinout方向,在一个连接器的终点(源)。赋值的值被传递穿过一个连接器或连接器到兼容的流属性,其必须有ininout方向,在连接的组成部分上。

        1. 流属性的兼容性

流动项流动在组成部分之间的连接器上,依赖于连接器两个终点上组成部分上的流属性。流动项出现在源组成部分与目标组成部分之间,连接器的两个终端都必须至少有一个流属性带有一个兼容的类型和方向。如果目标流属性与源流属性或生成的属性类型是相同的,流属性类型是兼容的。如果两个属性都有方向inout,或它的方向与另一个是相反的,它们的方向是兼容的。如果有超过一个流属性匹配基础的类型和方向,随后兼容的流属性被确定基于它们的名称。

内部模块图在图7.25显示Light SourceLight Sensor来自图7.24连接在一个内部模块定义图中称为Light Test。它们的流的类型和方向是兼容的允许光到流从Light SourceLight Sensor

7.25 连接组成部分使用流属性

相比之下,模块定义图7.26中,扩展图7.24中光的定义,包含Polarized Light带有附加的属性,和Unpolarized Light (参考第7.7.1节获取有关分类的一个讨论)。它显示一个特定的光源,一个Lamp和一个Polarized Light SensorLamp生成的beam类型为Unpolarized Light,所以与Polarized Light Sensorincoming light属性不兼容。注:这是一个抽象,并可能更准确来建议,Polarized Light Sensor将生成关于非偏振光的存在的不正确的结果。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第25张图片

7.26 连接组成部分使用不兼容的流属性

        1. 流属性传递

如果一个组成部分连接其它多个组成部分,它们有兼容的流属性和/或任何给定的连接器表示多个连接,随后一个值赋值到那个组成部分一个输出流属性上并传播在所有的链接上;这有时称为扇出(fan-out)。相反的情形,称为扇入(fan-in),当一个输入流属性在那个组成部分上与许多与它连接的组成部分的输出流属性兼容发生时。SysML不定义在这种情况下发生什么,由于在一个单一的流属性上的多个流动的值分配的机制是不明确的。例如,流属性可以有一个多重性等于输入流的源的数目,或平均的一些形式可以发生。语言可以被扩展使用一个配置文件,正如描述在第15章,为了区分意图和意义。

        1. 流动项

项实际上流动贯穿一个连接器被指定通过流动项(item flows)。流动项指定流动的项的类型和流的方向。例如,水可以流动在一个泵和水箱之间。

而流属性与组成部分关联在连接器的终点,定义什么可以流动,实际的流动项可以是不同的依赖于语境。特别是,流动项可以是一些其它元素在流属性类型的泛化层次结构中。

流动项也可以有一个相关的属性,称为项属性(item property),包含在封闭的模块中,其标识一个项在封闭的模块语境中的一个特定用法。特别是,多个项属性可以有相同的类型,但每个项属性表示一个不同的用法。例如,水流进到一个泵是水的一种用法,和水流出泵是水的另外一种用法。水流动的流进和流出会被表示通过不同的项属性。

流动项必须与在它相关的连接器的每个终点上的流属性兼容。SysML已经放松了兼容性约束,为流动项建模提供了更大的灵活性。流动项的唯一有效约束是:源和目标的流属性处于相同的分类层次中。然而, 兼容性的一个通用的方法是流动项的类型是相同的或更通用超过源流属性,和目标流属性的类型是相同的或更通用超过流动项。换句话说,流动被指定更一般的讲正如您传输从源到目标。这种兼容性模式的一个简单的例子是对应源流的类型属性是入侵者警报状态,流动项的类型将是警报状态,和目标流属性的类型将是状态。入侵者警报正态分布可以随后保留一个原始的组成部分,通过连接器作为警报状态和进入组成部分连接器的在其它方面作为状态。

在连接器中流动项被表示作为黑色填充的箭头,箭头说明流的方向。当多个流动项在一个连接器上时,所有流动项有相同的方向,显示在一个逗号分隔的列表附近浮动箭头对应合适的流方向。每个流动项有一个类型名称和项属性,如果它被定义。

图7.27显示多种类型光源和光传感器之间的流动项。新的Polarized Light、 Coherent Light 类型被添加,其是来自Laser光源的输出。Laser Test模块的结构舱段显示3个组成部分类型为Laser和另外三个组成部分类型为Polarized Light Sensor。它们之间有三个连接器显示三个可能的流动项。顶部的两个流动项说明期望的兼容模型。流在l1s1之间有项Coherent Light,其是相同的源流属性beam;目标流属性incoming light (来自图7.26)是Polarized Light,比流动项更通用。流在l2s2之间有类型Polarized Light,其比源流属性和目标流属性更通用。当流动项是Light分类层次的根时,也说明,l3s3之间,是最低的约束情形。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第26张图片

7.27 组成部分之间的流动项

项也可以流动在连接的引用属性之间。图7.28显示电流(被表示通过模块DC)通过Mechanical Power Subsystem模块,对应前面的图7.11。来自power source的整个流通过Distribution Harness到多个电机。在这种情况下,每个项被表示通过一个相应的项属性占有通过Mechanical Power Subsystem。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第27张图片

7.28 引用属性之间的流动项

项属性可以被约束在参数等式中,描述在第8章;对应这种的一个例子,参考图16.23。

    1. 建模模块行为

模块为行为提供一个语境,SysML术语涵盖模块如何处理输入和输出并变更它的内部状态的任何和所有描述。一个模块可以设计一个行为作为它的主要的或(分类)行为, 当模块被初始化时它开始执行。其它行为被设计将提供服务请求如何处理的细节方法。这两类行为可以依次调用模块内的其它行为。行为有参数,被使用来在流动项流入或行为的输出之前、之后、和有时在执行过程中。

正如第9章到11章描述,有三种主要的行为形式在SysML中:活动、状态机、和交互:

  • 活动转化输入为输出。
  • 状态机被使用来描述模块如何响应事件。
  • 交互描述一个模块的组成部分如何相互交互使用消息传递。

在SysML语言内部认可两种形式的行为。不透明行为(opaque behavior)被表示作为一种文本表示使用SysML的外部语言。功能行为(function behavior)类似于一个不透明行为,增加的限制条件,不允许直接影响占有模块的状态,但可以作为通讯时的参数。功能行为被常常用来定义数学函数。

      1. 建模一个模块的主要行为

模块的主要行为(main behavior)(也称为分类器行为(classifier behavior))开始执行在一个模块的生命周期开始时间和通常终止在它的生命周期结束时,尽管它可以终止在开始以后。分类器行为的格式的选项依赖于模块的性质,如果模块很大程度上是事件驱动的,采用状态机和如果模块很大程度上作为活动的输入项到输出项。一个广受欢迎的混合方法是使用一个状态机来描述一个模块的状态,和当一个模块处于一个给定的状态或当它转变状态之间时指定一个活动。行为也可被指定不依赖于一个模块,并可以被分配到模块或模块的组成部分。

当模块有一个主要的行为并也有带有组成部分行为,建模者应该确保,在整体和系统层次的每个层级的组成部分之间行为是协调的。主要行为可以扮演作为一个控制器,在它的组成部分的行为上扮演一个主动角色。在这种情况下,模块的行为是它的主要行为和所有它的组成部分的主要行为的组合。另外一种方法是对应模块分类器行为将是一个可选的抽象,常常称为黑盒视图(black box view)。它的组成部分的行为被忽略,在这种情况下,模块的主要行为表示一个规范,组成部分必须实现。模块的组成部分行为称为白盒视图(white box view),采用这样的方式相互交互黑盒的行为被保留。

      1. 指定模块的行为特征

伴随结构特征,模块也可以有自己的行为特征(behavioral features),描述一个模块可以响应的那个请求。行为特征可以有一个相关的方法,当模块处理对应特征的一个请求时,其是一个行为调用。有两个类型的行为特征分别为操作和接收

操作(operation)是一个行为特征,典型的被触发通过一个同步请求;也即是,当请求者等待一个响应时, 尽管它们可以被异步触发。每个操作定义一组参数集,其描述描述通过请求传递的参数,或被传输返回到输出,一旦一个请求已经被处理,或两者。

接收(reception)仅可被触发通过一个异步请求;也即是,当请求者不等待一个响应时。每个接收与一个信号(signal)关联,其定义一条消息带有一组属性集,其表示消息的内容;接收的参数必须与相关信号的属性相同。因此,该信号的属性间接地定义了异步请求传递的参数集的集合。在不同的模块中的接收可以响应相同的信号,所以常常使用消息可以被定义一次和重用在许多模块中。一个操作和接收之间的主要区别是:请求操作可以触发一个即刻的响应从模块通过执行它相关的方法,而接收请求仅处理当模块明确接收请求时,例如,当一个转变在状态机中的状态之间对应一个模块被触发通过接收的信号,或当模块的一个活动模块包含一个接收信号动作对应信号。

行为特征被详细讨论在活动、交互、和状态机第9章到第11章。

信号被定义使用一个盒子标志带有一条实线和关键字«singal»在信号名称前。一个信号标志有一个单独的没有标签的舱段,其包含它的属性使用下面的形式:

attribute name: attribute type [multiplicity]

图7.29显示一个信号集,其被使用通过Surveillance System。信号被组织进一个分类层次带有每个新的分层在层次中添加一个新的信号属性(参考第7.7节关于分类的一个讨论)。例如, Status Report信号有三个属性: report直接定义, log time来自它与Status Message的关系,id来它System Message关系。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第28张图片

7.29 一个信号分类层次

操作和接收被显示在一个模块的一个分离的舱段标签为operations并被描述通过它们的签字。操作的签名是它的名称带有一个组合参数,和可选的返回类型如下:

operation name (parameter list):return type

参数列表以逗号分隔使用格式:

direction parameter name: parameter type

类型参数方向可以是in,out,或inout

接收的标志是它的名称和如下的参数列表的一个组合(其中,接收的名称常常是它的相关信号的名称):

«signal» reception name (parameter list)

正如SysML 1.3,一个模块必须设计,是否它制作请求或处理请求对应它定义的行为特征。请求对应一个提供的行为特征被处理通过定义的模块。如果一个模块定义一个请求的行为特征,它说明,它期望一些外部实体来处理任何请求,它制作对应的特征。行为特征可以是请求的和提供的。

提供的行为特征被表示通过关键字prov前面有特征的符号;一个请求行为特征被表示通过关键字reqd;关键字provreqd说明一个特征既是需要的也是提供的。如果没有关键字被显示,随后特征被假定将被提供。

图7.30显示一个服务的视图提供和请求通过Surveillance SystemCommand Center。它们都有相同的接收集,对应信号描述在图7.29。大多数接收定义通过Surveillance System被需要,这意味着它期望它的环境来接收它发出的信号,带有异常,它期望接收Status Ack信号和所以为它们提供一个接收。相反对应Command Center是true,其仅有一个请求的接收;剩余的被提供正如说明没有一个关键字。此外Surveillance System提供一个操作来获得视频关联它已经报告的任何事件,和Command Center请求如此的一个操作。Command Center提供一个需要的threat report,详细介绍目前已知问题; Surveillance System请求如此的一个操作。Command Center也提供和请求两个其它操作 alert summarystatus report,其被使用来在Command Centers之间通讯和通过外部代理调查事件。

      1. 建模块定义的方法

模块所拥有的一些行为,只执行响应一个特定的激励,特别是当一个服务请求是通过一个操作提供的。这样的行为被称为一种方法(method),它与请求的操作有关。

不像主要的模块行为, 方法通常有一个有限的生命,开始它们的执行跟随激励,执行它们分配的任务,并随后终止,或许返回一些结果。方法通常被说明使用活动,不透明的行为,或功能行为。

应该被提及是,不是所有的操作都需要方法。相关的操作请求可以通过使用专门的构造如一个接受事件动作行为直接处理,描述在第9.7节和一个状态机触发器,描述在第11.4.1和11.5节。一个操作不能与一个方法和这些其它构件相关。

SysML支持多态性符号,其意味着,许多不同的模块可以响应相同的激励,但每个可以执行以一个特定的方式;即,通过调用一个特定的方法。多态性被与分类密切相关,正如描述在第7.7节。

      1. 跨连接器的路由请求

对行为特征的请求可以在组成部分和引用之间的连接器上进行通讯。当一个模块的行为制作一个请求的行为特征的一个请求,随后那个请求被通讯贯穿任何连接器,其它的终点有相同类型的一个提供的行为特征(即,操作或接收)使用一个兼容的标志。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第29张图片

7.30模块使用行为特征

两个特征的两个标志必须满足下面的所有下面的准则将是兼容的。首先,特征类型、参数名称和参数方向必须是相同的。其次,类型、多重性、顺序和参数的唯一性特征必须是兼容的,其作为一个通用规则意味着,输入参数特征在提供的特征上必须是相同的或更通用超过请求的特征,和输出参数特征在提供的特征必须是相同的或更通用超过请求特征的特定。对应类型,通用和特定的参考它们的定为一个分类层次中。对应多重性,一个更广泛的范围(即,更多的值)被考虑更通用的。对应顺序,无序被考虑更通用和对应唯一性,非唯一被考虑作为更通用的(有关一个顺序和唯一的讨论请参考第8.3.1节)。

正如使用流属性,如果一个第一个组成部分连接多个其它组成部分,或一个连接器在一个组成部分和另外一各组成部分之间表示多个连接,随后请求可以被路由贯穿许多联系,其重点有兼容的行为特征。如果连接扇入到一个组成部分,随后请求或快速触发一个方法的执行每个请求,或它们被排队直到一个行为接收它们。如果连接扇出,随后一个持续流出的请求被贯穿所有连接,其终点是一个请求接收。然而,SysML不定义机制通过多个返回值被处理通过行为,其制作请求。这被保留将是指定通过一个特定的执行配置文件。

正如可以被查看从图7.30, Command CenterSurveillance System有许多兼容的行为特征,可以作为两个之间的通讯基础。命令中心也可以通讯使用alert summarystatus report,其都被提供和请求。相比之下,根据定义在图7.30,两个连接的Surveillance Systems会没有事物来说到另外一个。这些模块的一种典型的配置显示在图7.16,在residenceresidential surveillance center之间的连接器中有多个连接,其意味着residential surveillance center需要来支持扇入请求对应它提供的操作和接收。

    1. 建模接口使用端口

建模接口是系统建模的一个关键方面。SysML允许建模者来指定一组不同的接口集包含机械、电子、软件、和人机接口。此外,接口指定信息流必须能指定逻辑的信息内容,以及信息在位、字节,和其它信号特征的物理编码。尽管系统接口可以被指定简单使用模块的特征和组成部分之间的连接器,SysML也引入端口的概念,允许一个更健壮和灵活的系统接口定义。

端口(port)表示一个令牌的存取点,并处于模块的边界上和在那个模块输入的任何组成部分或引用类型的边界上。模块可以有许多端口,指定不同的获取点。端口可以被连接到另外一个端口通过连接器在内部模块图中,支持组成部分之间的交互。

SysML 1.3 引入两种新的类型的端口称为完整端口和代理端口完整端口(full port)等效于父模块边界上的一个组成部分,其被制作可用作为一个存取点到模块和来自模块的。一个完整端口是一个模块类型并可以有内嵌的组成部分和行为,并且可以修改传入和持传出流像任何其它组成部分。完整端口可以表示一个物理的组成部分,诸如,一个电子连接器或一个机械接口装配,和因此是一个组成部分在系统组成部分树中。一个完整端口和一个组成部分之间的主要区别是当模块被封装时,即isEncapsulatedtrue时(参考建模内嵌的结构和连接器在第7.3.1节)外部连接器可以合法的被连接到完整端口,而它们不能被连接到内部组成部分。

端口的另外一种类型是代理端口(proxy port)。相比之下一个代理端口不构成它的父模块的一个组成部分,但代替提供获取它的父模块或模块的组成部分的特征外部接口,不需要修改它的输入或输出。代理端口是必须的一个传递通过或依赖指定占有模块的特征,可以被存取在端口上。一个代理端口是一个接口模块类型,它指定特征可以被存取通端口。接口模块不能有内部行为或组成部分(或完整端口),但可以包含内嵌的代理端口。

代理和完整端口都可以支持相同的特征集,其是行为特征和任何类型的属性除了组成部分属性。在这两种情形下,一个模块的使用者仅考虑使用它的端口的特征,无论特征是否被暴露通过代理端口,或直接处理通过完整端口。

是否来使用端口和其它类型的端口的使用的决定是一个方法学问题,常常关联到如何一个模块试图被使用。一个代理端口常常被使用来指定系统,作为一个黑盒,在这种情形下,接口规范不指定系统的任何内部结构。另一方面, 如果您需要来指定接口根据系统的一个实际的组成部分一个完整端口被使用,并使能那个组成部分来修改输入和输出到占有的模块。

代理端口和完整端口的概念被添加在SysML中1.3,并试图来替换流端口(flow port)标准端口(standard port)概念在SysML1.2中。通常,代理端口提供SysML v1.2中的流端口和标准端口的所有功能,但也添加功能对应嵌入的端口和对应指定特定非流属性。在SysML v1.3中,流端口和标准端口被保留在语言中,但目标是删除它们在一个未来的版本中。有关这些丢弃的特征的讨论提供在第7.9节。

      1. 完整端口

完整端口(Full Ports)类似于组成部分,它们被包含在拥有它们的模块的组成部分树。然而,不像组成部分,它们图形化显示在它们的父的边界上。外部连接器可以连接到一个完整端口即使它们的父模块被封装(即,isEncapsulated被设置为true),而组成部分不能。完整端口是模块类型并可以拥有其它模块任何可用的完整的特征集。

完整端口被显示作为矩形(典型的正方形),在它的父的标志的边界上相交的。端口的名称、类型、和多重性被显示在一个字符串中,或在端口标志内部或浮动在附近使用下面的格式:

«full» port name: block name[multiplicity]

当一个端口的类型有流属性,一个箭头在端口标志内部可以被用来提供关于它们方向的信息。如果所有流属性有方向in,随后箭头面向里。如果所有的流属性有方向out,随后箭头向外。如果是方向的混合或所有流属性有方向inout,随后两个相反的箭头被使用。

完整端口可以被列举在一个独立的完整端口舱段,使用字符串:

direction port name: block name[multiplicity]

当端口类型有流属性时,方向仅被显示。

图7.31显示一个模块定义图描绘一个Bracket(支架)模块。支架有4个支撑点(Bolts(螺栓)),被用来固定支架在墙面上和另外一个4个附着的支架到一个摄像头。正如说明通过«full»关键字,安装点被表示作为完整端口,输入两个模块,M10 BoltM5 Bolt (分别为10mm和5mm)。墙面的支撑需要较大的螺栓,所以墙面支撑点使用直径较大的螺栓,正如说明通过端口类型的名称。

完整端口可以包含内嵌的端口,它们的类型本身可以包含端口,因此导致一个内嵌的任意深度的完整端口层次树。内嵌端口被显示作为矩形相交在它们父端口标志的边界上。它们带有附件说明可以放置在边界上的任何位置,在端口层次树中,它们可能不会在层次树中表示较高层级的元素标志上相交。完整端口也可有内嵌的代理端口。在这种情况下,完整端口可以表示例如一个物理连接器,但代理端口被使用来指定选择的连接器特征,诸如,它的引脚输出。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第30张图片

7.31 一个模块使用完整端口

图7.32显示Physical package一个模块定义图,其描述ACME摄像头的物理定义。这个特定的图显示,Camera如何被固定在某个地方。它有一个完整端口称为mount类型化使用Bracket模块,初始描述在图7.31。Bracket的端口可以被查看在它们的父的标志的边界上。尽管完整端口的内嵌的端口可以被放置在它们的父的标志的边界的任何位置(上面带有附加说明的注释),mount的内嵌的端口已经被放置,所以那些试图连接到外部的被显示在外部和那些试图连接到内部的被显示在内部。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第31张图片

7.32 一个完整端口使用内嵌的端口

      1. 代理端口

代理端口区别于一个完整端口的是它不表示一个系统的组成部分,但是一个建模构件,暴露或它拥有的模块或那个模块的组成部分的特征。代理端口类型是接口模块(interface blocks), 不包含任何内部结构或行为的一个模块的特定的形式。而完整端口类似于组成部分属性,代理端口类似于引用属性,提供存取它拥有的模块或它的组成部分的一组选择的特征集的接口。

接口模块被显示通过模块标志,但带有关键字«interfaceBlock»和没有一个组成部分舱段或完整端口舱段。

代理端口像完整端口,被显示作为矩形相交在它们父的标志边界上。端口的名称、类型、和多重性被显示在一个字符串中浮动在端口的附近使用格式:

«proxy» port name: interface block name[multiplicity]

可选的是端口字符串可以被包含在一个独立的代理端口舱段,使用字符串:

direction port: interface block[multiplicity]

图7.33显示一些接口模块在一个模块定义图上。它们都表示被需要物理地连接一个摄像头到它的环境的物理接口。接口模块可以仅包含代理端口和和非完整端口,所以所有的端口有关键字«proxy»

正如前面陈述的,接口模块可以拥有代理端口,使代理端口有详细的内嵌的代理端口。内嵌的端口在代理端口上被显示以内嵌的端口在完整端口上相似的方式,代理端口的嵌套端口总是在它们的父符号的外部边界上显示的异常。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第32张图片

7.33接口模块与代理端口

图7.34显示接口模块来自图7.33,使用来显示一个Wired Camera 的物理接口(关键字«full»«proxy»被省略在所有端口上为了减少混乱)。Wired Camera有三个代理端口对应ethernet、powervideo和一个mount的完整端口,正如显示在图7.32。注:仅墙面上的安装点被显示在mount上,由于这个图试图仅显示摄像头的外部接口。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第33张图片

7.34 一个模块使用内嵌端口

        1. 行为端口

代理端口可以被定义将是行为端口(behavior port),其说明它提供存取它占有模块的特征而不是它占有模块的一些内部组成部分的特征。行为端口的流属性可以被映射到模块的主要的参数(或分类)行为。指定映射的机制在SysML中没有陈述,允许建模者使用不同的方法学,或在不同领域建立不同的方法。参考第7.5.1节获取一个模块的主要行为的一个描述。一个行为端口和它拥有的模块的特征之间的兼容性类似于那些通过连接器连接的特征,除了特征带有方向,即,流属性和行为特征,方向必须相同的而不是相互对立的。

模块的一个行为可以发送和接收信息通过一个任意嵌套的行为端口通过显式地指定到端口的路径,或当发送信号或调用操作对应端口的特征,或当接收信号或调用操作对应端口上的特征。参考第9.7节和9.11.2节对应关于这一点的详细讨论。

SysML 在目前还没有提供一个符号来区分行为端口,尽管这个信息被存储在模型库。

      1. 连接端口

当一个模块有端口,端口也可被描述在组成部分和引用属性上,在一个内部模块图中是这个模块的类型。端口可以被连接或与其它端口或使用连接器直接到组成部分。一个端口可以被连接到超过一个其它端口或组成部分,尽管每个连接需要一个独立的连接器。

根据特征兼容性,从一个外部视角,连接到一个完整端口和代理端口没有区别。然而,内部连接到代理端口有不同的特点对比内部连接到完整端口。一个内部连接器是一个,其连接拥有端口的相同的模块的一个端口与一个组成部分。一个外部连接器是一个,其连接一个端口与一个组成部分或拥有端口的一些其它模块。主要的不同在连接完整端口和代理端口内部的是确定特征的兼容性,其被讨论在下面的章节。代理端口是行为端口表示它们拥有的模块和所以不能被连接内部的。

连接器的符号符号被介绍在第7.3.1节的连接组成部分在一个内部模块图一节。端口显示在一个内部模块图的图框架上表示端口在封闭的模块上,其被设计通过图框架。在图7.35,端口在图框架上对应端口在Camera模块中。

图7.35显示Wired Camera的端口如何被内部地连接。Electronics AssemblyMount Assembly是客户装配过程。确定不能封装它们,所以它们的内部组成部分被直接连接从外部不需要连接通过一个在它们边界上的一个中间端口。有线摄像头的video端口被直接连接到Electronics AssemblyComposite Converter组成部分。相似的, mount端口被连接与Platform组成部分在Mount Assembly内部。Power SupplyEthernet Card模块是现成的组件被封装,所以它们必须被连接通过它们的端口,并不允许直接连接到它们内部的组成部分。有线摄像头的ethernet端口被连接与一个端口在Ethernet Card上和power端口被连接与一个端口在Power Supply上。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第34张图片

7.35连接端口内部的到一个模块

        1. 连接完整的端口

连接完整端口有相同的含义和约束同连接组成部分。特别是, 连接完整对口确定行为特征和流属性的兼容性的规则与组成部分是相同的,正如描述在第7.4.3节。

图7.36显示Optical Assembly被检查在一个测试环境使用装备定义在图7.24。正如可以被查看从流属性在连接端口和组成部分上的方向, Light可以流动通过Optical Test Bench组件。一个Light Source发出一个光柱,落在Optical AssemblyFilter上。filtered light输出从Filter,被处理通过光学组件在Focusing Assembly来生成聚焦光用,其被发出从Optical Assembly通过一个保护screen,和是Light Sensor上的事件。这个传感器测量它们接收的多个光属性。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第35张图片

7.36 连接组成部分和完整端口

当一个完整端口表示一个物理组件带有子结构,端口可以进一步分解使用它们拥有的组成部分和端口。到和来自端口的连接器随后被需要来分解,为了端口如何被连接显示细节。端口的分解和连接器被描述在本节的后面。

        1. 连接代理端口

正如前面陈述的,默认的兼容性规则对应外部连接器是相同的与代理端口和完整端口 (和如果封装没有增强,组成部分)。然而,兼容性规则对应行为特征和流属性贯穿内部连接器 是不同的在完整端口和代理端口之间。而完整端口之间的内部连接器,像组成部分, 仍然关注与从一个向外流动的一个组成部分到另一个向内流动的组成部分的匹配,到和来自代理端口的内部连接器,关注的是在代理端口类型上的特征表示一个组成部分上的特征。由于代理端口特征表示它们连接的内部组成部分的特征,它们请求的行为特征和流属性将匹配,即,有相同的而不是相反的方向,将是兼容的。

在图7.35,Wired Camerapower端口与Power Supplypower端口连接通过一个隐式的内部连接器。2个端口类型都是3 Pin AC Plug Interface,定义在图7.37。连接器的终点是特征兼容的,由于2个都有一个current的流属性,兼容的类型和inout流方向,并且它们都有一个power流属性使用兼容的类型和相同的方向。

模块定义图在图7.37中,显示3 Pin AC Plug Interface3 Pin AC Socket Interface的定义,在它们之间使用一个关联, Plug to Socket。它也显示一个模块称为Wired Camera Wall Mounting使用结构舱段显示电源如何被供应到摄像头。墙面和摄像头之间的的外部连接器类型为Plug To Socket。正如讨论在第7.3.3节,连接器的终点是兼容的与连接器终点的类型。连接器的终点也有兼容的流属性,包含一个current流属性,它的类型是相同的和方向是inout,和一个power属性,它的类型是相同的和它的方向相互之间是相反的。它们也都有max current的数值属性,它的类型是AC Current;由于它不是一个有向的特征,方向兼容性规则不适用。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第36张图片

7.37 连接代理端口与类型化的连接器

        1. 共轭端口

两个模块交互,它们交换相同的项,但方向相反。而不是在交互的模块上生成对应代理端口的两个独立的规范,SysML提供一种机制称为共轭端口(conjugate port)来重用一个单一的接口模块对应两个端口。一个端口被设置为另一个端口的共轭, 这表明在该端口上的接口模块的行为特征和流属性的方向是相反的。共轭端口也应用到内嵌的端口,扭转它们说明的示的任何特征方向,除非它们自身共轭的,抵消逆转。共轭也影响端口标志上的方向符号,包含向内和向外的箭头在端口标志上,逆转它们的方向。

完整端口像组成部分,不能是共轭的。模块的端口的类型和组成部分包含行为,其依赖于有向的特征,像流属性和操作有一个定义的方向。组成部分共轭或端口是该块的类型逆转这些特征的方向,违背了其内部行为的基础的假设。

共轭端口被说明通过放置一个颚化符号,‘~’在端口类型的前面,因此:

port name:~Interface Block Name

这个符号的一个例子可以查看图7.41。

        1. 分解端口和连接器

正如描述在第7.6.1和7.6.2节,端口的两个类型可以是内嵌的端口,其可以被分开连接。图7.37和图7.35分别显示Wired Camerapower端口的一个外部连接器和内部连接器。每个连接器的终点有内嵌的端口 (显示在图7.33) 哪些可以连接自己。连接器可以直接连接到内嵌的端口在图7.35或图7.37,但一个相关的模块可以被用来指定附加的细节。第7.3.3节描述一个关联模块的使用对应定义连接器的内部结构。这种内部结构可以简单包含一组连接器集,其定义关联终点的内嵌端口之间的连接器。当一个连接器是一个关联模块类型,在这些连接终点之间的实际交互典型的被处理通过关联模块的内部结构, 对应特征兼容性,可以定义一个不同的规则集。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第37张图片

7.38 连接代理端口在一个相关的模块中

在图7.38中,关联在图7.37被替换通过一个关联的模块来显示内嵌的端口之间的连接。关联的模块也添加一个约束,两个连接终点的max current必须是相同的。连接器在图7.37不需要来变更。

连接器在完整端口之间可以是关联模块的类型来显示结构细节,连接如何被达到。图7.39显示一个关联模块的定义,Mounting Interface,其提供细节一个BracketMounting Plate如何连接。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第38张图片

7.39 定义一个结构化连接使用一个相关的模块

图7.40显示内部模块图对应Mount Interface关联的模块,初始的描述在图7.39。它显示每个M5 BoltBracket上被连接到一个M5 Hole,Mounting Plate上和在此处带有一个M5 Nut

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第39张图片

7.40 显示结构连接在一个相关的模块

模块图在图7.41显示一个逻辑的组成部分而不是一个系统的物理视图。Camera Interface接口模块有2个代理端口videocontrol,第一个对应数字视频和另外一个对应控制摄像头的操作。Video Interface接口模块类型为video并包含一个单一out流属性类型为MPEG4。接口模块Control Interface类型为control端口并包含一组接收和操作集,它们所有被提供正如描述在第7.5.4节。Camera Interface共轭与它的两个端口来制定一个接口,其可以被使用通过一个Camera的客户端。video端口被显示在代理端口舱段作为in 即使它的仅流属性有输出方向out,由于它是共轭的。Camera有一个代理端口digital if类型为Camera Interface模块,其指定服务提供通过Camera。内嵌的video端口被显示带有一个向里的箭头来说明它的影响方向。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第40张图片

7.41 定义内嵌的端口使用共轭

内部模模块图对应Surveillance System在图7.42显示监控系统的两个组件之间的通讯。正如显示在图7.41, Camera有一个单一的代理端口带有两个内嵌的代理端口 controlvideo,其中作为Monitoring Station有两个独立的代理端口。不过,这些两组端口集有兼容的类型并可以被连接,由于Cameradigital if端口不共轭,但它的内嵌的端口是,结果在兼容的共轭中。端口有对个多重性,解释在下一节。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第41张图片

7.42 连接内嵌的端口

        1. 连接一个端口到多个端口

正如前面陈述的,一个端口可以被连接到许多其它端口。此外,任何连接器可以自身表示多个连接(即连接在模块实例之间)。这是真正的内部和外部连接器。

正如对应组成部分,如果一个端口被与多个其它端口连接,随后项和请求已存在的端口可以被路由到一些或所有其它端口是否依赖于它们有兼容的特征,和相似的项和请求进入端口可以到达在任何连接器上,在一个连接器上计算精确连接的数目是更复杂的超过仅使用连接的组成部分由于您不得不考虑端口和它的所有者的多重性。

在图7.42, video端口在Monitoring Station上有多重性1,说明所有视频通过一个端口。在Monitoring Station中的软件必须因此能处理视频数据来自超过一个原始视频的交织。Monitoring Station有一个多重性1,和cameras组成部分有一个多重性0..*。然而,为了面对这个不同的多重性, Monitoring Stationcontrol端口有一个多重性0..*和摄像头的内嵌的端口有多重性1。它们之间的连接器有默认的多重性1,所以实施是control端口在Monitoring Station上的一个实例被连接到一个(内嵌的)控制端口子在一个Camera上。

内部模模块图在图7.43显示两个外部连接器到router的代理端口ethernet ports。一个连接器连接work station与一个cameras。正如说明通过缺乏多重性, work station连接器是一对一的;也即是ethernet ports的实例端口在路由器被连接到一个ethernet ports端口实例在连接的其它终点。然而, camera连接器有一个多重性4 在router终点说明ethernet ports的4个实例被连接通过这个连接器。ethernet ports的端口有多重性 6,一个被连接通过work station和4个通过camera连接器,所有一个备用的对应路由器。

SysML不说明任何事物关于端口实例被连接通过连接,尽管当连接的端口和连接器都有默认的多重性1,没有歧义关于它被连接的实例。在其它情形,诸如,在图7.43,连接的安排没有定义,如果这是重要的,随后或者设计不得不被修改有一个明确的配置,或附加的数据需要被添加通过一个配置文件。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第42张图片

7.43 连接器没有默认的多重性

      1. 建模端口之间的流

正如注释在先前的第7.4.3节,流动项可以被显示在组成部分之间的连接器上。流动项也可被显示在端口-到-端口连接器上。

组成部分和完整端口应用相同的兼容性规则,但连接到代理端口的规则区别于内部连接器的情形。当一个流动项出现在一个内部连接器来自一个代理端口,尽管大多数兼容性规则是相同的,流方向的匹配规则是相反的与外部连接器规则。如果候选的流属性是单向的(即不是inout)随后流动项的方向必须是源和目标流属性相同的方向。

图7.44显示路由。光需要来自一个外部源到CameraOptical AssemblyUnpolarized Light是事件在Protective Housing上,其通过一个未指定的意味着极化的光来减少眩光。Polarized Light的结果随后流入Camera Module通过一个代理端口, light in,其是一个代理对应完整端口filterOptical Assembly上。注:Protective Housingflow properties舱段对应的标签有一个部分前缀通过一个分号。这是标准机制对应指示,这些是模块的特征,那是端口的类型。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第43张图片

7.44 端口之间的流动项

      1. 使用端口的接口

描述一个由端口支持的一组行为特征的另一种方法是在接口(interface)中定义它们。使用接口模块的功能,尽管它们是多余的,接口被保留在SysML中,由于它们被使用在UML中, 有些方法可以选择在SysML和UML的使用相同的建模方法。一个或多个接口可以被关联到一个端口来定义它提供或需要的行为特征。典型的,一个接口描述一组行为特征关联到一些特定的服务,诸如,跟踪或向导,但服务的分配提供通过一个模块到它的端口是一个方法学问题。接口定义可以被重用正如需要的来定义许多模块上的端口的接口。

        1. 建模接口

接口被定义在一个模块定义图作为盒子标志使用关键字«interface»在它们名称之前。接口标志有一个操作的舱段像模块标志。

图7.45显示5个接口,描述不同的服务的逻辑分组对应监控系统的方面。例如, Test Tracking包含一组接收集,其允许在摄像头测试过程中,报告进度。其它接口支持其它服务(例,用户和路由管理)。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第44张图片

7.45 一组接口集用来定义提供的或请求的服务

        1. 添加端口的接口

必需的接口(required interface)在一个端口上指定一个或多个操作所需的模块的行为(或它的组成部分)。提供的接口(provided interface)在一个端口上指定一个或多个操作,一个模块(或它的一个或多个组成部分)必须提供。一个组成部分有一个端口使用一个必需的接口需要被连接到另外一个组成部分,其提供它需要的服务,典型的通过一个端口带有一个提供的接口。行为特征在端口上的兼容性定义通过接口是相同的对应端口定义通过接口模块。

一个端口必需的和提供的接口表示通过一个符号称为“球和篮板符号”。一个接口被表示通过或一个球或篮板标志使用接口附近浮动的名称。球描绘一个提供的接口,和篮板描述一个必需的接口。一条实心线附着接口标志到端口,其请求或提供接口。一个端口可以有一个或多个必需的接口和一个或多个提供的接口,和因此可以被连接到多个接口标志。

图7.46显示端口集,定义模块UIMonitoring Station的接口点。UI有4个端口,一个提供服务,两个请求服务和一个提供和请求一个服务。端口test feedback提供服务定义通过Test Tracking接口。端口login services请求服务定义通过接口Login Support。端口user if提供服务定义在User Inputs和请求服务定义通过User OutputsMonitoring Station也有5个端口,2个被定义使用接口模块正如显示在图7.41;其它三个被定义使用接口定义在图7.45。

必需的和提供的接口也可被显示在一个内部模块图使用球-和-篮板符号,如果请求,尽管这常常添加歧义在图上。如果球-和-蓝符号被使用,很容易来执行一个快速可视化的检查在连接端口的兼容性上。端口被连接通过内部连接器应该有接口标志带有相同的名称和形状。端口被连接通过尾部连接器应该有接口标志带有相同的名称和不同的形状。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第45张图片

7.46 定义一个鼓舞基于接口使用代理端口

图7.47显示一个更完整的内部模块图对应Surveillance System添加user interface部分。Surveillance System代表处理请求在它的user login端口到user interface部分。user interface使用Monitoring StationLogin Support服务,通过它的login services端口,来提供数据在当前的用户,并也传递路由管理请求通过它的route requests端口。Monitoring Station请求user interfaceTest Tracking服务。注:内部的连接器来自Surveillance Systemuser if有匹配的标志对应提供的和请求的接口在两个终点上。user interfaceMonitoring Station之间的外部连接器有相反的标志。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第46张图片

7.47 连接基于服务的端口在一个内部模块图

    1. 使用范化建模分类层次

所有分类器(classifiers)可以出现在一个模块定义图上, 这意味着它们可以被组织成一个分类层次结构。本章中面对的分类器是模块、数值类型、接口、接口模块、和信号。在分类层次结构中,每个分类器被描述为比另一个更普遍的或更专业的。通常情况下,一个通用的分类包括一组共同的功能,一组更专业的分类,还包括额外的功能。一般的分类器和专门的分类器之间的关系被称为泛化(generalization)。使用不同的术语来识别的分类在结束的一个范化关系。不同的术语被使用来标识分类器在一个范化关系的终点。在本章中,通用分类器被称为超类(superclass),和更特定的分类器被称为子类(subclass)

分类可以促进重用,当一个子类重用一个超类的特征并添加的它自己身的特征。此类重用的好处是明显的,当超类有明显的细节时或当有许多不同的子类时可以被替换。

本节像讨论追出使用一个模块的结构特征的分类(即,属性和端口),包括添加新的特征和重定义已存在在子类中的特征。尽管本节聚焦的是模块和接口模块,结构特征的其它分类,诸如,接口和数值类型,也可被分类采用相同的方式。数值类型的子类可以添加特征,诸如,单位制和数量类型。

除了分类的重用, 分类也可以被用来描述一个块的特定的配置,以确定用于测试独特的配置或服务作为仿真或其它形式分析的输入。

分类也适用于行为特征,并可以用来控制模块响应进入请求的方式。行为特征的分类和分类的使用所暗示的语义被涵盖了大量的面向对象的设计多个文本和所以将不能被任何详细处理在这里。

范化被表示通过在两个分类器之间使用一条线,在超类的终点是一个中空的三角形箭头。范化路径可以被分开显示,或一组范化路径集可以被组合进一颗树中,正如显示在图 7.48.

图7.48显示Camera的2个子类, Wired CameraWireless Camera。这两子类需要所有的Camera的特征,添加它们自己特定的特征。Wired Camera有一条Power Supply线和一条Ethernet Card线。Wireless Camera使用WiFi(无线以太网)来通讯和是电池驱动的。它也包含一个数值属性battery life

      1. 分类和一个模块的结构特征

在一个分类中,不同的模块有不同的结构特征,子类添加特的征不列举在它们的超类中。不是所有在子类中添加的特征是新的;一些被引入重写或否则变更一个已存在特征的定义,其被称为重定义(redefinition)

在子类中,重定义特征的基础结果是防止该特征在子类中的进一步使用。然而,在此基础上, 重定义的特征通常被用于重定义特征的地方,所以经常有相同的名字。使用时在重定义的特征的位置,重定义特征可以:

  • 限制它的多重性,例如,从‘0..*’ 到 ‘1..2 ’为了减少实例的数目或特征可以持有的值。
  • 添加或变更它的默认值。
  • 提供一个新的分布或变更一个已存在的分布。
  • 将特征的类型更改为更受限制的类型—换句话说,一种类型也即是一个已存在类型的子类。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第47张图片

7.48 模块规范的例子

重定义被显示在括号中,在重定义特征的名称字符串之后使用关键字redefines紧跟重定义特征的名称。

Components包中,在系统中的2个电机模块的使用被描述。两个电机模块共享许多特征;例如,它们都有一些共同的数值属性,诸如,weightpowertorque。在图7.49中,Motor Module的一个通用概念被介绍来捕捉两个电机模块的通用特征。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第48张图片

7.49 显示一个分类层次在一个模块定义图上

此外对于数值属性,Motor Module定义一个control input的通用概念使用一个代理端口。Brushless DC Motor ModuleStepper Motor Module被表示作为这个通用概念的子类带有它们自己的特定特征,诸如,Stepper Motor Module的step sizeposition输出端口。此外, 来自Motor Module的通用的属性已经被重定义在子类中为了放置绑定在它们的值上,是适合的到电机的类型。数值属性被描述通过一个«interval»概率分布表示数值属性的范围可以有在它们给定的子类中。

      1. 分类和行为特征

正如模块的结构特征和接口模块可以被管理在分类层次中,模块的行为特征可以被处理以一种相似的方式。行为特征的分类和相应的行为描述的一个总结被包含在这里;然而,一个更完整的讨论超出了本书范围,可以在许多面向对象设计的书籍中找到。

通用服务被描述作为操作或接收在在分类层次中的一个抽象层次,和更特定的服务被描述在更特定的模块中。正如使用结构特征,超类的行为特征可以被重定义在子类中来修改它们的签名。接口也可被分类,它们的行为特征中指定通过与块相同的方式。

一个模块对一个行为特征请求的响应也可以被指定。尽管一个行为特征被定义在一个通用的模块中,方法对应该特征在一个模块的给定规范中可以是不同的(参考第7.5.3节获取关于方法的讨论)。在软件工程中,这种现象被称为多态性—来自希腊语“many forms”—因为一个给定行为特征的的一个请求的响应可以是不同的依赖于实际处理请求的方法。

在面向对象的编程语言中,多态性被处理通过一个调度机制。如果一个行为发送一个请求到一个目标对象,它了解这个目标对象的类型(例,模块)和它可以支持请求。然而,由于专业化, 目标对象可以是有效的请求,请求者知道类型的子类,子类可以实现,请求不同的响应。分发机制可以“查看屏幕后面的”并确保调用合适的类型方法来处理请求。

      1. 建模重叠分类使用范化集

有时子类可以包含来自多个超类的特征。这被称为多重范化(multiple generalization),或有时多重继承(multiple inheritance)。给定的类的子类也可以被组织进分组中,基于它们如何可以被使用对应详细的分类。例如,一个超类Person可以有子类,表示一个Employee或一个Manager在他们的工作中,和子类可以表示一个Woman或一个Man的特征作为他们的性别。这种情形可以被建模使用范化集(Generalization sets),正如显示在图7.50。范化集有两个属性可以被用来描述他们员之间的覆盖和重叠。

覆盖(coverage)属性指定否所有超类的实例是范化集的一个成员或另外一个成员实例。coverage属性的两个值是complete(完整)和incomplete(不完整)。重叠(overlap)属性指定是否一个超类的实例可以仅是最多范化集中的一个子类。Overlap属性的两个值是disjoint(未连接)和overlapping(重叠)。

范化集可以被显示在一个模块定义图通过一条虚线相交在一组范化路径集。范化集的名称和值对应overlapcoverage属性,显示在括号中,被显示在线的附近。可选的是,如果范化符号的树结构形式被使用,一个范化集可以被表示通过一可树带有范化集名称和属性附近浮动在三角标志在它的根上。图7.50显示虚线的变化和图7.53树的变化。

图7.50显示先前描述的范化集的例子。Person超类使用两个范化集中的四个子类。 Gender有两个成员 WomanMan,都有disjointcompletely覆盖,由于Person的所有实例必须是WomanMan的一个实例,但不是两个。Job有两个成员 EmployeeManager,可以是重叠的和不完整的涵盖,由于person 的实例可以是EmployeeManager的实例或两个都是。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第49张图片

7.50 显示一个范化集在一个模块定义图

      1. 使用分类在建模变体中

产品变体的描述和组织是一个庞大而复杂的课题,需要涉及许多不同学科的解决方案,其中建模只是一个。尽管如此,SysML包含概念像分类和重定义,可以用来捕捉一些细节和需要模型变体关系概念。例如,分类可以被用来建模一个模块定义的不同变体,其表示可选的设计被评估在一个权衡分析中。这可以被获得通过描述一个模块的一些特定变体作为原始模块的子类,分组在范化集。注:超类的多个子类可以被重新组合使用多重范化在分类的后续层次中,但这些必须服从指定它们超类的重叠(overlap)和覆盖(coverage)。

图7.51显示Camera的两个相互排斥的特征:它的预定位置和它与控制器连接的方式。在这种情况下,每个特征有两个变体。有两个预定的位置,说明通过范化集Location,服务通过一个Internal Camera或一个External Camera。也有两个控制器连接的预定模型,说明通过Connection范化集,服务通过Wired CameraWireless Camera模块初始地显示在图7.48。三个详细的变体: Wired Internal Camera Wireless Internal CameraWired External Camera被生成通过多重范化来自这些四个。为了减少混乱模块的特征被隐藏。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第50张图片

7.51 建模变体配置在一个模块定义图上

      1. 使用属性特定类型来建模语境特定模块的特征

属性特定类型(property-specific type)被用来设计一个模块的属性或数值类型被详细指定在一个内部模块图中的局部使用。这可以发生,例如,当一个组成部分的一个或多个属性有不同的分布而不是它们的原始类型。属性特定类型隐含地生成模块的一个子类,该类型的部分部分属性添加了独特的特性。一个属性特定类型的存在被表示通过包含一个属性的类型名称在括号中。舱段可以被用来描绘类型的唯一特征对应每个组成部分特定的属性,诸如,下面的例子中的数值属性对应不同的电机的重量。注:如果一个舱段在一个属性标志上被使用来显示它的类型的特征,舱段标签前缀通过一个分号。

图7.52显示监控摄像机的一个特定模型的小片段SC Model 1 A,专业相机。在SC Model 1 A中,通用的Stepper Motor Module使用在摄像机的Mount Assembly(ma)已经被替换通过一个特定的电机模块包含Maxon EC10。为了进行这个替换,而不是专门生成一个模块表示这个Mount Assembly的变体,一个属性特定类型的被使用。Maxon EC10明显的属性被显示在组成部分的:values舱段中。

      1. 建模模块配置作为特定模块

模块配置(block configuration)描述一个特定的结构和指定属性值意图来表示一个模块的一个唯一实例在一些已知的语境中。例如,一个模块配置可以被用来标识一架特定的飞机在一个航空公司的飞行舰队中,通过它的呼叫标志提供那架飞机的其它特征。在那个例子中, 呼叫标志的目的是一致地识别同一架飞机,即使其他属性的值可能会随着时间的推移而改变。模块配置也可以用来确定在一个给定的时间点上的一些实体的状态。扩展飞机的例子,它可能是重要的空中交通管制模拟来描述一个飞机的位置、速度、燃料负荷,等在某些关键的分析阶段的快照。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第51张图片

7.52 属性特定类型

重要的是要注意,因为一个块配置只能描述一个有限的特征集和值, 在物理域中可能有许多与该描述相匹配的实际情况。由建模人员确保上下文能够理解,任何模棱两可不能组成模型的值。典型的模块包含一个数值属性,它的值可以被用来在语境中标识一个单个实例。例如,一辆车的车牌可以是唯一的在一个给定的国家但不是整个所有国家。

        1. 建模一个配置在一个模块定义图上

一个模块配置被构建使用先前描述的范化关系。配置变成模块的一个子类,对应它是一个配置。没有特定的符号对应设计一个模块表示一个唯一的配置。然而,一个模块常常被定义使用一个属性,其表示一个唯一的标识符,诸如,汽车识别号码,可以被使用当建模配置时。通常它是有用的来引入一个模块配置的范化集来区分它们从那个模块的其它规范。

SysML属性概念的一个有用的特性是表示状态的能力,属性可以是一个或多个其它属性的子集(subset),或在它的父类中或在一个父的超类中。子集意味着实例集或子集属性的值也在实例集或一个子集属性的值中。是否一个重定义属性替换重定义属性在子类中,一个子集属性 坐在它的子集属性的旁边,但仅持有它的值和实例的一个子集。

子设被显示在括号中,在子集名称字符串之后,属性使用关键字subsets紧随通过子集属性的名称。

公司的受欢迎的4-Camera Wired Surveillance System两种配置被显示在图7.53。location的值在每种情形给定安装的地址。意图在ACME业务的语境内部, location的特定值是充分的到唯一标识一个他们监测系统的实例。公司也提供一个可选的服务包和service level提供提供服务的详细层级。Business Gold包括在办公时间外的一个安全代理每小时访问。Household 24/7确保一个响应到任何警报在30分钟以内,24小时和一周7天。

4-Camera Wired Surveillance System指定Surveillance System并重定义它的cameras的组成部分属性使用一个新的属性,也称为cameras。新的属性有一个新的类型Wired Camera,其是一个原始类型Camera子类。它也有一个新的多重性4,其限制实例的上限数目持有通过Camera到4从原始的上限“*,”并也提升下限到4。

为了描述特定配置,AJM Enterprises systemJones Household system指定4-Camera Surveillance System和重定义或它的一些属性的子集。2个数值属性locationservice level,被重定义为了提供特定的值对应它们。如果一个属性有一个大于1的上限,但它是重要的来表示每个属性实例的特征,随后一个新的子集属性可以被生成来明确的表示实例集的一个持有通过属性为了定义它的特定的特征。在图7.53中,cameras组成部分属性是子集通过组成部分属性,其表示个体的摄像头在配置中。在AJM Enterprises中,新的组成部分被称为front, reception, store roomcomputer room,基于它们在公司大楼里的位置。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第52张图片

7.53 建模一个模块的不同配置在一个模块定义图上

4-Camera Surveillance System的配置集被分组通过一个范化集称为ConfigurationConfiguration是不重叠的,由于每个子类试图来描述一个独立的实例,并是不完整的由于因为可能有父类的其他实例,不仅仅是这些。

        1. 建模配置细节在一个内部模块图

当一个模块已经被使用来描述一个配置,内部模块图对应该模块可以被使用来捕捉特定的内部结构(例,精确的多重性和连接)和配置属性的唯一的值。特别是,这应该包含一个属性的值,其唯一标识配置中的实体(例,名称、序列号、呼叫标志)。一个唯一的设计配置可以被生成通过定义一个标识的属性对应封闭的模块中的每个组成部分。

给定,AJM Enterprises system4-Camera Surveillance System的一个子类,它有4个摄像头。图7.53标识了许多有线摄像头变种,包含Wired Internal CameraWired External Camera,来满足安装的需求。图7.54显示它们如何被配置包含明显的 数值属性的初始值。每个摄像头的camera id属性为系统中的摄像头提供一个唯一的标识符,和4个摄像头有它们自己的值,也标识在摄像头的外壳上。配置也描述每个摄像头的positionfield of regard (pan 和 tilt)来促进覆盖率分析作为一个安全性视点的部分。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第53张图片

7.54 显示一个模块的配置在一个内部模块图上

    1. 建模块配置使用实例

正如描述在第7.7.6节,有可能来建模模块块的一个配置通过指定它并添加配置特定信息到特定的模块,这特别是有用的,如果配置添加结构或数据约束没有表示在模块中。然而, 如果一个配置简单的包含指数型的一组值集、一个实例规范(instance specification)可以被使用。

实例规范被显示在一个模块定义图上作为一个矩形标志包含一个下划线字符串名称使用下面的格式:

instance name : block name.

标志包含一个单一舱段列举任何特定属性的值,其重写任何建立的初始值。实例规范可以内嵌,来镜像模块的组成。当一个实例规范标志是内嵌的,它的名称字符串也可以显示组成部分的名称(或引用) 此实例规范对应于使用以下符号:

instance name/ property name: block name

图7.55描述AJM Enterprises System的两个实例显示在两种不同情况下的操作周期,工作日和非工作日。它已决定,以削减成本,内部摄像机将被关闭,在工作日的工作时间内。外部摄像头(front)的operating cycle的值在Work Days实例规范中被设置为0:00–23:59,和内部摄像头的值是17:00–8:00。在Non-Work Days实例规范中,所有摄像头的值都被设置为0:00–23:59来维护完整的覆盖性。

实例规范可以被连接通过连接,其表示模块之间相关的实例。一个连接被显示在一个模块定义图作为一条线处于两个实例规范之间,它的终点和修饰是相同的同那些是它一个实例相关的。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第54张图片

7.55 模块配置与实例的描述

图7.56显示一个ACME Residential Surveillance Network,初始的介绍在图7.13。它显示Surveillance System的两个实例 Smith ResidenceO’Brien Residence,两个都表示residenc属性和连接到Command Centre的一个实例称为CC,表示residential surveillance center的组成部分,通过ADSL Connection的实例关联。

    1. 丢弃的特征

SysML1.3版已经丢弃了模块和端口的许多在1.2版中的特征。丢弃意味着它们一直是语言的正式部分,但它们将试图被删除在未来的修订版本中。SysML v1.3中的模块和端口包含SysML v1.2的功能。本节描述弃用的特征对应完整性和由于当前的OCSMP考试基于SysML v1.2。下面的特征被涵盖在这里:

  • 流端口(flow port)概念,它的功能被归入代理端口。原子流端口的符号已被保留,但有一个不同的解释。
  • 流规范(flow specification)的概念被使用来定义非组合流端口,但现在已经被包含在模块接口的概念中。

符号对应这些特征被显示在附录,表A.7。

SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模_第55张图片

7.56 描述实例之间的连接

      1. 流端口

流端口(flow port)被使用来描述一个交互点 (或连接点)对应项流进或流出一个模块。它被使用来指定什么输入项可以被通过模块接收和什么输出项可以通过模块被发送。它指定这个通过它的类型。像一个模块的其它结构特征,一个流端口可以有一个多重性,其说明端口的多少实例被表示在它拥有的模块的实例中。当一个交互点有一个复杂的接口使用超过一个流动项,端口被建模作为个非原子流端口(nonatomic flow port)。在这种情况下一个流的规范必须键入端口。一个端口仅指定一个单一的输入或输出流的类型可以被建模作为一个原子流端口(atomic flow port),并可以被键入一个信号、数值类型或模块。然而,这应该被看作是一个用于输入端口的一个流的规范与一个单一的流属性的速记。

        1. 非原子流端口

如果一个交互点有一个复杂的接口有超过一个以上的流动项,端口被建模作为一个端口被建模作为一个非原子流端口,并通过流的规范类型。流规范(flow specification)被定义在一个模块定义图上。流的规范包含流属性,对应于输入和/或输出流的个体规范。每个流属性(flow property)有一个类型和一个方向(in,out,或inout)。流的类型属性可以是一个模块、数值类型、或信号依赖于什么可以流动的规范。

当两个模块交互通过连接器,它们可以交换类似的项,但在相反的方向中。而不是在交互模块上非原子流端口生成两个独立的流的规范,非原子流端口可以是共轭的来重用一个单一的流的规范对应两个端口。一个端口被设置为另外一个的共轭, 这表明,在流规范中的所有流属性的方向相对于这个端口是相反的。

流的规范被显示作为一个盒子标志带有关键字«flowSpecification»,在名称舱段的名称上面。流的规范的流属性被显示在一个特定的舱段标签flow properties,每个流属性显示采用格式:

direction property name: item type[multiplicity]

一个非原子流端口被表示通过2个圆括号面对彼此(<>),绘制在端口标志内部。流端口可以被列举在一个特定的舱段标签为flow ports在它们拥有的模块中。一个非原子流端口被显示使用格式:

port name: flow specification name[multiplicity]

一个共轭流端口被表示通过放置一个颚化符号(‘~’)在流端口类型的前面。

        1. 原子流端口

一个端口仅指定输入或输出流的一个单一类型可以被建模作为一个原子流端口。一个原子流端口键入项,其可以流动进和/或流出模块,可以是一个模块、数值类型、或信号。例子包含一个模块(例,水、一辆汽车),一个数值类型(例,电流使用单位制安培)或一个信号(例,一个报警消息)。一个原子流端口指定它的流方向(in,out,或inout)。

原子流端口被显示作为小的正方形在一个模块的边界上使用一个箭头在标志内部表示端口的方向。一个两个头的箭头表示方向inout。名称、类型、和端口的多重性被显示在一个字符串在端口附近浮动采用下面的格式:

port name: item type[multiplicity]

可选的是,端口字符串可以被包含在它们占有的模块的flow ports舱段,使用语法:

direction port name: item type[multiplicity]

        1. 连接流端口在一个内部模块图上

像其它端口,在一个内部模块图中流端口被显示在组成部分和引用属性的边界上,并可以被连接使用连接器。原子流端口的兼容性规则与流属性是相同的,正如描述在第7.4.3节。原子流端口可以被连接到非原子流端口,只要这种类型的非原子流端口包含一个兼容的流动属性的流规范。

    1. 小结

SysML结构主要被表示在模块定义图和内部模块图上。下面的是结构建模的相关的关键概念。

  • 在SysML中,模块是基础单元结构,并被表示在模块定义图和内部模块图的框架上。模块自身并被定义通过它们的特征。一个模块提供一组唯一标识的实例的描述,其都有特征定义通过模块。一个模块定义图被使用来定义一个模块, 它的特征,和它的关系到其它模块以及其它分类的类型,如,接口模块、接口、数值类型和信号。实例规范和连接在它们之间也可被显示在模块定义图上。一个内部模块图被使用来描述一个模块的内部结构。
  • 模块有许多结构和行为特征,组成它的定义。属性描述一个模块的结构方面根据它关联到其它模块和它的数量特征。端口描述一个模块的接口作为一组存取点在它的边界上。行为特征生命服务的集,其刻画模块响应到激励。
  • 组成部分属性被使用来描述模块层次的层次分解(有时称为整体-部分关系)。使用这个术语,模块或其它分类,其占有属性是整体的,和属性是组成部分。任何给定的模块的实例,类型一个组成部分属性可以仅存在作为整体的在任何时刻的一个实例。组合关联被使用来表示整体和部分之间的关系;特别是,是否模块的组成部分类型一直存在在整体的一个实例的类型中或可以存在独立于整体。
  • 一个引用属性允许模块来引用到其它模块,但不隐含任何相关的实例之间的排斥关系。引用属性支持逻辑层次的生成和相关的内部模块图,其可以增强一个组合层次。
  • 数值属性表示一个模块的数量特征,诸如,它的物理和性能特性。数值属性键入数值类型。一个数值类型提供一种一些数量描述是可重用的和可以包含单位制和数量类型,其刻画数量。一个数值属性可以有一个默认值和能扩展来捕捉概率分布。
  • SysML有两种不同类型的端口:完整端口和代理端口。完整端口键入一个模块和类似于一个组成部分,除了它被显示图形化的在它占有模块的边界上,并不像组成部分可以有外部的连接,即是当模块被封装时。代理端口键入接口模块其不能有内部结构或行为和服务作为一个传递通过对应的输入和输出不需要修改它们。代理端口类似于引用属性,在那个中它们不存在在一个模块的组成部分树中,但服务作为存取点到内部组成部分的特征,或到它们占有的模块,当它们被参考作为行为端口。端口的类型也支持端口的内嵌。
  • 模块有两种类型的特征,操作和接收。操作描述同步交互,当请求者等待请求将被处理;接收描述一个同步行为当请求者不能继续不需要等待一个响应。行为特征可以被关联到方法,其是行为,其处理请求对应的特征。请求对应行为特征也可以被直接处理通过主要的,或分类、行为、典型的一个活动或状态机,正如描述在第8章和第10章中。
  • 分类和生成集的概念描述如何生成模块和其它分类的分类层次,诸如,数值类型和流规范。分类指定其它分类为了重用它们的特征和添加新的它们占有的生成集分组的一个给定超类的子类的特征根据它们如何划分它们超类的实例。子类可以重叠,其意味着一个给定的实例可以被描述通过超过一个子类。子类可以是超类的完整的覆盖,其意味着所有实例被描述通过子类在集中的一个,或不是。
  • 分类的特征可以被关联以多种方式在一个分类层次内部,所有分类的特征可以被重定义通过它们的子类,为了限制它们特征的一些,诸如,多重性或默认值。结构特征可以被定义来有一些其他特征在相同的分类或超类中的子集的值。这有一个特定的使用在标识一个集合的特定成员为了定义特征,被指定到它。这个变种可以或被执行使用一个新的分类,或在一个局部的语境中使用一个属性特定类型。
  • 模块可以被用来描述配置,在这种情况下,模块的特征被定义是充分详细的来标识模块的一个特定实例在现实世界的系统中。可选的是,如果配置不请求详细的约束在结构或模块的值上的应用,一个实例规范可以被使用。
  • SysML 1.3丢弃了流端口提供代理端口,尽管它仍然在语言中。代理端口支持流端口的概念和更多。一个流端口指定,什么可以流进或流出一个模块。原子流端口定义一个单一的流动项,并可以是数值类型、模块或信号。非原子流端口定义许多流动项。它们键入流规范,标识每个流动项为一个独立的流属性。
    1. 问题
  1. 模块定义图的图的类型是什么,和可以表示它的模型元素?
  2. 内部模块图的图的类型是什么,和可以表示它的模型元素?
  3. 模块如何被表示在一个模块定义图?
  4. 命名模块属性的三个分类。
  5. 那种类型的属性属性被使用来描述模块之间的组合关联?
  6. 什么是通常使用的术语对应属性带有一个下限多重性绑定为0?
  7. 什么是多重性默认的解释对应相关的两个终点,当它没被显示在图上?
  8. 绘制一个模块定义图,使用组合关联,对应模块Boat、CarEngine,显示一个Car必须有一个Engine,和一个Boat可以有一个或两个Engines
  9. 给定两种情形在其中使用的规则名称对应一个组合关联的组成部分终点,应该被考虑。
  10. 组成部分如何被显示在一个内部模块图?
  11. 一个连接器的缺乏在两个组成部分见隐含了什么?
  12. 绘制一个内部模块图对应“Boat”来自问题8,但带有一个附加类型为Propeller的组成部分 p,添加一个连接器在Enginepart之间(使用它的功能名称来自问题8,如果您提供一个)和p,牢记一个Propeller可以被驱动通过仅一个Engine
  13. 两种图形化机制是什么,其可以被用来表示属性内嵌超过一个层级深入在一个内部模块图?
  14. 组成部分和引用之间的主要区别是什么?
  15. 在一个模块定义图在标志对应组合关联和引用相关的表示的不同是什么?
  16. 什么是一个相关模块?
  17. 模块的数量特征如何被描述?
  18. 三种数值类型的分类是什么?
  19. 除了一个有效值集的定义,什么是数值类型可以描述的关于他们的值?
  20. 一个模块Boat被描述通过它的lengthwidthFeet和一个weight使用单位制Tons,绘制一个模块定义图描述Boat使用合适的数值类型的定义,包含单位制和数量类型.
  21. 什么是衍生的属性?
  22. 概率分布如何,说明一个内部分布,对应一个属性表示在值舱段在一个模块定义图上?
  23. 那个SysML概念可以被用来表示项(即,流动的事物)?
  24. 什么是一个流动项定义的?
  25. 代理端口如何被指定?
  26. 一个模块Boat使用fuelcold water作为输入并生成exhaust gaseswarm water作为输出。显示Boat在一个模块定义图使用输入和输出作为代理端口,带有伴随的定义。演示端口图标和和“代理端口”舱段的显示。
  27. 代理和完整端口之间的区别是什么?
  28. 什么是规则来评估一个流动项在一个连接器的两个端口之间的兼容性?
  29. 什么是一个行为端口在一个模块使用的目的?
  30. 命名所有五种类型的行为规范支持通过SysML。
  31. 什么是模块的行为特征使用的目的?
  32. 什么是一个方法?
  33. 什么是一个端口特定的请求接口接口 ?
  34. 什么是一个端口特定的提供的接口?
  35. 描述球和球篮表示对应端口的接口。
  36. 命名四种类型的分类面对在在本章中。
  37. 命名一个重定义属性的三个方面,一个重定义属性可以变更。
  38. 一个生成关系如何表示在一个模块定义图上
  39. 当指定一个生成集,什么是coverage 属性用来定义的?
  40. 生成集如何被表示在一个模块定义图上
  41. 如果一个属性被定义将是另外一个的子集,什么是子设置属性的元素之间的关系和子设置属性元素?
  42. 命名两种方式在SysML中指定一个模块配置。
      1. 讨论主题

讨论模块结构的增强个封装通过使用封装使用的好处。

你可能感兴趣的:(SysML实践指南第二版(中文翻译:刘亚龙)第七章 使用模块图(BDD)建模)