当前位置:网站首页>【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)*后可以看到以下输出:
边栏推荐
猜你喜欢
Rejection sampling note
为数学而歌之伯努利家族
Pytorch study notes 7 - processing input of multi-dimensional features
Chemical Reagent Phospholipid-Polyethylene Glycol-Amino, DSPE-PEG-amine, CAS: 474922-26-4
四种常见的POST提交数据方式
Cholesterol-PEG-NHS NHS-PEG-CLS 胆固醇-聚乙二醇-活性酯可修饰小分子材料
JS写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数JS
如何修改数据库密码
pytorch模型微调finetuning训练image_dog(kaggle)
Cholesterol-PEG-Amine CLS-PEG-NH2 胆固醇-聚乙二醇-氨基科研用
随机推荐
Research reagents Cholesterol-PEG-Maleimide, CLS-PEG-MAL, Cholesterol-PEG-Maleimide
Cholesterol-PEG-Acid CLS-PEG-COOH Cholesterol-Polyethylene Glycol-Carboxyl Modified Peptides
softmax函数详解
Tensorflow——演示
[已解决]ssh连接报:Bad owner or permissions on C:\\Users/XXX/.ssh/config
活体检测FaceBagNet阅读笔记
CLS-PEG-FITC Fluorescein-PEG-CLS 胆固醇-聚乙二醇-荧光素简介
浏览器中的画中画(Picture-in-Picture)API
ROS之service编程的学习和理解
Wangeditor rich text editor to upload pictures and solve cross-domain problems
Fluorescein-PEG-DSPE Phospholipid-Polyethylene Glycol-Fluorescein Fluorescent Phospholipid PEG Derivatives
Redis-哈希
解决background-size:cover时图片铺满但显示不完整?
crontab的定时操作
机器学习和深度学习概述
DingTalk Enterprise Internal-H5 Micro Application Development
拒绝采样小记
Evaluating Machine Learning Models - Excerpt
After unicloud is released, the applet prompts that the connection to the local debugging service failed. Please check whether the client and the host are under the same local area network.
Pytorch学习笔记09——多分类问题