1.用例图
用例图用于描述系统提供的系列功能,而每个用例则代表系统的一个功能模块。用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的需求功能,用例图对系统的实现不做任何说明,仅仅是系统功能的描述。
用例图包括用例(以一个椭圆表示,用例的名称放在椭圆的中心或椭圆下面)、角色(Actor,也就是与系统交互的其他实体,以一个人形符号表示)、角色和用例之间的关系(以简单的线段来表示),以及系统内用例之间的关系。用例图一般表示出用例的组织关系——要么是整个系统的全部用例,要么是完成具体功能的一组用例。如图BBS系统的部分用例示意图。
如上图:类图
2.类图
类图是最古老、功能最丰富、使用最广泛的UML图。类图表示系统中应该包含哪些实体,各实体之间如何关联(显示系统的静态结构)。类之间的有3种基本关系:关联(包含聚合、组合)、泛化(与继承同一个概念)、依赖
如上图:类图中类的表示方法
2.1 关联
客观世界中的两个实体之间总是会存在千丝万缕的关系,当把这两个实体抽象到软件系统中时,两个类之间必然存在关联关系。关联具有一定的方向性:如果仅能从一个类单向地访问另一个类,则被称为单向关联;如果两个类可以相互访问对象,则可以从学生访问老师,但从老师不能访问学生。关联使用一条实线来表示,带箭头的实线表示单向关联。
关联关系包括两种特例:聚合和耦合,它们都有部分和整体的关系,但通常认为组合比聚合更加严格。
1..*表示可以一个到多个
如上图:类之间的联系关系
2.2 泛化
泛化与继承是同一个概念,都是指子类是一种特殊的父类,类与类之间的继承关系是非常普遍的,继承关系使用带空心三角形的实线表示。
如上图:类之间的继承关系
2.3 依赖
如果一个类的改动会导致另一个类的改动,则称两个类之间存在依赖。依赖关系使用带箭头的虚线表示,其中箭头指向被依赖的实体。依赖的常见可能原因如下:
- 改动的类将消息发给另一个类
- 改动的类以另一个类作为数据部分
- 改动的类以另一个类作为操作参数
通常而言,依赖是单向的,尤其是当数据表现和数据模型分开设计时,数据表现依赖于数据模型。
如上图:JTable和DefaultTableModel之间的依赖关系
3.组件图
对于现代的大型应用程序而言,通常不只是单独一个类或单独一组类所能完成的,通常会由一个或多个可部署的组件组成。对java而言,可复用的组件通常打包成一个jar, war等文件。
组件图提供系统的物理视图,它的用途是显示系统中软件多其他软件组件(例如,库函数)的依赖关系。组件图可以在一个非常高的层次上显示,仅显示系统中粗粒度的组件,也可以在组件包层次上显示。
组件图通常包含组件、接口和Port等图元,UML使用带符号的矩形来表示组件,使用圆圈代表接口,使用位于组件边界上的小矩形代表Port。
组件的接口表示它能对外提供的服务规范,这个接口通常有两种表现形式。
- 用一条实线连接到组件边界的圆圈表示
- 使用位于组件内部的圆圈表示
组件除可以对外提供服务接口之外,组件还可能依赖于某个接口,组件依赖于某个接口使用一条带半圆的实线表示。