一、引言

SysML中的模块定义图,英文为 “Block Definition Diagram”,简称BDD,是系统建模过程中最为常见的图之一,BDD是一种结构图,它主要对系统的结构组成以及组成元素间的关系进行描述。SysML中的图类似于UML中的类图,在学习的过程中可以以类比的方式进行学习。

二、模块定义图介绍

如下图所示,BDD中可以包含 包、模型、模型库、视图、模块和约束模块。其中最为重要和常见的是模块和约束模块。包、模型、模型库、视图在后续系列文章中论述,我们仅关注BDD中常用的模块和约束模块,本文重点介绍模块。

约束模块是SysML中的一种定义元素,常见情况下在约束模块中定义约束表达式。约束模块一般用于搭配参数图构建系统的数学模型。

1. 模块的表达方式

模块时SysML中的基本单元,其对应于系统中的任意实体,我们可以使用模块对系统中的实体进行建模。通过带有<<block>>标识的矩形框表示,其后带有模块的名称(用户自定义),另外,还可以通过可选的其他分隔框,用来标识模块的其他组成。例如下图所示,该模块定义为 包含 值属性 和 操作属性分隔框。

BDD属性包含行为属性和结构属性。顾名思义,结构属性表达了实体的结构组成该部分,而行为属性则表达了实体所具有的行为特征。

1.1 结构特性

如下图所示,结构特性包含值属性、组成属性、引用属性、约束属性、端口共 5 种类型,其在模块中分隔框的头部表示参考下图中的英文表示。已值属性为例,其分隔框头部标识为 values,其他的属性类似。

  值属性:SysML规定的命名规则为 <value name>:<type>[<multiplicity>] = <default value>。值属性的类型(type)是在SysML图中某处定义的“value type”(值类型也是一种SysML元素,用户可以灵活定义值类型).

  约束属性:SysML规定的命名规则为 <constraint name>:<type> 。约束名称为用户自定义,约束类型是用户在SysML图的某库定义的 约束模块 的名称。一般情况下,约束模块用于定义一种数学关系约束,约束属性是对约束模块的引用。

  引用属性:SysML规定的命名规则为  <reference name>:<type>[<multipicity>]。type是用户在SysML的某库定义的模块或者执行者,大部分情况下是模块,类似于UML 中类与类间的引用。SysML中引用表示的是一种 “需要” 语义,引用属性标示了引用模块与被引用模块之间存在关联,可能是为了数据交换、实践传递等,总之,二者之间存在联系。

  组成部分属性:  SysML规定的命名规则为 <part name> : <type> [<multiplicity>]。type是用户在SysML的某库定义的模块名称。multiplicity表示了实例的数量。组成属性标示的是一种 “所属” 关系,模块是由组成部分属性所映射的模块组成。这种 “所属”关系所表述的意义不仅仅局限于物理层面的“所属”,如发动机是汽车的组成部分。同样可以表述逻辑的所属,例如逻辑上的软件元素间的所属关系。另外,所属还有一层含义,SysML明确声明,组成部分属性一次只能属于一个复杂结构,但可以移除。

  端口: 端口表示了一种结构对外提供的交互点,外部可以通过该交互点与模块进行交互-数据或事件等等。端口与软件的接口概念不同,其含义更加广泛。端口可以代表任意类型的交互点,例如物理的连接点,软件层面的消息队列,公司间的交互点如网站、邮箱等等。对端口的理解不要局限于软件接口,要从更加抽象的层次去理解和定义。大家只要记住其本质:端口是某一结构对外部结构提供的交互点,是结构间进行数据或事件、功能交换点的一种方式和抽象。另外,从端口的本质我们可以看出,它代表了一种“封装”的思想,这是面向对象的最常见并且最为关键的特性之一。封装有助于隐藏实现的细节,降低系统认知的复杂性以及系统间的耦合度。SysML V1.2和 V1.3的端口类型略有不同,在后续系列文章中再进行详细说明。

