今天到新公司第二天,复习一下uml设计,总结一下。写代码就如写文章,需要一个大概的纲领和结构。uml图有两种类别范畴,结构图和行为图。通过uml图可以很清晰看出类的成员属性,方法,类与类之间的关系。把类的基本属性和类与类的基本关系梳理清楚了。才可以写出易扩展,更稳定的程序。同时其他别人也可以通过uml图很清晰的看出代码设计结构,类与类之间的关系。下面说一下常用的几种关系图。
1、继承关系
很明显,BlackDuck和RedDuck是Duck的子类。
2、聚合
聚合的意思是说Wheel类离开Car类可以独立存在,为什么这样说呢?首先汽车都需要轮子,当然了未来的汽车不好说。。。。。。。,但是买轮子的店里,轮子可以独立存在。这样说有点模糊,看下代码。
class car { public: wheel theWheel; }; class wheel { };
3、组合
对于组合的理解就是说,Duck和DuckEgg有相关的时序性问题,比如说鸭子蛋还在鸭子肚子里,还没生出来。鸭子就死了,这时鸭子在死亡的时候就要将鸭子蛋销毁了,这个状态下的鸭子蛋是不能独立存在的。而超市的鸭蛋和鸭子的关系就可以表示为聚合。看代码。
class Duck { public: DuckEgg theEgg; }; class DuckEgg { };
组合是表示一种整体和部分的关系,同样为鸭子和鸭蛋,但不同状态下,他们的关系就不一样。这也同时说明具体问题具体分析,我写这个总结只是想说明白uml常用几个序列图而已。
4、依赖
依赖是一种比较弱的组合关系,比如说汽车要加汽油,调用汽油的一种方法,这时就要能找到Gas这个类。代码如下:
#include "Gas.h" class car { public: SetCarGasVolue(Gas theGas); };
5、关联
单向关联
单项关联表示player知道dog的存在,player可以调用dog的所有属性和方法。并且没有生命周期的依赖,意思说player知道dog的存在,但是不负责dog的构造和销毁。具体代码表示为player类里包含dog的指针引用。代码如下:
class player { public: dog* m_dog; }; class dog { };
双向关联
双向关联就是player和dog相互可以调用对方的所有公共属性和方法。player和dog相互认识,代码表现为player和dog相互有对方的指针引用。代码如下:
class player { public: dog* m_dog; }; class dog { public: player* m_ower; };
6、时序图
时序图主要表示一个过程的图,上图是第一个步骤是玩家将自己信息发到gameserver,第二步gameserver去db查询,第三步db返回gameserver结果,gameserver验证后第四部返回给客户端结果。
常用的uml图就这些,用类图和序列图可以表达自己的设计思路即可。