依赖关系:单向依赖,双向依赖。
依赖关系是一个用带箭头的虚线表示;他描述一个对象在运行期间会用到另一个对象的关系。与关联关系不同的是,他是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化;依赖关系也可能发生变化。
注意:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系处理临时知道对方外,还是“使用”对方的方法和属性。
例:没有你,我可以有其他的来代替>_<
#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):
聚合关系用一条带空心菱形箭头的直线表示,
聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义,例如一个部门由多名员工构成(与组合关系不同的是整体和部分不是强依赖(生存期控制),即使整体不存在了,部分依然存在,例如 部门撤销了,人员不会消失,他们依然存在)
组合关系:由什么构成
与聚合关系不同的地方在于,组合关系成员收生存期影响
泛化关系:是一个什么
池化技术:提前保存大量的资源,以备不时只需及重复使用如:内存池,线程池,链接池