UML基础
定义
UML是统一建模语言( Unified Modeling Language),也是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
- 统一是由UML的历史决定的,大体是指UML结合了两个大牛的想法,合成为一个统一的方法。
- 建模就是建立模型,是为了理解事物而对事物做出的一种抽象,一般用来从宏观上研究某些系统的因果关系或者相互关系。UML的M代表了对软件系统的建模。
- 语言说明UML的目标是为了交流,特别地,用于涉及软件开发的人员之间的交流,并且这种交流因UML而成为一种写在文档上的可视化交流。同汉语中的汉字、英语中的字母等类似,UML也有用于表达语义的标准的基本语言符号。
分类(基于UML2.2)
- 结构性图表
用于显示系统在不同抽象层析和实现层次上的静态结构以及他们之间的相互关系。其中的元素表示系统中有意义的概念,可能包括抽象的、现实的、合作的概念。强调系统式的建模。
这种类型包含七种图表:类图、组件图、部署图、对象图、包图、复合结构图、轮廓图。
- 行为性图表
用于显示系统中对象的动态行为,表达系统随时间的变化。强调系统模型中触发的事件。
这种类型包含七种图表:用例图、活动图(泳道图)、状态机图、序列图、通讯图、交互概念图、时序图。
UML类图
本文的主要内容是基于java语言,因此在介绍类图的一般知识外,会特别介绍适用于java的类图。
类图是一切面向对象方法的核心建模工具。由于类图是一种结构性图表,因此它符合结构性图表的一般定义,即用于描述系统中对象的类型以及它们之间存在的各种静态关系。
类图在java中用于表示类、接口、对象实例等之间相互的静态关系,其中类、接口的定义等是UML中的静态结构,用方框表示。实例继承类、实例实现接口等是UML中的相互关系,用实线、虚线、空心三角、箭头等表示。
单个类的表示
整个类用分为三部分的矩形框表示,上面一块表示类或接口的名称,中间一块表示类或接口的成员变量,下面一块表示类或接口的方法。
-
第一部分可有三种方式:1、一般类 2、接口(接口名上面使用 <<>> 表示)3、抽象类(斜体书写)。
-
第二部分主要是定义成员变量,声明变量的访问权限、名称和类型,格式: 访问修饰符 变量名:数据类型
-
第三部分定义诚成员方法,声明方法的访问权限、名称和类型,格式: 访问修饰符 成员方法名([ 形参列表 ]):[ 返回值类型 ]。特别地,如果方法是抽象方法,则用斜体表示,同时类也用斜体。
成员变量和方法可使用下面的修饰符:
- 加号(+):表示公有的(public )
- 减号(-):表示私有的(private)
- 井号(#):表示受保护的(protected)
- 波浪号(~):表示默认的(default / package)
- 下划线( _ ):表示静态的(static)
下图是一个类图例子,仔细观察,会发现图中有一处错误。
类之间的关系
-
继承或实现(空心三角箭头 + 线 )
- 三角箭头方向
子类指向父类,实现类指向接口。 虽然先有父类作为基类,但是因为父类无法得知有多少子类,而子类因为要使用extends继承父类,子类明确知道父类定义,只有知道对方信息时才能指向对方,因此应有子类出发,指向父类。同样地,应该由实现类指向接口。 - 连线
实线表示继承 虚线表示实现。实线表示不虚、很结实,有一个父类实体,因此表示继承父类。 虚线表示没有实体,接口没有实体,因此表示实现接口。
- 三角箭头方向
-
关联或依赖(箭头 +线 )
- 箭头方向
由发起者指向接受者 - 连线
虚线-依赖:临时用一下,关系不强,依赖这个词的中文含义就不是强连接关系,强调了一方需要另外一方。在java中表示使用关系,一个类需要借助另外一个类来实现功能。一般是一个类被另外一个类当做参数或者返回值使用。
实线-关联:关系稳定,实打实的关系,用实线,关联的中文含义比依赖表示的连接关系强。表示一个类对象和另外一个对象关联,一般是一个类中有另外一个类作为属性(成员变量)。 - 依赖可以说是一种偶发事件,不是必然关系。关联则是一种类之间的比较明显的关系。依赖比较陌生,关联比较熟悉。
- 箭头方向
-
组合或聚合(菱形 + 箭头 + 实线)
-
箭头方向:这两种方向同上面四种方向思路有点不一致,组合聚合是由整体指向个体。
-
空心菱形-聚合: 空心是个空盘子,可以装一堆相同的东西。聚合的中文含义也表示一堆东西聚在一起。群体与个体的关系,两者有独立的生命周期,是has a的关系。
-
实心菱形-组合:已有结构上的某种组件。组合的中文含义也表示把零部件组装成一个大部件。整体与局部的关系,两者具有相同的生命周期,是contains-a的关系
在组合关系的类图中,某一端上的数字表示这一端的类的数量,其中
-
0…1 : 0或1个实例
-
0…*: 0或多个实例
-
1…1 : 1个实例
-
1 : 只有一个实例
-
1…* : 至少有一个实例
可以看到上面数字之间的两个点表示 或 的语义,* 表示全部的语义。
-
-
类图实例
- 上图是使用UML的标准符号完成的一个实例,在IDEA中,对类图的绘制有一些符号上的不同,需注意两者之间的对比和关联。
- 在棒棒糖表示法中,圆糖一侧为接口名称,另外一侧为实现类.
UML时序图
定义
用于显示对象之间交互的图,这些对象是按时间顺序排列的。包括的建模元素主要有: 对象、生命线、控制焦点、消息等
时序图实例
下图是一个简单地类图和时序图之间的对应关系,类的方法调用会产生一系列动作。