上大学的时候,UML建模语言这门课就天天以画苹果作例子讲解。现在毕业了,对这门课忘得差不多了,一提到UML就只记得画苹果…
UML包括以下几种图
- 使用案例图
- 类图
- 序列图
- 合作图
- 状态图
- 活动图
- 构件图
- 部署图
其中最常看见的就是类图了
上图的类图被分成四个部分,从上到下依次为,类名,属性,方法,性质。
类名:正体时表示具体类,斜体表示抽象,若为接口,可以加上<< interface >>。
属性:公有的使用+,私有的使用-,保护的使用#,权限符后接的是属性名称,再后面是属性的类型。
方法:同样使用+,-,#描述权限,冒号后接的为方法的返回值。
性质:其实相当于特殊属性,该属性拥有get,set方法。
类图的关系
一般化关系
画的不好,凑活看
使用实线三角箭头表示,对应到java语言中就是继承关系,或者是实现接口。在上图,Pet是被继承的类,所以用斜体表示类名。
在设计模式的类图层次结构中,叶子节点一定是正体,而分支节点一定是斜体,其实这不难理解,如果一个类不能被实现,那它一定是用来被继承的,而一个类不需要被继承,那他一定是用来实现的。
关联关系
对应到Java语言,就是Person类中含有Dog类的引用
聚合关系
是关联关系的一种,如Person和Clouthes是聚合关系,他们是整体和部分的关系。
合成关系
同样是关联关系的一种,但比聚合关系更强的关系,它比聚合关系多了一层:整体负责部分的生命周期,Dog和Leg就是合成关系,狗腿依存于狗。因此合成关系中,代表部分的对象不能被共享。
如果实在分不清关联关系、聚合关系和合成关系的区别,就索性使用关联关系代表就行了,聚合和合成就相当于继承自关联关系,用父类替换子类,这不是符合依赖倒转原则嘛…从这个角度想好像也对
依赖关系
依赖关系是类之间的连接,它总是单向的,如上图,一个人买一辆车,person调用Buy(Car car)方法,对应关系就是Person依赖Car。
简单来说,一个类的方法参数含有另一个类的引用,它们的关系就是依赖。需要注意的是,依赖的类属性不含有被依赖的类,否则他们的关系就是关联关系。