1.2 行为特性

  行为属性是对系统或结构的行为的表达,在SysML中包括 操作(operations )和 接收(receptions)。操作表示一种调用后执行的行为,也就说operations是基于调用事件触发的。一般情况下,operations代表一种同步行为,但SysML并没有对其做严格限制,设计者可以把任何行为定义为操作。

  操作:  通过“operations”进行标识,其格式为:<operation name>  (<parameter list>)  : <return type>[<multiplicity>]。操作是一种调用事件触发的行为,可以具有返回值和输入及输出参数。SysML中对此不做同步和异步行为的区分,都可以通过 “操作” 进行表述。

   接收:  通过“receptions”进行标识,其格式为:<<signal>> <reception name>  (<parameter list>) 。操作是一种信号事件触发的行为,且,其总是代表异步行为,无返回值,参数只有输入,没有输出。注意标识中的<<signal>>,这是必须的标识。另外,接收名称需要与模型某处定义的<<signal>>模型元素的名称一致。

三、模块间的关系

  类似于UML的类图间的关系,SysML模块间也存在关联、泛化和依赖关系,其中关联又可以分为 引用关联和组合关联。

1. 引用关联

    引用关联表示双方存在一种连接,双方可以相互访问。

SysML中模块间的引用关联通过实线标识,若实线无箭头,则代表双向访问,若有箭头,则表示单向的访问。举例如下图所示,模块A和B存在关联关系,链接名称为“Link”,A中有B的引用属性bList,多样性为 1 -  5个。模块B中有模块A的引用属性a,多样性为 1 个。

2. 组合关联

    组合关联表达的是一种构成关系,组合段的模块实例由组成部分端的实例组合而成。

SysML中组合关联的标识法是带有实心菱形的实线。没有箭头表示双向访问,有箭头表示单向访问。菱形端是组合端,另一端是组成部分端。举例如下图所示,模块A是模块的结构组成部分。A和B是双向引用。在B中有模块A的引用属性a,多样性为 1 个。在模块A中有关于模块B的引用b,多样性为 0 - 1 个。由于B是组成端,A是组成部分端,因此,在A中最多只能有 1 个B引用实例。

3. 泛化

    泛化表达的是一种继承关系,子类型继承超类型的特性,并对超类型特性进行扩展或重定义。泛化是可传递的。从广义上讲,泛化对应于面向对象思想中的继承,泛化有利于设计者面向抽象进行设计。设计者可以基于继承方式扩展出新的子类型,利用依赖倒置的原则实现便捷的扩展,因此这种设计方式有利于提高系统的可扩展性。

SysML中泛化关系的标识法为一条带有空心三角箭头的实线。超类型位于箭头段,子类型位于非箭头段。举例如下图所示,模块A继承自模块B.

4. 依赖

    依赖表述的是两个模块间一方依赖于另一方,当另一方改变时,则依赖房可能也需要改变。这也是模型间跟踪性的体现。

SysML中依赖关系通过带有箭头的虚线标识。箭头端是被依赖着,非箭头端是依赖者。同时,SysML中对依赖关系进行了泛化,定义了几种特定类型的依赖关系,例如需求图中经常出现的跟踪、满足、验证等多种关系都是依赖的特定类型。如下图所示,模块A依赖于模块B。

四、总结

  模块定义图描述了系统的结构化信息,包括系统的结构类型及关系、结构提供以及需要的服务、结构所遵循的约束、系统中的值类型。

  模块间的泛化关系提现了面向抽象设计的思想,方便系统的扩展。

  模块的结构特性“端口”体现了封装的思想,降低系统间的耦合。

  约束模块及约束属性描述了模块结构的约束关系,一般和参数图搭配使用,用于构建系统的数学模型。

BDD描述了结构及结构件的关系,但未给出结构间联系的内部结构,这些有内部模块图IBD补充。

  BDD涉及了约束属性和约束模块,但精确的系统数学模型搭建还需要参数图的配合。

微信公众号 “SystemEngineeringLab”

