c++组合 聚合 关联

组合和聚合区别(不能脱离整体 能脱离整体)

组合:(表示两个对象之间是整体和部分的关系,部分的生命周期不能超越整体。如人和脑袋)
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象)

聚合:(表示两个对象之间是整体和部分的关系,部分的生命周期可以超越整体。如电脑和鼠标)

反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。


组合方式一般代码会这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。

聚合方式一般代码会这样写:
A类的对象在创建时会立即创建B类的对象,而是等待一个外界的对象传给它

--------------------------------------------------------------------

对c++,形如:
class B1;
class B2;
class B3;
class A
{
B1 b1;
B2& b2;
B3* b3;
};
B1,B2,B3都是部分类。
B1与A的关系是组成关系。
B2、B3与A的关系是聚合还是组成要根据这一条:部分类是否能脱离整体类而存在。
在这里可以理解他们的生命周期是否同步。


如果b2,b3是通过外部传入的,形如:
class A
{
public:
   A(B3* b3)
   {
      m_b3 = b3);
   }
private:
   B3* m_b3;
};
main()
{
   B2 bbb;
   A a(&bbb);
}
bbb并不会因为a的消亡而消亡。那么就是聚合关系。
反之,如果
m_b3是在A的构造函数new,在A的析构函数delete,两者生命周期一样,那么就是组成关系。
引用的情况类似。

个人感觉uml为了满足所谓通用性,使得对模型的描述很粗糙,并没有吹嘘的那么好。
仅供参考。

 

--------------------------------------

关联:简单的可以认为,如果一个类作为了另外一个类的属性,那一定是关联关系。但你要知道,聚合是一种特殊的关联,而组合又是一种特殊的聚合。一般的关联我们认为是平级的、无整体部分关系的,如朋友关系。

依赖:对象之间的临时关系,临时性体现在不超越方法的周期。简单的说,在方法使用到的,如参数类,就一定是依赖关系。

------ 完.不对之处请指正!------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python内建时间模块 time和datetime

时间模块 UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC8。DST(Daylight Saving Time)即夏令时。 在Python中,通常有这几种方式来表示时间:1&…

java tomcat自动安装教程_Tomcat:基础安装和使用教程

背景此文记录了 Tomcat 的基本使用方法,主要为了强化记忆。安装步骤第一步:下载和安装 Java安装并设置JAVA_HOME环境变量:第二步:下载和解压 Tomcat第三步:修改端口号.NET 我使用的是 80xx,Php 我使用的是 …

C++ 智能指针五

