《实用软件工程入门》——4 统一建模语言 UML
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《实用软件工程入门》
4 统一建模语言——UML
4.1 UML的基本概念
1997年11月国际对象管理组织(Object Manager Group,OMG)通过了UML 1.0版,这标志着一种建立在先进的面向对象技术基础上的建模语言标准诞生了。
4.1.1 UML概念
统一建模语言UML(Unified Modeling Language)是一种支持面向对象技术的建模语言,能够清晰地描述系统中的对象及其相互关系。
UML结合了当时三种流行的面向对象的建模方法:(1)Grady Booch的“Booch方法”;(2)James Rumbuagh的对象建模技术(OMT);(3)Ivar Jacobson的面向对象软件工程方法(OOSE)。
如今,UML已经是许多软件公司用于软件开发的主要工具之一,成为了现代国际软件业的标准。
4.1.2 建模的目标和本质
由于客观世界的复杂性,导致了用户不能准确地理解和描述一个将要开发的系统。通过建模可以使用户和开发者更好地理解系统本身。
UML系统建模的本质就是要为用户以及项目小组成员之间搭建一个交流的平台,如果没有这样一个平台,那么每个开发小组的成员只能按照自己的理解来构建这个系统。也就是说,通过系统建模可以有效避免个人理解的偏差对整个系统的影响。
一般的系统建模至少完成以下4个目标:
(1)帮助项目开发小组把系统的抽象结构可视化;
(2)帮助说明系统的结构和行为;
(3)提供一个指导建立系统的模版;
(4)记录项目开发小组的决策文档。
总之,UML不仅提供了用户和开发者都能理解的语言,更重要的是它可以提供一种与软件实现方法相一致的表示方法,即面向对象技术的表示法。
4.1.3 UML在软件开发中的作用
从严格意义上讲,UML并不是一个系统开发的方法,而是一种表示方法。它可以用来确定、显示和记录软件系统及其开发过程,而且通过UML建立的模型是十分精确和完整的。
UML在软件开发过程中的作用还体现在以下几个方面:
(1)UML是目前国际软件业公认的建模标准,统一了面向对象设计方法的标记;
(2)可以解释在面向对象的设计中曾出不穷的高级技术,如框架、协作和模式等;
(3)UML主要用于为软件系统构建模型,而且可以在开发的各个阶段使用。
4.1.4 UML的常用图概述
客观世界的复杂性决定了在进行系统描述时一种模型是不够的,UML就提供了9种不同而又相互联系的图:用例图、类图、对象图、活动图、序列图、协作图、状态图、组件图和部署图。
这9种图一般可以归纳为3大类:静态图——用于描绘系统的结构和功能,如类图;动
态图——描述系统中对象之间的相互作用关系,如活动图、状态图;结构图——把系统描述为运行的组件,可以区别执行节点和存储节点的位置等,如组件图、部署图。
(1)用例图
用例图定义了系统的外部行为,用于帮助用户理解和使用系统。以下是一个简单的用例图——“办事员进行订单的维护”(如图4-1所示)。
办事员
图4-1 用例图样例
图4-1中包含了用例图的两大类信息:活动者和用例。其中,UML使用人形(Stickman)的图标表示活动者,它可以是一个人或系统;用例则是一个椭圆形;在活动者与用例、用例与用例之间可以用带箭头的线表示它们之间的关系。
(2)类图
类是面向对象程序设计中的重要概念,类是对象的抽象,它的定义包括数据成员与方法。类图是同过分析用例图中的事件流而获得的类的关系图。而且类图也是UML的一个最终产品。
常见的类有:实体类、接口类和控制类等。具体构造类图的过程将在4.2节阐述。以下是一个说明继承关系的类图,其中(如图4-3所示)
图4-2 类图示例
(3)对象图
对象图是由类图演化而成的,不同之处在于对象图是类图实例化后的结果。对象图反映的不是真正的类,而是反映系统在执行到某一特定位置时各部分工作的状况,即系统快照图。对象图一般用于描述系统运行的例子。
(4)活动图
活动图是用于反映系统中对象的连续交互活动。一般来说,活动图常用于描述某个操作执行的情况。活动图是由各种动作状态组成,动作状态以圆边矩形的形状表示,它们之间以箭头链接,如图4-5反映了计算机打印的过程。
图4-3 活动图示例
(5)协作图
协作图也是用来显示对象在系统中的动态协作,但它更侧重角色,而不是反映消息的时序关系。用户在建模时可以选择序列图或协作图中的任意一种用于表示对象间的动态关系。图4-4是反映打印过程的协作图。
图4-4 打印过程的协作图
(6)序列图
序列图描述了对象之间的相互作用,以及对象之间发送交互信息的时机。一般序列图按时间顺序自上而下进行组织,操作中的对象按照消息发生的次序自左向右排列。以下就是一个旅客预定房间的序列图(如图4-2所示)
图4-5 饭店预定序列图
序列图中每一个对象显示为一个垂直列,
(7)状态图
状态图是用于显示每个类的生命周期,它描述了特定对象的所有可能状态,以及状态之间发生的转移。因此状态图一般由状态和转移组成,并附属于特定的类或对象。例如,图书对象在图书馆中的状态变化(图4-6所示)。
图4-6 图书对象的状态图
(8)组件图
组件图用来反映代码的物理结构。一般分为3类:源代码组件、二进制文件组件和可执行文件组件。例如,下面的组件图(图4-7所示)反映了一个绘图程序中涉及的各部分之间的结构关系。
图4-7 组件图示例
(9)部署图
部署图用于描述系统在运行中软件和硬件的物理架构。它可以显示计算节点的拓扑结构和通信路径以及节点的软、硬件配置,这一点,特别对于分布式系统尤其重要。下面是一个网站部署图的例子(图4-8所示)。
图4-8 网站部署图
4.2 UML的设计过程
目前,支持UML的工具软件有很多,如,Rational Rose,Together和Microsoft Visio2003等等。
本节将按照软件系统开发的步骤详细讲述UML的设计过程。
4.2.1 项目规划与用例分析
在软件开发的开始阶段,项目规划是一个最基本的工作。一般的项目规划要考虑一下几个方面的问题:第一,系统必须支持的特性有哪些?第二,实际使用时会影响系统的各种因素?第三,系统必须注意和相应的事件?第四,项目有哪些的局限性和风险?
下面我们针对一个小的示例项目具体说明项目规划以及用例分析的过程。
(1)项目的简要说明
“销售系统”是一家小型电子产品公司的销售管理的软件。该软件提供的服务是客户通过“销售系统”下订单订购电子产品,公司收集这些订单后,从供应商处提出产品再由专门的配送人员送货上门。同时,系统还应提供订单的内部管理等机制。
(2)项目规划
项目规划是开始阶段十分重要的内容,通过项目规划,可以列出“销售系统”的常见事件、用例和体系结构。
下面是一种比较常用的项目规划模版,表4-1是针对“销售系统”的项目提出了几个关键问题。
表4-1 项目规划常见问题