版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
简述
在面向对象编程中,类之间有各种各样的相互关系,常见的有 泛化,关联,依赖,组合,聚合,实现。
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::vectorm_WildGoose; //大雁数组 12.};