对象与对象之间关系(C++)

本文探讨了编程中的依赖关系概念,包括单向和双向依赖的差异,以及它们在类构造方法和方法调用中的体现。同时,区分了关联关系(静态强关联与弱关联)、聚合关系和组合关系的区别,通过实例展示了这些概念在实际代码中的应用。
摘要由CSDN通过智能技术生成

依赖关系:单向依赖,双向依赖。
依赖关系是一个用带箭头的虚线表示;他描述一个对象在运行期间会用到另一个对象的关系。与关联关系不同的是,他是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化;依赖关系也可能发生变化。

注意:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系处理临时知道对方外,还是“使用”对方的方法和属性。

例:没有你,我可以有其他的来代替>_<


#include<iostream>
using namespace std;
class Book {
};
class Node_computer {
};
class Desk_computer {
};
class Student {
public:
	void Study_programming(Book* pb) {}
	void Study_programming(Node_computer* pn) {}
	void Study_programming(Desk_computer* pd) {}
};
int main() {
	Book book;
	Node_computer ncom;
	Desk_computer dcom;
	Student s;
	s.Study_programming(&book);
	s.Study_programming(&ncom);
	s.Study_programming(&dcom);
	return 0;
}

关联关系(Association):
关联关系是一条直线表示的;他描述不同类的对象之间的关系,他是一种静态关系,通常与运行状态无关,一般由常识等因素决定

 

 

 

 

一般用来定义对象之间静态的、天然的结构,所以关联关系是一种“强关联”关系:比如教师和课程之间,学生和学校之间(关联关系不强调方向,表示对象互相知道)

注意:在最终代码中,关联对象通常是以成员属性(对象)或引用的形式实现。
 

//弱关联
#include<iostream>
using namespace std;
class Cpp {};
class Mysql{};
class Tercher {
private:
	Cpp* pc;//弱关联
	//Cpp& c;//强关联创建对象时必须存在即引用不能为空
public:
	Tercher(Cpp *p=nullptr):pc(p) {}
	~Tercher(){
		//delete p; 生存期不同
	}
	void SetCpp(Cpp* p){
		pc = p;
	}
	Cpp* GetCpp()const {
		return pc;
	}
	void Touch() {
		if (pc != nullptr) cout << "学习C++" << endl;
		else cout << "暂时不学" << endl;
	}
};
int main() {
 
	return 0;
}
//强关联
#include<iostream>
#include<vector>
#include<map>
#include<string>
using namespace std;
class Coures {};
class Tercher {
private:
	vector<Coures*>vc;//1:n
	map<string, Coures*> coumap;
	Coures* pc;//弱关联
	Coures& coures;//强关联
public:
	Tercher() {}
	~Tercher() {
		//delete p; 生存期不同
	}
	void AddCoures(Coures* p) {}
};
int main() {
	Tercher t;
	Coures c;
	return 0;
}

聚合关系(Aggregation):
聚合关系用一条带空心菱形箭头的直线表示,

聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义,例如一个部门由多名员工构成(与组合关系不同的是整体和部分不是强依赖(生存期控制),即使整体不存在了,部分依然存在,例如 部门撤销了,人员不会消失,他们依然存在)

 组合关系:由什么构成

与聚合关系不同的地方在于,组合关系成员收生存期影响

 泛化关系:是一个什么

池化技术:提前保存大量的资源,以备不时只需及重复使用如:内存池,线程池,链接池

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值