如果把系统工程看做一座山,那么基于SysML或UML的各种图就是从不同角度去看这座山所形成的“画”。“横看成岭侧成峰,远近高低各不同”,每幅“画”都能展现出其不同角度的“美”,但又无法完全画出每一棵树、每一朵花。

今天我们来画一下山的脉络——模块定义图。文绉绉的东西放后面,直接从实例说起吧。

比如台式机由主机、显示器、鼠标、键盘、音响等组成,用SysML怎么表示呢?

首先我们需要把它们都当做一个模块(block),然后各模块和台式机之间都有一个组合关联(连线的表现形式为连线加黑色菱形块)的关系,其中一个台式机有一对音响,即应该将连线的音响端的多重性设为2,其余都为1则可不进行特殊设置。

如果想将音响进行左右划分,还能像下面这样画。

对于台式机内部的模块来说,都和主机有着联系,比如主机可以让音响发出指定声音、在显示器上显示出画面;鼠标可以控制主机在显示器上鼠标的位置;键盘可以向主机输入字符。这些都可以算是一种引用,如下图(为了看起来清晰,这里另起了一个图),含箭头的为单向引用,不含箭头的为双向引用。

P.s.:这种关系其实也可以在主机的内部块中通过各自的属性进行表示。

介绍完台式机的内部模块大致分布与联系,接下来继续深入细化介绍台式机的内容,但整个台式机的内容实在是太多了,要完完全全的展现出来实在是篇幅有限,在这里我们挑选主机来继续细化。

那么我们继续思考下,主机是由什么组成?

如果是自己组装主机,我们需要准备的有:机箱、主板、cpu、风扇、内存条、硬盘、电源等。画出的Sysml图如下,其中的若干1..*表示一个主机可能会包括多个内存条、风扇和硬盘。

上图呈现的是一个通用的主机组成,而各模块的下面可能又有很多种细分。比如CPU可以分为英特尔和锐龙两大类,各自下面又有多种型号。这是CPU的一种细分(或者说是继承),所以互相之间应该是一种泛化关系(空心三角箭头),可以画出下面这个图(图中只是简单的拎出了几个型号)。

通过以上,我们可以来总结一下。

1.从总体上,模块定义图的表现形式为一个矩形框,左上角有一个五边型区域,记录着图类型、元素类型、元素名、图名,这也是SysML图的规范样式。其中模块定义图的图类型为 bdd;元素类型和元素名为所属命名空间的元素,例如CPU泛化图所属的命名空间(即所属元素)为CPU,CPU的类型为Block,故其左上角显示为bdd[Block]CPU[CPU泛化] 。

2.从模型元素上看,模块定义图的基本模型元素是Block(模块),它所表现的是模块间的结构组成及关系,这和UML类图相类似。

既然模块是模块定义图中最重要的部分,下面我们系统的介绍下模块。

模块是描述系统或元素结构的模块化单元。模块的属性总体可以分为两大类:结构属性和行为属性。结构属性包括值属性(值类型)、组成属性、引用属性、约束属性、端口。行为属性包括操作、接收。它们表示系统的状态和系统可能表现出的行为,在模块定义图中模块的图例可以通过各隔间来展示。

▲图源OMG Sysml1.6

组成属性放置在parts隔间,命名规则为:[]。当两个模块之间为组合关联时,默认会生成一个组合属性,其type为被组成部分。

例如在主机组成的图中,我们将CPU和主机进行了组合关联,此时主机便自动生成了一个组成属性。再对该属性命名成CPU并设置其多重性为1,在图中的表现将是“CPU:CPU[1]”(该画图工具在连线存在时不会显示组成属性)。

引用属性放置在references隔间,命名规则为 :[]。当两个模块之间为引用关联时,默认会生成一个引用属性,其type为被引用部分。

例如在主机引用的图中,我们将键盘和主机进行了双向的引用连接,键盘和主机便都自动生成了一个引用属性。因为没有设置多重性,在图中的表现为“主机:主机”和“键盘:键盘”(该画图工具在连线存在时不会显示引用属性)。

值属性、端口、约束属性和两个行为属性这次还没有用到,会在模块定义图和活动图中再做详细介绍。

模块之间的关系主要有四种(如果把引用关联和组合关联合一起可以认为是两种)。

1.引用关联,表示的是模块的实例之间可以存在的一种连接,以达到某种目的彼此访问。表现形式为一条实线,一端有箭头表示单向访问,两端都没有箭头表示双向访问。比如例子中键盘和主机的引用关系。

2.组合关联,表示结构上的分解。组合端的模块实例由一些组成部分模块的实例组合而成。表现形式为一条实线,且组合端有实心的菱形,在组成部分端有箭头表示从组合端可以对组成部分进行单向访问,如果没有箭头则表示双向访问。比如例子中主机和台式机之间的组合关系。

3.泛化表示两种元素之间的继承关系,“抽象”一点的超类型,“具体”为子类型。表现形式为一条实线,在超类型的一端带有空心的三角箭头。比如CPU和英特尔CPU之间的泛化关系。

4.依赖的一端为客户端,依赖于模型中的另一种元素——提供者。表示当提供者元素发生改变时,客户端元素可能也需要改变。表现形式为带箭头的虚线,箭头方向从客户端指向提供者。

到这里,对象征山脉络的模块定义图应该都有初步认识了吧。期待下次模块内部图再见。

由我司研制的SysModeler,是可视化的系统建模工具,支持UML、SysML、AADL等语言,并可以进行仿真和文档生成。对标产品有国外IBM公司的Rhapsody, NoMagic公司的MagicDraw等。

