目录
UML类图是什么
看下网上的定义,个人觉得比较到位
在UML的静态机制中类图是一个重点,它不但是设计人员关心的核心,更是实现人员关注的核心。建模工具也主要根据类图来产生代码。类图在UML的9个图中占据了一个相当重要的地位。James Rumbaugh对类的定义是:类是具有相似结构、行为和关系的一组对象的描述符。类是面向对象系统中最重要的构造块。类图显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。类加上他们之间的关系就构成了类图,类图中还可以包含接口、包等元素,也可以包括对象、链等实例
以前写代码,大部分时候只关心实现,很少去建模设计,也不太了解UML。最近一年来,公司无论任何项目对这方面都有要求,必须有系分文档:系统依赖关系,领域模型,类图,用例图,数据库设计,时序图,流程图等。慢慢的有了一些了解
至此,先看看java的类图,这个其实对设计模式很有帮助
一个好的工具是好的开始
类图不仅是给开发看的:架构师,开发,测试,项目相关人员都有可能涉及。
推荐一个工具VP:Visual Paradigm
下载地址:最好的 UML,SysML 和 ERD 工具 [永久免费,立即下载]
类的定义
定义一个动物类:Animal
这里可以看到一个类的基本定义,第一格是名称:Animal,第二格是字段属性:size,color,第三格是方法:eat(),返回值是void。
其中的权限控制有3种:
- public:对应+
- protected:对应#
- private:对应-号
类的关系
类图中非常重要的就是类之间的关系,否则几个孤独的类放在那里也没有什么作用。
类的关系:
- 泛化(Generalization)
- 实现(Realization)
- 依赖(Dependence)
- 关联(Association)
- 聚合(Aggregation)
- 组合(Composition)
泛化
泛化关系在JAVA中也叫作继承关系。比如Fish,Dog都继承自动物Animal
在UML中用空心三角形+实线表示,箭头指向被父类
实现
实现关系java中表现为接口的实现。比如动物都要呼吸,Dog用肺,Fish用腮
首先接口与类的定义的不同的是,用<<Interface>>表示;用三角箭头+虚线球,箭头指向接口
依赖
依赖关系是一种很弱的关系,一般是指一个类使用另一个类。比如狗拿耗子,猫不高兴,为获取其欢心,狗把耗子还给猫。这种是偶然发生的,两者之前没有关系,之后也不会有关系,只有在这个动作下才有关系。
在Dog中有一个方法payBack,为归还耗子,类似实现可能为如下
public class Dog extends Animal {
private Cat cat;
public Mouse payBack(Mouse mouse) {
return cat.recive(mouse);
}
}
用箭头+虚线表示,箭头指向被依赖对象
关联关系
关联关系是一种比较强的关系,他们的关系是比较持久的,稳定的。比如动物都要进食,狗吃狗粮
其中关联关系又可以分为单向关联与双向关联。上面是单向关联,狗知道狗粮,狗粮是不知道。
但是猫吃老鼠,双方都能感知对方,这个时候就是双向关联。
用实现连接
聚合
聚合关系是一种特殊的关联关系,聚合关系强调的是整体和部分的关系,其中部分可以脱离整体而存在。比如,几只狗组成一个单身狗群,这个群与每只狗的关系就是聚合。
聚合用实线+空心菱形表示,箭头指向整体
组合
组合关系也是一种特殊的关联关系,它与聚合关系很像,也是强调整体与部分的关系,不同的是部分无法脱离整体存在。
比如狗有腿,狗腿子是不能单独存在的。
用带实心的菱形直线表示,其中菱形指向整体
这几种关系到这里也就差不多了,其实会发现,依赖、关联、聚合、组合这几种关系强度是越来越强的:组合>聚合>关联>依赖
结束
通过上面的介绍,我们来看一下完整的类图