类之间关系描述
程序员文章站
2022-04-01 11:18:29
...
简述
在面向对象编程中,类之间有各种各样的相互关系,常见的有 泛化,关联,依赖,组合,聚合,实现。
UML类图
详解:
1,泛化
简析:
泛化其实就是继承。继承用空心三角形加实线来表示。继承是面向对象的三大特性之一,也是类与类之间最基本的关系,继承关系耦合度比较强。鸟类继承动物类后,拥有类动物类的所有特性和方法,如生命,新陈代谢等,但他也有自己的独特的特性和方法,如翅膀和下蛋,他两的耦合度比较高,当动物类增加一个方法时,鸟类也会增加。
如图:
代码:
//动物
02.class Animal
03.{
04.public:
05. void Metabolism(Oxygen oxygen, Water water); //新陈代谢
06. void Multiply(); //繁殖
07.public:
08. int m_healthPoint; //生命
09.};
10.
11.//鸟
12.class Bird : public Animal
13.{
14.public:
15. Bird() //构造需要初始化翅膀
16. {
17. wing = new Wing;
18. }
19.
20. void LayEggs(); //下蛋
21.private:
22. Wing *wing; //翅膀
23.};
2,关联
简析:
关联关系用实线箭头表示,当一个类“知道”另一个类是用关联。企鹅类想知道气候类的变化,需要引用气候类。
如图:
代码:
[cpp] view plain copy
01.//气候
02.class Climate
03.{
04.public:
05.};
06.
07.//企鹅
08.class Penguin : public Bird
09.{
10.private:
11. Climate *climate; //气候
12.};
3,依赖
简析:
依赖关系用虚线箭头表示,动物类依赖水和氧气类才能新陈代谢。在动物类的方法 ”新陈代谢“ 中以函数参数传入。
如图:
代码:
[cpp] view plain copy
01.//氧气
02.class Oxygen
03.{
04.public:
05.};
06.
07.//水
08.class Water
09.{
10.public:
11.};
12.
13.//动物
14.class Animal
15.{
16.public:
17. void Metabolism(Oxygen oxygen, Water water); //新陈代谢
18. void Multiply(); //繁殖
19.public:
20. int m_healthPoint; //生命
21.};
4,组合
简析:
组合关系用实心菱形加实线箭头表示。组合是一种强的“拥有”关系。体现类严格的部分整体关系,部分和整体的生命周期一样。比如鸟和翅膀,翅膀类是鸟类的一个属性。在能用组合实现的情况下尽量不要使用继承
如图:
代码:
[cpp] view plain copy
01.//翅膀
02.class Wing
03.{
04.
05.};
06.
07.//鸟
08.class Bird : public Animal
09.{
10.public:
11. Bird() //构造需要初始化翅膀
12. {
13. wing = new Wing;
14. }
15.
16. void LayEggs(); //下蛋
17.private:
18. Wing *wing; //翅膀
19.};
5,聚合
简析:
聚合关系用空心菱形加实线箭头表示。聚合表示一种弱的 “拥有” 关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。比如大雁和雁群。如图:
代码:
//大雁
02.class WildGoose : public Bird
03.{
04.
05.};
06.
07.//雁群
08.class WindeGooseAggregate
09.{
10.private:
11. std::vector<WildGoose*> m_WildGoose; //大雁数组
12.};