当前位置:网站首页>【Rhapsody学习笔记】4:Relations
【Rhapsody学习笔记】4:Relations
2022-07-31 05:17:00 【G_Summer_Song】
Exercise 4 :Relations
1 聚集和关联
将项目Dishwasher另存为Relations,添加两个新类:FrontPanel和Motor。
从类Dishwasher到类Motor画一个聚集。
从类Frontpanel到类Dishwasher画一个定向关联。
2 定向聚集
Motor不需要知道Dishwasher的情况,所以改变一下关联设置。
右键上述绘制的聚集,包含选项中选择“端点 itsMotor”。
3 添加操作
在类Motor中添加两个操作:on和off。不需要添加实现。
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一个实例。这种情况下Frontpanel和Dishwasher之间的联系是双向的。
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 实现基类
分别右键类AC和DC,选择“实现基类”。
19 添加实现
分别对操作on和off添加如下实现:cout << "AC Motor on" << endl;和cout << "AC Motor off" << endl;。
20 类的替换
在DishwasherBuilder中删除Motor对象,将类AC拖进OMD中,并生成对象,添加链接。
21 输出
保存,编译执行。生成事件*evKeyPress(0)*后可以看到以下输出:
边栏推荐
- JS写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数JS
- Research reagents Cholesterol-PEG-Maleimide, CLS-PEG-MAL, Cholesterol-PEG-Maleimide
- 应用usb_cam同时打开多个摄像头方法
- Shell/Vim related list
- Pytorch study notes 7 - processing input of multi-dimensional features
- Solution for MySQL The table is full
- 【Latex】TexLive+VScode+SumatraPDF 配置LaTex编辑环境
- 使用 OpenCV 提取图像的 HOG、SURF 及 LBP 特征 (含代码)
- Attention based ASR(LAS)
- Remote file xxx is mapped to the local path xxx and can‘t be found. You can continue debugging....
猜你喜欢

Cholesterol-PEG-Azide CLS-PEG-N3 胆固醇-聚乙二醇-叠氮 MW:3400

Tensorflow steps on the pit while using it

wangeditor编辑器内容传至后台服务器存储

cv2.imread()

Numpy常用函数

Cholesterol-PEG-NHS NHS-PEG-CLS cholesterol-polyethylene glycol-active ester can modify small molecular materials

浏览器中的画中画(Picture-in-Picture)API

科研试剂Cholesterol-PEG-Maleimide,CLS-PEG-MAL,胆固醇-聚乙二醇-马来酰亚胺

Cholesterol-PEG-NHS NHS-PEG-CLS 胆固醇-聚乙二醇-活性酯可修饰小分子材料

MySQL 主从切换步骤
随机推荐
评估机器学习模型-摘抄
使用 OpenCV 提取图像的 HOG、SURF 及 LBP 特征 (含代码)
mPEG-DSPE 178744-28-0 甲氧基-聚乙二醇-磷脂酰乙醇胺线性PEG磷脂
UR3机器人雅克比矩阵
Cholesterol-PEG-Amine CLS-PEG-NH2 Cholesterol-Polyethylene Glycol-Amino Research Use
四种常见的POST提交数据方式
Four common ways of POST to submit data
自然语言处理相关list
Picture-in-Picture API in the browser
计算图像数据集均值和方差
The content of the wangeditor editor is transferred to the background server for storage
Phospholipids-Polyethylene Glycol-Active Esters for Scientific Research DSPE-PEG-NHS CAS: 1445723-73-8
Tensorflow——演示
Attention based ASR(LAS)
DSPE-PEG-Azide DSPE-PED-N3 Phospholipid-Polyethylene Glycol-Azide Lipid PFG
活体检测CDCN学习笔记
[已解决]ssh连接报:Bad owner or permissions on C:\\Users/XXX/.ssh/config
Embedding cutting-edge understanding
虚拟机查看端口号进程
np.fliplr与np.flipud