以下是博主学习笔记,错误之处,请指正
在类与类关系中关系强度从弱到强依次为:
依赖关系(Dependency) < 关联关系(Association) < 聚合(Aggregation) < 组合(Composition) < 泛化(Generalization)
一、依赖关系
表示对象之间瞬时的联系;在UML中用虚线箭头表示
依赖关系表现形式:作为people某个方法的局部变量、参数或者返回值
C++实现:
class computer{
public:
computer(){
}
};
class people{
public:
computer programming(computer cmp){
return cmp
}
};
二、关联关系
关联关系明确类与类之间存在的静态关联,体现为类中增加的实例变量。
在UML中用实线箭头表示
(一)双向关联:
关系解释:一个多边形由3个及以上边组成,3个及以上的边组成一个多边形
C++实现:
class side{
public:
side(){
}
Polygon getPolygons(){
}
void addPolygons(){
}
private:
Polygon polygons = new Polygon();
};
class Polygon{
public:
Polygon(){
}
void addBian(){
}
side getBian(){
}
private:
set<side> bian{3,4,5}; #因为是一个多边形对应多条边所以类型用集合类型声明,并且由于最少三条边,所以应该初始化最少三条边
};
基本集合类型 | 元素顺序要求 | 元素唯一性要求 |
---|---|---|
Set | 不要求 | 无重复{unique} |
Bag或者Multiset | 不要求 | 允许重复 |
OrderedSet | 要求{ordered} | 无重复{unique} |
List或Sequence | 要求{ordered} | 允许重复 |
(二)单向关联:
关联解释:
一个多边形由至少三条边组成,Polygon通过sides变量管理side类
C++实现:
class side{
public:
side(){
}
};
class Polygon{
public:
Polygon(){
}
void addBian(){
}
side getBian(){
}
private:
set<sides> bian{3,4,5}; #因为是一个多边形对应多条边所以类型用集合类型声明,并且由于最少三条边,所以应该初始化最少三条边
};
(三)自我关联:
关联解释:一个点通过points变量管理多个点(包括0个)
C++代码实现:
class Point{
public:
Point(){
}
void addPoints(){
}
Point getPoints(){
}
private:
Point points
};
三、聚合关系
用空心菱形符号表示多边形与点的弱包含关系,即不存在层面的依赖关系。
关系解释:一个多边形由三条以上的边构成,并由sides变量管理side类。删 除多边形类后side类不会消失,并且可以构成其他多边形
C++伪代码实现:
class side{
public:
side(){
}
void setSide(){
}
private:
double side
};
class Polygon{
public:
Polygon(){
初始化边
}
void addSides(side* S){
this->side = S
}
side *getSides(){
return side;
}
//或者利用C++中地址操作符&,获取对象的地址用于函数参数中
void addSides(side& S){
this->side = S
}
side &getSides(){
return side;
}
private:
set *sides;
};
在上述实现方法中,getSides得到的是side类的一个地址,能够随意修改side类,打破了原有的封装,其sides也不依赖Polygon类“存活”。
四、组合关系
用实心的菱形表示整体与部分的强包含关系:
关系解释:一个多边形类(Polygon)由三个及以上边(side)组合而成。若删除多边形类,则对应的点类也同时删除,即同生共死关系
C++伪代码实现:
class side{
public:
side(){
}
}
class Polygon{
public:
Polygon(){
初始化,至少三条边
}
void addSides(side S){
初始化
}
side getSides(){
}
private:
side sides;
}
上述实现方法中,Polygon中的side类,作为其中的一个参数存在,与Polygon类“同生共死”。
五、泛化关系
表示类与接口之间的继承关系
C++伪代码实现:
class Animal{
public:
自由行动();
};
class Cat : public Animal{
privite:
老鼠天敌;
喵喵喵;
};
class Dog : public Animal{
privite:
人类伙伴;
汪汪汪;
}