建模的常用手段:组合与聚合
文章目录
- 1 组合
- 1.1 组合的基本概念
- 1.2 组合的具体方式
- 1.3 组合的具体实例
- 2 聚合
- 2.1 聚合的基本概念
- 2.2 聚合的具体实例
1 组合
1.1 组合的基本概念
当两个对象之间是整体与部分的关系时,它们之间就是组合的关系。
对于如下问题:
构建一个计算机类,一台计算机,由CPU芯片,硬盘,内存等组成。CPU芯片也使用类来表示。
计算机类和CPU类就是组合关系,组合关系具有如下特点:
- 被拥有的对象(芯片)的生命周期与其拥有者(计算机)的生命周期是一致的。
- 计算机被创建时,芯片也随之创建。
- 计算机被销毁时,芯片也随之销毁。
- 拥有者需要对被拥有者负责,是一种比较强的关系,是整体与部分的关系。
1.2 组合的具体方式
具体组合方式:
1)被组合的对象直接使用成员对象。(常用)
2)使用指针表示被组合的对象,在构造函数中,创建被组合的对象;在析构函数中,释放被组合的对象。
UML中的组合表示:
注意包含者使用实心菱形(UML画图工具:starUML)。
1.3 组合的具体实例
构建一个计算机类,一台计算机,由CPU芯片,硬盘,内存等组成。CPU芯片也使用类来表示。
CPU类:
#pragma once#include <string>class CPU
{public:CPU(const char *brand = "intel", const char *version="i5");~CPU();
private:std::string brand; //品牌std::string version; //型号
};
#include "CPU.h"
#include <iostream>CPU::CPU(const char *brand, const char *version)
{this->brand = brand;this->version = version;std::cout << __FUNCTION__ << std::endl;
}CPU::~CPU()
{std::cout << __FUNCTION__ << std::endl;
}
Computer类:
#pragma once
#include "CPU.h"class Computer
{public:Computer(const char *cpuBrand, const char *cpuVersion, int hardDisk, int memory);~Computer();
private:CPU cpu; // Computer和CPU是“组合”关系int hardDisk; //硬盘, 单位:Gint memory; //内存, 单位:G
};
#include "Computer.h"
#include <iostream>Computer::Computer(const char *cpuBrand, const char *cpuVersion,int hardDisk, int memory):cpu(cpuBrand, cpuVersion)
{this->hardDisk = hardDisk;this->memory = memory;std::cout << __FUNCTION__ << std::endl;
}Computer::~Computer()
{std::cout << __FUNCTION__ << std::endl;
}
main.cpp:
#include <iostream>
#include <Windows.h>
#include <string>
#include <string.h>
#include "Computer.h"using namespace std;void test() {Computer a("intel", "i9", 1000, 8);
}int main(void) {test();system("pause");return 0;
}
构造与析构的顺序如下:
Cpu::Cpu
Computer::Computer
Computer::~Computer
Cpu::~Cpu
2 聚合
2.1 聚合的基本概念
聚合不是组成关系,被包含的对象,也可能被其他对象包含。
拥有者,不需要对被拥有的对象的生命周期负责。
UML中的组合表示:
2.2 聚合的具体实例
需求:给计算机配一台音响。
Computer类:
#pragma once
#include "CPU.h"class VoiceBox;class Computer
{public:Computer(const char *cpuBrand, const char *cpuVersion, int hardDisk, int memory);~Computer();void addVoiceBox(VoiceBox *box);
private:CPU cpu; // Computer和CPU是“组合”关系int hardDisk; //硬盘, 单位:Gint memory; //内存, 单位:GVoiceBox *box; //音箱
};
#include "Computer.h"
#include <iostream>
#include "VoiceBox.h"Computer::Computer(const char *cpuBrand, const char *cpuVersion,int hardDisk, int memory):cpu(cpuBrand, cpuVersion)
{this->hardDisk = hardDisk;this->memory = memory;std::cout << __FUNCTION__ << std::endl;
}void Computer::addVoiceBox(VoiceBox *box) {this->box = box;
}Computer::~Computer()
{std::cout << __FUNCTION__ << std::endl;
}
main.cpp:
#include <iostream>
#include <Windows.h>
#include <string>
#include <string.h>
#include "Computer.h"
#include "VoiceBox.h"using namespace std;void test(VoiceBox *box) {Computer a("intel", "i9", 1000, 8);a.addVoiceBox(box);
}int main(void) {VoiceBox box;test(&box);system("pause");return 0;
}
参考资料:
- C/C++从入门到精通-高级程序员之路【奇牛学院】
建模的常用手段:组合与聚合相关推荐
- php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理)
php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理) 一.总结 一句话总结: 比较记忆:注意比较各种攻击的区别,比如csrf和xss,以及xss和sql,这样才能记住 1.Sql注入是什 ...
- java依赖_java 依赖、组合、聚合与继承
java中类与类之间的关系 大部分的初学者只知道java中两个类之间可以是继承与被继承的关系,可是事实上,类之间的关系大体上存在五种-继承(实现).依赖.关联.聚合.组合. 接下来,简单的分析一下这些 ...
- 数学建模中常用的方法
数学建模中常用的方法:类比法.二分法.差分法.变分法.图论法.层次分析法.数据拟合法.回归分析法.数学规划(线性规划,非线性规划,整数规划,动态规划,目标规划).机理分析.排队方法.对策方法.决策方法 ...
- 组合、聚合、继承详解
有人学了继承,认为他是面向对象特点之一,就在所有能用到继承的地方使用继承,而不考虑究竟该不该使用,无疑,这是错误的.那么,究竟该如何使用继承呢? java中类与类之间的关系 大部分的初学者只知道jav ...
- 政客常用手段_我可以比政客更好地管理经济
政客常用手段 The idea that the work of our elected representatives could be done better by a computer prog ...
- 资深建模师常用的几款建模软件,你了解多少?
如何学习游戏建模?对于有兴趣且有时间的小伙伴,相信都是选择自学,也许你会在网上寻找大量的资料.教程,然后开始你的探索之旅,当然,在我看来,科班教学更加有效和更深刻的过程,在其中你收获到的相信不只是学识 ...
- 数学建模中matlab程序,数学建模中常用的30个MATLAB程序和函数
<数学建模中常用的30个MATLAB程序和函数>由会员分享,可在线阅读,更多相关<数学建模中常用的30个MATLAB程序和函数(15页珍藏版)>请在人人文库网上搜索. 1.内部 ...
- Java中的组合、聚合和关联关系
1.介绍 对象之间在现实生活和编程中都有关系.有时很难理解或实现这些关系. 在本教程中,我们将重点介绍 Java 的三种关系类型,这些关系有时很容易混合:组合.聚合和关联. 2.组合 组成是一种&qu ...
- 计算机的命令函数,数学建模的常用的命令和基本函数..doc
数学建模的常用的命令和基本函数. 上次作业: 利用Matlab帮助系统查询特殊矩阵函数zeros,并输出2行3列.3行3列这样的矩阵. 一.Matlab6.5的常用的命令和技巧: 常用的命令 表1 M ...
最新文章
- typedef的作用
- java native方法体在哪_java中native方法的使用
- PHP 数组变量之写时复制的要点 只有数组才有的概念。
- 二叉树的概念、算法简介及树的平衡
- 技术无罪?谷歌AI伦理团队负责人被解雇
- 每日程序C语言29-将数组逆序输出
- [转]软件保护之注册算法篇
- 下一个更大元素 I(LeetCode 496)
- 码农与UI沟通的日常
- TCP协议的三次握手和四次分手
- MySQL锁机制,行锁jingran加在索引上
- Matlab 【应用】【1】用Matlab找一组模拟波形的极值(含极大值、极小值、最大值)并在图中画出来
- hisicv200 exfat支持(转)
- pyplot.annatate
- Windows Nano Server VHD文件制作
- js操作select(添加、移除、获取select值)
- Android创建定时和周期任务
- 利用hdparm工具配合crontab使硬盘不用时休眠
- 【PPT】学术答辩163套模板
- 只需四天,从零开始选购笔记本电脑【转】【荐】