【SysML】模块定义图(BDD, Block Definition Diagram)的更多相关文章

  1. 公共模块定义/草案(Common Module Definition / draft - CMD草案)

    This specification addresses how modules should be written in order to be interoperable in browser-b ...

  2. CMD规范(通用模块定义规范)(翻译)

    最近在使用sea.js.大家知道sea.js遵循CMD规范.该规范的英文说明很简洁,我试着翻译了一下,旨在交流. Common Module Definition 通用模块定义规范 This spec ...

  3. Sea.js学习3——Sea.js的CMD 模块定义规范

    在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...

  4. CMD 模块定义规范

    在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...

  5. CMD模块定义规范

    CMD 模块定义规范 在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规 ...

  6. CMD (sea.js)模块定义规范

    转自http://www.cnblogs.com/hongchenok/p/3685677.html   CMD 模块定义规范 在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(C ...

  7. CMD 模块定义规范【转】

    在 Sea.js 中,所有 JavaScript 模块都遵循 CMD(Common Module Definition) 模块定义规范.该规范明确了模块的基本书写格式和基本交互规则. 在 CMD 规范 ...

  8. AMD模块定义规范

    AMD 即Asynchronous Module Definition,中文名是“异步模块定义”的意思.它是一个在浏览器端模块化开发的规范,服务器端的规范是CommonJS.   模块将被异步加载,模 ...

  9. 详解模块定义(.def)文件

    一个完整的Windows应用程序(C++程序)通常由五种类型的文件组成:源程序文件,头文件,资源描述文件,项目文件,模块定义文件.本文主要讲解模块定义文件. 模块定义 (.def)文件为链接器提供有关 ...

随机推荐

  1. Hibernate懒加载的三种解决方案

    Hibernate懒加载的两种解决方案: 1.Hibernate.initialize(代理对象) 2.在*.hbm.xml映射文件中添加lazy="false"属性 3.使用op ...

  2. 使用 StateServer 保存 Session 解决 Session过期,登陆过期问题。

    使用 StateServer 保存 Session 正常操作情况下Session会无故丢失.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定成60分钟,不会这 ...

  3. win7配置自己的IIS服务器亲自做的图文很详细

    跟人网站爱好初学者必看的win7系统配置自己的IIS,可以在你自己的电脑上配置网站服务器发不到网上,下面就跟着我的步骤一起做吧100%成功. 步骤/方法     点击开始-------控制面板这个就是 ...

  4. jQ小图标上下滑动特效

    嗯,又到了,夜静饥寒的时候,手指颤抖,回望去,屋内满是寂静,寥寥绰影,咳咳咳,想我程序员之路还没到终点...就...咳咳咳 好了日常神经结束,还要涂我的唇膏.还剩下,最后一章,js动画(四),明天放上 ...

  5. SoapUI:入门实例

    这一章中我们要掌握如下内容: 1)         构建项目: 2)         运行单个请求: 3)         构建测试用例: 4)         接口之间传递参数,组织测试步骤: 5) ...

  6. 【鸡年大吉】,不知道写点啥,放个demo(小球碰撞)吧,有兴趣的看看

    最初的想法是仿写win7的泡泡屏保效果,但是对于小球的斜碰问题一直没搞明白(如果你会这个,欢迎留言或者做个demo),所以只是简单处理了碰撞后的速度,有时候会看起来很搞笑~~~funny guy 话不 ...

  7. Biztalk AS2开发经验总结

    一.    准备证书    4 1.    升级win2008 R2证书服务    4 2.    申请证书    6 二.    配置证书    13 1.    为AS2配置证书    13 2. ...

  8. c#中读取数据库bit布尔字段数据转换Int和bool时的错误

    数据库里bit这个布尔类型的字段,非常实用,但是在c#里读取时,许多人喜欢犯一些错误,导致运行报错. 实际中,有效的正确读取方法只有以下两种: int xxx= Convet.ToInt16(read ...

  9. 【12c】扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE

    [12c]扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE 在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的 ...

  10. 搭建Eclipse开发和调试环境(真机)

    由于工作原因,最近开始了Android开发.之前接触过一段时间Android,还是在2.x时代. 那个时候搭建开发环境还是挺麻烦的.又是Eclipse,又是ADT的,不同的版本还要安装对应开发包.现在 ...