对于SysML中定义的动态图,如状态图和顺序图等,SysModeler可以生成相关的C语言或者Java语言代码。通过模型可以产生高质量的代码,这种代码既可以作为系统模型验证的代码,也可以作为生产系统上的代码。这些代码可以动态运行,并以可视化的方式显示运行结果来方便调试模型,例如基于状态图的断点设置、在顺序图上捕捉不同对象之间的消息映射等等。通过模型级和代码级联合调试、验证,能够直观地尽早发现系统的设计错误或缺陷,从而较早地确定或降低项目风险。

初入SysML之模块定义图相关推荐

  1. 【SysML精粹】模块定义图

    2 模块定义图 常见的一种SysML图就是模块定义图.可以在BDD中显示不同类型的模型元素和关系,以说明系统结构的信息.还可以采用创建扩展系统结构的设计技术,那种实践会在利益相关者的需求发生变更时,降 ...

  2. 第三章 模块定义图:模块

    第三章 模块定义图 1. 模块 1.1 结构特性 1.1.1 约束属性 1.1.2 端口 1.2 行为特性 1.2.1 操作 1.2.2 接收   在BDD中出现的元素叫做定义元素.定义元素形成了其它 ...

  3. 初入Android~系统化学习必备(转自http://bbs.weand.com/read-htm-tid-6142.html)

    初入Android~系统化学习必备 什么是Android手机? 答:简单的说Android手机是运行在谷歌Android手机操作系统上的手机统称为Android手机,也可称为gphone手机. 目前A ...

  4. 初入前端,面对一个项目应注意哪些?

    前言: 对于初入职场的前端小白来说,一整个项目来了,顿时感觉压力山大,张皇失措,也总会感到手忙脚乱.其实不用怕,拆分步骤,把每个步骤做好,做细,一切都迎刃而解,犹如顺藤摸瓜般畅快淋漓. 目录: 概念的 ...

  5. java 多线程初入2

    java 多线程初入2 并行的两个定律 获得更好的性能. 一般我们会把串行的程序改成并行的 期望提高的程序执行效率 问题. 业务的需要. 两个定律分别为 Amdahl 和 Gustafson Amda ...

  6. Java学习—初入Java

    一.初入Java 文章目录 一.初入Java 2.JDK的目录介绍 3.PATH环境变量 4.ClassPath环境变量 5.编写第一个Java程序 6.Java的运行机制 7.Java包的定义与使用 ...

  7. MicroPython_ESP8266_IoT——第四回 初入联网(接入了贝壳物联)

    第四回 初入联网(接入了贝壳物联) 本来计划先把所有的硬件介绍完,再介绍如何介入贝壳物联的.但是那样就比较枯燥,还是先尝试接入贝壳物联,来增加ESP8266模块的可玩性. 需要了解[贝壳物联平台通信协 ...

  8. Hololens2初入——解决HL真机到PC图像传输的实时性问题

    文章目录 Hololens2初入--解决HL真机到PC图像传输的实时性问题 引言 正文 解决方案 具体方案 示例动图 原工程的一个小问题 Hololens2初入--解决HL真机到PC图像传输的实时性问 ...

  9. (计算机视觉笔记)1、初入计算机视觉

    计算机视觉笔记 1.初入计算机视觉 文章目录 一.人工智能 1.什么是人工智能 2.人工智能三大核心要素 3.算法概念 4.机器学习 5.深度学习 6.神经网络 二.计算机视觉 1.什么是计算机视觉 ...

最新文章

  1. Linux内核的Oops
  2. Python爬虫(三)_urllib2:get和post请求
  3. 使用keras的cifar10.load_data()总是会自动下载问题的解决
  4. 关于FI凭证的字段状态
  5. .sql文件如何执行_随手记 02 日志系统:一条SQL更新语句是如何执行的?
  6. 最新创意购物促销海报设计,广告人必看!
  7. 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败
  8. MIT6.830 lab5 B+ Tree Index 实验报告
  9. python非线性规划问题_python玄学建模(2):非线性规划
  10. java学习——线程
  11. paip.获取地理位置根据Ip
  12. VB6-Mini_20160110(VB6精简版下载)
  13. 雷赛控制卡系统集成源代码。整理归零,运行,暂停,停止。单轴调 试,位置移动,气缸操作,参数设置,IO监控,系统报警显示等等
  14. 抢红包案例分析以及代码实现
  15. 数据分析师出品:人力资源岗位年终总结可视化模板
  16. LeetCode 412 Fizz Buzz
  17. PM2部署React项目(Ubuntu服务器)
  18. apple授权登录(服务端)
  19. 前端怎么加粗字体_【推荐】皮卡丘怎么画?教你如何轻松绘画出可爱的宠物小精灵!...
  20. gunicorn的作用

热门文章

  1. 怎么自己打印餐饮小票_自己怎么做餐饮外卖配送系统?可以开发外卖配送系统的公司有哪些?...
  2. MAC OS安装Composer + Laravel
  3. Java后端学习体系(韩顺平)
  4. 06构造方法和文件读取
  5. Deep Learning of Binary Hash Codes for Fast Image Retrieval(代码跑通了)
  6. 如何理解typedef void
  7. text html artemplete,artTemplate前端模板引擎使用说明
  8. python中函数包括参数函数吗_Python中的函数---函数的定义和参数
  9. 鸿蒙硬件HI3861-连接WIFI
  10. 合肥师范学院计算机与技术,合肥师范学院计算机科学与技术系JAVA复习提纲