/* 代码分析:这是标准库的源码,我们看到在enable_shared_from_this内部保存了一个weak_ptr。shared_from_this函数就是通过这个weak_ptr得到了。 但是另外一点,我们可以看到在enable_shared_from_this的构造函数中并没有对这个weak_ptr进行初始化。 这就…

多线程之间共享的资源有哪些

搜集了一下资料,网上的说法众说纷纭;曾经以为进程、线程的问题搞得很清楚,现在感觉似乎有些复杂: 课本的说法:进程是资源分配的基本单位;线程是系统调度的基本单位。平时我们写的程序都是作为线程运行的&am…

mybatis一级缓存导致sql查询出现问题

如下代码: PubPsndoc pubdoc pubPsndocDAOService.selectByPrimaryKey(in.id);pubdoc.setPkCorp(newpkcorp);pubdoc.setPkDept(newpkdept);pubPsndocDAOService.update(pubdoc); PubPsndoc personPubdoc pubPsndocDAOService.selectByPrimaryKey(in.id); 在上述代…

使用JavaParser从源文件中提取JavaDoc文档

很多人正在使用JavaParser实现最不同的目标。 其中之一是提取文档。 在这篇简短的文章中,我们将看到如何打印与类或接口关联的所有JavaDoc注释。 可以在GitHub上找到代码: https : //github.com/ftomassetti/javadoc-extractor 获取类的所有Javadoc注释…

三个打印函数printf()/sprintf()/snprintf()区别

先贴上其函数原型 printf( const char *format, ...) 格式化输出字符串,默认输出到终端-----stdout sprintf(char *dest, const char *format,...) 格式化输出字符串到指定的缓冲区 snprintf(char *dest, size_t size,const char *format,...) 按指定的S…

JAVA客户端数据传输_java模拟TCP通信实现客户端上传文件到服务器端

java模拟TCP通信实现客户端上传文件到服务器端,供大家参考,具体内容如下客户端package com.zr;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import jav…

js闭包简单演示

function f1() { var age 20; var height 170; function f2() { console.log("aaa:"(age) "--bbb:"height); } return f2; } var ff f1(); var fa f1(); fa(); fa(); ff(); ff(); 这里有两个闭包,fa和ff分别保存的信息独立,age…

C++ 类成员引用变量的使用

出来工作后&#xff0c;才发现原来C的类成员变量可以是引用变量。下面通过一个例子来说明&#xff08;虽然没多大意义&#xff09;&#xff1a; #include <iostream> using namespace std; class A { public: A(int i3):m_i(i){} void print() { c…

java 课程设计表达式求值_NYOJ-35-表达式求值

NYOJ-35-表达式求值很好的一题&#xff0c;利用栈来计算表达式的值四则运算的规则&#xff1a;1.先乘除,后加减&#xff1b;2.从左算到右&#xff1b;3.先括号内,后括号外注意把字符串转换成浮点数可以使用atof函数#include#include#includeint map[7][7] //算符间的优先关系,1…

打破冷漠僵局文章_研究僵局–第3部分

打破冷漠僵局文章在本系列的前两个博客&#xff08; 第1部分和第2部分&#xff09;中 &#xff0c;我演示了如何创建一段会死锁的错误代码&#xff0c;然后使用该代码演示进行线程转储的三种方式。 在此博客中&#xff0c;我将分析线程转储以找出错误的原因。 下面的讨论同时涉…

springboot 静态资源访问,和文件上传 ,以及路径问题

springboot 静态资源访问: 这是springboot 默认的静态资源访问路径 访问顺序依次从前到后&#xff08;http://localhost:8080/bb.jpg&#xff09; spring.resources.static-locations classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/p…

mysql jdbc链接配置文件_Java JDBC使用配置文件连接数据库

Java JDBC使用配置文件连接数据库&#xff1a;创建后缀名为&#xff1a;.properties的文件&#xff0c;文件内容包括&#xff0c;数据库驱动、连接的数据库地址、用户名、密码……以Mysql为例创建config.properties配置文件其内容如下&#xff1a;DRIVER_CLASScom.mysql.jdbc.D…

单例模式(饿汉式和懒汉式)

以前学习单例的时候&#xff0c;只理解了简单部分。这次看DRP&#xff0c;对单例的饿汉式和懒汉式有了一些认识和对比。 在实际的开发中&#xff0c;有些地方需要一个类只有一个实例。比如&#xff1a;网站在线人数的计数器&#xff0c;再比如IDE中的工具箱之类的等等。当需要这…

关于前端设置cookie

cookie既可以后端设置也可以在前端设置&#xff0c;例如登陆/注册功能&#xff0c;每次都要向服务器请求用户数据&#xff0c;这种就可以把cookie放到前端储存起来。 当网页要发http请求时&#xff0c;浏览器会先检查是否有相应的cookie&#xff0c;有则自动添加在request head…

使用React,Spring Boot和用户身份验证构建CRUD应用程序

建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; React是用于创建Web应用程序前端的最…

java基本数据类型所占长度_java基本数据类型长度详解

java基本数据类型基础知识机器数和真值机器数一个数在计算机中的二进制表示形式,叫做这个数的机器数机器数是带符号的&#xff0c;在计算机用一个数的最高位存放符号, 正数为0, 负数为1例如:dec 3 bit 00000011dec -3 bit 10000011真值将带符号位的机器数对应的真正数值称为机…

解释型语言和编译型语言的区别

解释型语言和编译型语言的区别 首先&#xff0c;我们编程都是用的高级语言(写汇编和机器语言的大牛们除外)&#xff0c;计算机不能直接理解高级语言&#xff0c;只能理解和运行机器语言&#xff0c;所以必须要把高级语言翻译成机器语言&#xff0c;计算机才能运行高级语言所编写…

解决tomcat中文传输乱码问题

<Connector URIEncoding"utf-8" connectionTimeout"20000" encoding"utf-8" port"8080" protocol"HTTP/1.1" redirectPort"8443"/> 在server.xml中找到这句即可&#xff0c;加上URIEncodingUTF-8即可。转载…