UML(Unified Modeling Language)统一建模语言
官方网站:http://www.uml.org/
建模是在编码之前进行的设计工作,一般常用于需求分析中,而且在软件功能设计方面也能起到很大的作用。
模型可以提高抽象层次,可以屏蔽或隐藏软件编码上的细节,使得在软件开发前对软件具有宏观把控。
当然UML也不一定是在软件开发前就画好的,很多编译器,比如IDEA、Eclipse等,都有插件可以将java类直接生成对应的UML类图。而常用的UML建模工具,比如Rational Rose,也是具有直接将UML类图转化为java代码的能力的。
UML显然可以是和平台无关的,也可以是和平台有关的。
面向对象建模通常有三种模型,分为对象模型、动态模型、功能模型
(1)对象模型:描述系统的数据结构;
(2)动态模型:描述系统的控制结构;
(3)功能模型:描述系统的功能。
其中对象模型是最基本、最重要的
UML目前最新版本为UML 2.5.1
其包括十三种图表,分成三类
类别 | UML图 |
结构图 | 类图,对象图,组件图,复合结构图,封装图,包图 |
行为图 | 用例图(在需求收集期间由某些方法使用); 活动图和状态机图 |
交互图 | (所有这些都来自更一般的行为图)—— 序列图,协作图,时序图和交互概述图 |
每种图下面仅做简单介绍,深入学习请前往W3CSchool等学习网站,以下图片及相关资料来自W3CSchool(侵删)
1、类图(Class Diagram)
用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型
本图为:订单类图
我的理解:类图描述了各个类(接口)的内部方法、成员变量的设计,以及类(接口)之间的逻辑关系
2、对象图(Object Diagram)
① 对象图和类图一样反映系统的静态过程,但它是从实际的或原型化的情景来表达的;
② 显示某时刻对象和对象之间的关系。一个UML对象图可看成一个类图的特殊用例,实例和类可在其中显示;
③ 对象图是类图的实例,几乎使用与类图完全相同的标识;
④ 由于对象存在生命周期,因此UML对象图只能在系统某一时间段存在
本图为:订单管理系统对象图
我的理解:对象图和类图在表现形式上很类似,他们的关系很类似进程和程序的关系,即一个类在类图上只能出现一次,但是一个类却可以有很多个实例对象出现在对象图中,他们在UML图里的画法也很类似,可以注意的是,对象图的最上面一栏的写法是:对象名:类名
3、组件图(Component Diagram)
① UML 组件图又称为构件图,他描述的是在软件系统中遵从并实现一组接口的物理的、可替换的软件模块;
② 组件图 = 构件(Component)+接口(Interface)+关系(Relationship)+端口(Port)+连接器(Connector);
③ 组件图给提供了将要建立的系统的高层次的架构视图,这将帮助开发者开始建立实现的路标,并决定关于任务分配及(或)增进需求技能;
④ 组件图不描述该系统的功能,但它描述了用于使这些功能的组件;
⑤ 组件图的目的概括如下:
- 可视化系统的组成部分;
- 构建的可执行文件,使用正向和反向工程;
- 描述的组织和组件的关系。
注:W3CSchool的组件图似乎不太正确
本图为:机房收费系统组件图
我的理解:组件图是架构师在初期就要设计好的图,主要描述软件部分物理组成,就是抽象层次很高的类(或一组类)与类(或一组类)的关系描述。
4、复合结构图(Composite Structure Diagram)
复合结构图是显示类元的内部结构的图,包括其与系统其他部分的交互点。它显示了部件的配置和关系,它们一起执行包含类元的行为。
5、包图(Package Diagram)
Package可以类似理解为Folder,即文件夹,包图也就是描述项目类似文件夹的这种结构的模型
6、用例图(Use Case Diagram)
① 用例图捕捉了模拟系统中的动态行为,并且描述了用户、需求以及系统功能单元之间的关系。
② 用例图展示了一个外部用户能够观察到的系统功能模型图。
③ 用例图由主角,用例和它们之间的关系组成。
7、部署图(Deployment Diagram)
① 部署图描述的是系统运行时的结构,展示了硬件的配置及其软件如何部署到网络结构中;
② 部署图通常用来帮助理解分布式系统,一个系统模型只有一个部署图;
③ 部署图用于可视化的软件组件部署的系统中的物理组件的拓扑结构。
8、活动图(Activity Diagram)
活动图是用来显示消息流从一个活动到另一个活动的图
活动图只能由一个开始元素,可以有多个结束元素
9、状态机图(State Machine Diagram)
状态机图对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序
10、序列图(Sequence Diagram)
① 序列图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。
② 消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。
11、协作图(Communication Diagram)
协作图是动态图的另一种表现形式,它强调参加交互的各对象结构的信息。协作图是一种类图,它包含类元角色和关联角色,而不仅仅是类元和关联。协作图强调参加交互的各对象的组织。
12、时序图(Timing Diagram)
时序图是用来显示交互的UML交互图,当图的主要目的是为了解释时间。时序图关注条件的变化在时间轴中沿直线的生命线。时序图描述个体量词和量词行为相互作用,注重在模拟条件下的生命线事件引起变化的时间。
13、交互概述图(Interaction Overview Diagram)
① 交互概述图是将不同交互图衔接在一起的图,属于UML2.0的新增图。交互概述图并没有引入新的建模元素,其主要元素来自于活动图和时序图。交互概述图侧重从整体上概览交互过程中的控制流,包括交互图之间的事件或消息流。
② 当前交互概述图主要应用于活动图与时序图之间的协作,主要有两种形式:交互和交互应用,前者适用于控制流相对简单的场景,后者适用于控制流相对复杂的场景。