类之间的六种静态关系和类图实现(c++)
类图的表示方法:每个类分为三层,最顶层的为类名,中间层的为属性,最底层的为方法。
- 属性 的表示方式为:【可见性】【属性名称】:【类型】={缺省值,可选}
- 方法 的表示方式为:【可见性】【方法名称】(【参数列表】):【类型】
- 可见性 都是一样的:"-“表示private、”+“表示public、”#"表示protected。
① 继承(generalization)
继承:继承是最能体现面向对象代码复用的类关系。
- “is a”
- 例如 duck “is a” bird ,duck和bird就是继承关系。
代码:在C++中的表现为duck是bird子类。
class duck:public bird{
//duck的扩展属性和方法
};
- 用带空心三角形的实线来表示。

② 组合(composition)
组合:将一个对象wing(翅膀类)放到另一个对象bird里。(翅膀wing不能脱离鸟bird而存在)
- 组合是一种强所属关系。wing是bird的一部分,具有相同的生命周期,wing在bird之前创建,在bird销毁之前销毁。
- wing是不能脱离bird独立存在的。
代码:在C++中表现为wing是bird成员属性。
class wing{
};
class bird{
private:
wing w; //wing是部分类,bird是组合类
};
- 带实心菱形的实线,菱形指向整体,箭头指向部分

③ 聚合(aggregation)
聚合:成员对象(Engine、Wheel)都是整体(Car)的一部分。(Engine、Wheel虽然是Car的一部分,但能脱离Car而存在)
代码:在C++中表现为Engine、Wheel是Car成员属性。
class Engine{};
class Wheel{};
class Car{
private:
Engine m_en;
Wheel m_wh;
public:
Car(Engine en, Wheel wh):m_en(en),m_wh(wh){}
};
- 空心菱形的实线,菱形指向整体,箭头指向部分

④ 关联(association)
关联:表示对象A和对象B之间有联系,相关联的对象可以看作是平等的。 (前面组合、聚合都是部分,关联是平等。)
- 常见关联有3种:单向关联、双向关联、自关联。下面以顾客和商品的双向关联举例。

代码:在c++中表现为一个类的对象作为另一个类的成员变量。
//商品类
class product{
private:
customer cu; //商品属于哪位顾客,作为成员变量
};
//顾客类
class customer{
private:
product pro[10]; //顾客买了哪些商品,作为成员变量
};
- 用实线连接有关联关系的对象所对应的类
⑤ 依赖(dependency)
依赖:是一种 使用 关系。(例如司机driver使用汽车car)
代码:在C++中的表现为 某个类的方法 使用 另一个类的对象 作为参数。
class Car{
public:
void move();
};
class Driver{
public:
void drive(Car car)
{
car.move();
}
};
- 用带箭头的虚线表示,谁是被用的,箭头就指向谁

⑥ 实现(realization)
实现:子类实现父类中的“接口”(通过纯虚函数来实现)。(每种动物都有自己独有的移动方法,例如鸟会飞)
代码:在C++中表现为子类实现父类中的纯虚函数。
class animal{
public:
virtual void move();
};
class bird{
public:
void move(){
//鸟的移动方式,飞
}
};
- 和继承较像,用带空心三角形的虚线来表示。

本文详细介绍了UML类图中的六种静态关系——继承、组合、聚合、关联、依赖和实现,并给出了C++代码示例。通过这些关系,可以清晰地理解类之间的结构和相互作用,提升软件设计能力。
6253

被折叠的 条评论
为什么被折叠?



