Exercise 4 :Relations

1 聚集和关联

将项目Dishwasher另存为Relations,添加两个新类:FrontPanelMotor
从类Dishwasher到类Motor画一个聚集。
从类Frontpanel到类Dishwasher画一个定向关联。

2 定向聚集

Motor不需要知道Dishwasher的情况,所以改变一下关联设置。
右键上述绘制的聚集,包含选项中选择“端点 itsMotor”。

3 添加操作

在类Motor中添加两个操作:onoff。不需要添加实现。

4 修改Dishwasher状态图

Dishwasher状态图“on”状态添加入口和出口操作

5 添加状态图

讲以下状态图添加到Frontpanel类中。

6 添加参数

在事件evKeyPress中添加int类型参数key

7 添加操作processKey

在类Frontpanel中添加操作processKey。添加int类型参数aKey以及如下实现。

switch (aKey){case 0:itsDishwasher->GEN(evStart);   break;case 1:itsDishwasher->GEN(evOpen);    break;case 2:itsDishwasher->GEN(evClose);   break;case 3:itsDishwasher->GEN(evService); break;case 4:itsDishwasher->GEN(evMode);    break;default:break;
}

8 添加实例

我们现在需要创建类的实例,有以下几种方法:

  • 创建所有类的初始实例
  • 创建所有类的全局实例
  • 只创建Dishwasher的初始实例,让它去创建其他实例
  • 使用一个额外的类创建实例

我们可以使用上述任意一种方法创建实例,但是无论使用哪一种方法,都必须确保关系得到初始化,否则关系将会是空指针,生成的可执行文件会崩溃。下面将分别使用上述方法创建实例。

8.1 初始实例

使用这种方法,我们必须手动初始化关系

p_FrontPanel->setItsDishwasher(p_Dishwasher);
p_Dishwasher->setItsMotor(p_Motor);

8.2 全局实例


初始化关系需要添加“链接”。

8.3 组合

我们可以使用“组合”代替“聚集”、“联合”,这样只需要初始化Dishwasher一个实例。这种情况下FrontpanelDishwasher之间的联系是双向的。

8.4 组合类

9创建组合类

添加一个新的对象模型图。
画一个组合类DishwasherBuilder
从浏览器中拖动三种类至组合类。

10 生成对象

右键每一个类,选择“生成对象”。

11 添加链接

12 组件

创建一个DishwasherBuilder的实例,然后DishwasherBuilder会创建所有的对象并且初始化关系。
修改组件Test–配置sim

13 检查关系是否初始化

保存,编译执行,结果如下图所示:

14 按键测试

绘制时序图

打开Frontpanel的实例状态图(见【Rhapsody学习笔记】3:Dishwasher)。
生成事件,双击参数key的位置,参数设置为0。依次点击“确定”、“生成”。

动画呈现的时序图如下图所示:

15 将Moter设置为Interface Class

编辑Motor类,设置构造型为Interface

16 生成代码并检查

生成代码,看操作on()和off(),是否是virtual,若不是,手动更改。

17 添加类

18 实现基类

分别右键类ACDC,选择“实现基类”。

19 添加实现

分别对操作onoff添加如下实现:cout << "AC Motor on" << endl;cout << "AC Motor off" << endl;

20 类的替换

DishwasherBuilder中删除Motor对象,将类AC拖进OMD中,并生成对象,添加链接。

21 输出

保存,编译执行。生成事件*evKeyPress(0)*后可以看到以下输出:

【Rhapsody学习笔记】4:Relations相关推荐

  1. 【Rhapsody学习笔记】2:Count Down

    Exercise 2 : Count Down 1 复制项目 打开第一个实例Hello.rpy,选择"文件"–"另存为",新建一个文件夹重命名,将项目保存为&q ...

  2. 【Rhapsody学习笔记】3:Dishwasher

    Exercise 3 :Dishwasher 1 新建项目Dishwasher 2 添加类"Dishwasher" 3 添加以下属性(Attributes) 类型为int型,初始值 ...

  3. 【Rhapsody学习笔记(二)】Linux环境下的Rhapsody集成引擎安装部署

    Rhapsody的安装部署包括Rhapsody引擎的部署(服务端),以及Rhapsody IDE(客户端)的安装部署,其中,IDE可以安装在多台不同的windows客户机上,本文仅介绍CentOS7环 ...

  4. 【Rhapsody学习笔记(一)】OrionHealth-Rhapsody的组成及常用过滤器

    一.Rhapsody组成 1.Rhapsody引擎 Rhapsody引擎集成了不同的卫生系统,提供安全连接,可靠的消息传递和高性能.Rhapsody引擎是整个集成平台的核心,提供快速服务的关键.它保证 ...

  5. 【Rhapsody学习笔记】1:Hello World

    Exercise1 Hello World 1 新建项目 2 点击图表,打开绘图工具栏 3 绘制displaydisplaydisplay类 拖动右边图标至中间窗口,修改名称. 成功后左侧" ...

  6. 【Rhapsody学习笔记(三)】常用通讯点

    通讯点(Communication Points)即外部接口是对内外传输(接收和发送)消息的基本套件,是外部系统和Rhapsody路由之间的接口,不同种类的通讯点提供了不同的传输接口用于连接各种不同的 ...

  7. 英语学习笔记2019-9-27

    英语学习笔记2019-9-27 attend -- attendance Attendance must be examined for a class, otherwise students are ...

  8. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第01章 语言处理与Python

    第01章 语言处理与Python 1.1 语言计算:文本和单词 Python入门 NLTK 入门 搜索文本 计数词汇 1.2 近观Python:将文本当做词链表 链表(list,也叫列表) 索引列表 ...

  9. Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记

    1. 引言 Groth 2009年论文<Linear Algebra with Sub-linear Zero-Knowledge Arguments>. 已知2个matrices A,B ...

最新文章

  1. js 控制展开折叠 div html dom
  2. mysql查询语句详解_基于mysql查询语句的使用详解
  3. 跟我学PHP第二篇- 配置Mysql以及PHP WampServer篇(1)
  4. 计算机安全专家建议:尽快为电脑升级打补丁
  5. Oracle 怎么删除重复数据
  6. ORA-07445 ERROR on auto execute of job 8913
  7. mysql中递增列_如何使用JDBC在MySQL中创建带有自动递增列的表?
  8. VC++编程中的文件操作API和CFile类
  9. Python 爬虫 —— BeautifulSoup
  10. Android与H5相互接口调用及Android端接口整理
  11. 如何低成本快速积累用户,分享4种无脑式操作
  12. 如何完成一次 git pr
  13. 暂停2.4G手机支付:中国移动缓兵之计
  14. 常见的嵌入式操作系统有哪些
  15. python药店销售数据分析_药房销售情况分析(python篇)
  16. 医学图像处理开源软件
  17. js实现图片粘贴功能
  18. laydate限定时间控件去除秒
  19. PDF 补丁丁 0.6.2 测试版发布
  20. Matlab数据分析与计算,互联网java工程师面试题pdf

热门文章

  1. tps压不上去,可能有哪些方面原因?
  2. mysql 利用时间查询_利用时间的艺术
  3. C++ : Boost : Rational 有理数类
  4. OSX:App Store下载到哪里去了?
  5. Unity中UGUI小地图实现的原理
  6. 动力节点Redis学习笔记
  7. 解决Microsoft Office 2010无法打开.doc文件的问题
  8. 数字化决策要依靠什么才能实现
  9. vscode上传项目代码到gitee中
  10. Threes.js入门篇之7 - 场景光照