UML建模之类图总结
大学时期就学习过UML,可能很多同学一直没有用于工作和生产中,但是UML是一个非常强大的工具,能帮助我们理解作者的意图和思想,理解设计模式,理解核心逻辑,这个就像是武功秘籍一样,把招式套路先画个图,能对系统逻辑有个整体的了解,当前这个系统、功能模块或者是什么工具包,都有什么样的类结构,设计模式是怎样的,类与类之间的关系是咋样的,如果你有一个良好的程序设计习惯,那么一定要会UML建模。关于java的UML建模工具,我推荐使用Astah,做得很专业,很方便,还有社区版,是一款非常强大的UML建模工具。
1、概述
在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》(《UML精粹:标准对象建模语言简明指南(第3版)》)中有这么一段:“If someone were to come up to you in a dark alley and say, 'Psst, wanna see a UML diagram?' that diagram would probably be a class diagram. The majority of UML diagrams I see are class diagrams.”(“如果有人在黑暗的小巷中向你走来并对你说:‘嘿,想不想看一张UML图?’那么这张图很有可能就是一张类图,我所见过的大部分的UML图都是类图”),由此可见类图的重要性。
==类图==用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是==系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据==。
==类图(Class Diagram)==使用出现在系统中的不同类来描述系统的静态结构,它用来描述不同的类以及它们之间的关系。
2、类图的元素
在类图中一共包含了以下几种模型元素,分别是:类(Class)、接口(Interface)、依赖(Dependency)关系、泛化(Generalization)关系、关联(Association)关系、聚合(Aggregation)关系、组合(Composition)关系和实现(Realization)关系。本节介绍类、接口,下一节具体介绍各种关系。
2.1 类
在面向对象(OO) 编程中,类是对现实世界中一组具有相同特征的物体的抽象。包括名称、属性和操作。
2.2 接口
接口是一种特殊的类,具有类的结构但不可被实例化,只可以被实现(继承)。在UML中,接口使用一个带有名称的小圆圈来进行表示。也可以说,是在没有给出对象的实现和状态的情况下对对象行为的描述。
与类图不同,是顶部有一个《interface》显示:
也可以是一个空心圆表示:
3、类的关系
在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。
各种关系的强弱顺序:
泛化 = 实现 , 组合 > 聚合 , 关联 > 依赖
3.1 实现(Realization)
【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现,参考person与animal的关系
【箭头指向】:带三角箭头的虚线,箭头指向接口
【java表示方法】:implements
3.2 泛化(Generalization)
【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。参考student与person的关系。
【箭头指向】:带三角箭头的实线,箭头指向父类
【java表示方法】:extends
3.3 关联(Association)
【关联关系】:两个对象是强关联关系,一般来说,一个对象是以成员变量的方式,关联到另一个类中,这种关联关系比依赖要强很多,依赖主要是A类用到B类的方法,关联的话,可以理解为B类直接就是A类的某个属性。参考person与head的关系。
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者
3.4 依赖(Dependency)
【依赖关系】:依赖关系,就关系紧密性而言,没有关联那么强烈,例如person类关联了head这个类,依赖主要是强调的A类会用到B类中某个方法或者逻辑,来达到A的目的,入下图中的学生依赖笔一样,学生需要用笔来记录东西。参考student与pen的关系。
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者
3.5 组合(Composition)
【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如人和手是整体和部分的关系,没有人就不存在手。组合关系是比聚合关系还要强的关系,参考下面person和hand的关系。
【箭头及指向】:带实心菱形的实线,菱形指向整体
3.6 聚合(Aggregation)
【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如学生和班级是部分和整体的关系,学生离开班级仍然可以存在,参考如下AClass与Student的关系。
【箭头及指向】:带空心菱形的实心线,菱形指向整体