【Rhapsody学习笔记】4:Relations

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)*后可以看到以下输出:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值