一、引言

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. QT移植

    QT下载地址:http://download.qt.io/archive/qt/1.编译tslib(touch screen lib) 准备工作:确保以下工具安装完成 sudo apt-get ins ...

  2. 【angularjs】【学习心得】ng-class总结

    原文:http://www.imooc.com/wenda/detail/236998 今天来说一点angularjs中看起来很简单但是实践起来又有不少问题的ng-class吧 ----------- ...

  3. 微信小程序来了,小程序都能做些什么

    2017年的微信大动作就是微信小程序了,到底小程序都能做些什么?这是很多人关注的热点,小程序开发对企业又有什么帮助呢?下面让厦门微信小程序开发公司来为你就分析下.       微信小程序与APP的关系 ...

  4. 老司机教你下载tumblr上视频和图片的正确姿势

    本文面向初学者. 很多同学问我:“我非常想学Python编程,但是找不到兴趣点”. 还有的同学呢,找到了很好的兴趣点,但是无从下手,“玄魂老师,我想下载tumblr上的视频, 怎么下载,Python能 ...

  5. 搭建spring工程配置数据源连接池

    Spring作为一个优秀的开源框架,越来越为大家所熟知,前段时间用搭了个spring工程来管理数据库连接池,没有借助Eclipse纯手工搭建,网上此类文章不多,这里给大家分享一下,也作为一个手记. 工 ...

  6. java算法 蓝桥杯 乘法运算

    问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...

  7. Microsoft Office 2016 简体中文 Vol 版镜像下载(Pro Plus、Visio、Project 下载)

    在使用上,零售版和批量授权版并没有区别,只是授权方式方面的区别,相对而言,VOL 版的更容易激活一些,其他并没有什么区别了. 有需要的可以在下面下载:(以下均是 VL 版) 版本:Office 201 ...

  8. Flux --> Redux --> Redux React 入门

    本文的目的很简单,介绍Redux相关概念用法 及其在React项目中的基本使用 假设你会一些ES6.会一些React.有看过Redux相关的文章,这篇入门小文应该能帮助你理一下相关的知识 一般来说,推 ...

  9. linux脚本: 后台启动程序并重定向输出信息脚本

    后台启动程序并重定向输出信息脚本 新建文件mstart, 写入下面代码. #!/bin/bash $1 1>/etc/null 2>&1 & 说明 1>/etc/nu ...

  10. jQuery + CSS3实现环形进度条

    实现原理 原理非常的简单,在这个方案中,最主要使用了CSS3的transform中的rotate和CSS3的clip两个属性.用他们来实现半圆和旋转效果. 半环的实现 先来看其结构. HTML < ...