1.1 模型
为了更好地了解一个过程或事物,人 们通常根据所研究对象的某些特征(形状 、结构或行为等)建立相关的模型( Model) 。模型是从一个特定视点对系统进行的抽象,它 可以是实物模型,例 如 建 筑模型、教学模 型、玩具 等,也 可以是抽象数字或图示模型,例如数学公式或图形等。模型建立的目的不是复制真实的原物,而是帮助人们更好地理解复杂事物的本质,反映过程或事物内部各种因素之间的相互关系。所以 ,模型是对复杂事物进行的有目的的简化和抽象。在开发软件的过程中同样需要建立各种各样 的软件模型。
1. 2 开发软件为什么需要模型
在开发软件的过程中,开发者在动手编写程序之前需要研究和分析软件的诸多复杂和纷乱的问 题。例如,用户需求的 准确描 述问题、功能与功能之间的关系问题、软件的质量和性能问题、软件的结构组成问题、建立几十个甚至几百个程序或组件之间的 关联问题等。所以,软件系统的开发是一个非常复杂的过程,它们的复杂程度不比任何一项大型的复杂土木建设工程逊色。但 是,在这个 复杂的开发过程中,人们最关注的还是开发者之间的交流问题。
软件开发中消除技术人员与非技术人员(用户)之间、使用不同技术的开发人员之间、不同功能使用者之间等的交流障碍是软件开发 成功的关键。直观的软件模型将有助于软件工程师 与他们进行有效地交流。
在软件的需 求分析中,用户和系统 所属领域的专家更熟悉将要构建的系统 的功能,他们被称 为领域专家 ( Doma i n E xper t ) 。他们提出软件系统 在这 个领域中所需要具有的功能。所以,软件设计者可以通过建 立需求模型来 实现技术人员 与非技术人员(用户)之间的交流。
在软件的设计中,设计人员首先要把描述系统功能需求的自然语言形式转化为软 件程序的形式,在这个转化过程中,设计人员要借助许多模型来完成最终的程序设计 模型。这些中间辅 助模型包括系统的行为模 型、对象的状态和行 为模型等。如果这些模型都是严格遵循统一建模语言标准而建立的,那么,无论开发人员具有多么不同的开发条件和技能 ,他们都可以 理解软件设计,并且进行有效交流。
在软件的实施 、测试和部署中,模型为不同 领域的技术人员 在软件和硬件的实施、测试和部署中提供有效 的交流平台。
最后,要强调的是,在各 种各样的软件中,软件模型是最有效的软件文档保存形式,软件模 型在开发团 队人员的培训、学习和知识的传递与传播等方面起 着非常重要的作用。
所以 ,软件开发中需 要建立需求( Requirement ) 模型、问题域( Domain ) 模型、设计(Design) 模型、实施( Implementation) 模型、测试( Tes t ) 模型和部署( Deployment ) 模型。可见 ,在系统 开发生命周期中,需 要从多角度来建立模型才能全面、准确地分析和设计软件系统。
1. 3 什么是统一建模语言
软件模型有多种表达方式或语言。但是,开发者们经过多年的实践发现,相对于以数学为基础的体系结构描述语言( Architecture Description Language , AOL ) 来说, 以 图 形 符 号 ( Graphical Notation ) 为 基 础 的 统 一 建 模 语 言 ( Unified Modeling Language , UML) 描述软件模型既简单又清晰。
统一建模语言是由一系列标准的图形符号组成的建模语言,它 用 于描述软件系统分析、设计 和实施中的各种模型。UML的定义有两个主要组成部分: 语 义和表示法。UML的语义用自然语言和对象约束语言( ObjectConstraint Language , OCL ) 描述, UML的表示法定义了 UML的可视化标准表示符号,这决定了 UML是一种可视化的建模语言。这些图形符号和文字用于建立应用级的模型,在语义上,模 型是元模型( Metamodel) 的 实 例 。 元 模 型是定义 表达模 型 所用 语言 的模 型,它 定 义了UML模 型 的 结 构。 此 外, U ML 的 定 义 还 给 出 了 语 法 结 构 的 精 确 规 约( Specific ation) 。对于一般建模者,应 重点掌握基本的概念与表示法,并 熟 练运用它们 ,这正是本书的 目的。
图 1-1 给出了 UM L 中各种图的分类。
图 1-1 展示了 U M L 的图示建模工具,被分为两大类共 13 种图形。
第一类是结构图。在结构图中,UML2.0有 6种图示建模工具: 类 图 ( Class Diagram ) 、构件图 ( Component Diagram ) 、对象 图 ( Object Diagram ) 、复合结构图(CompositeStructure Diagram) 、部署图( Deployment Diagram) 和包图 (Package Diagram) 。
第二类是行 为图。 在行 为图 中,UML 2. 0 有 7 种图示 建模工具: 活 动图 ( Activity Diagram) 、用例图( UseCase Diagram) 、状态图( State Diagram ) 以及 4种交互图(Interaction Diagrams )—— 顺序图( Sequence Diagram) 、通信图 ( Communication Diagram ) 、交互综 合图 ( InteractionOverview Diagram) 和时间 配 置图 ( Timing Diagram) 。

图1-1 uml图的分类
1. 4 UML的发展史
自从对象管理组织( O b je c t Management Grou p , O M G ) 采纳 U M L 作为其标准建模语言以来,U M L 得 到了广泛的应用,并 在世界范围内成为事实上的建模规 范。图 1- 2 简要描述了 U M L 的发展史。
O M G 是一个推广面向对象技术的非盈利性国际组织,称为对象管理组织 ,目 标是通过网络为独立开发的应用软件建立一个相互之间互操作性的标准。O M G 的成员已包括绝大多数信息技术公司和终端用户,其核心任务是接纳广泛认可的对象管理 体系结构( O b」e ctM a na ge m e n t Architecture, OMA)或其语境( Co n te x t ) 中的接口和规程的规范。

图1-2 uml发展史
从 1989年到 1994年,建模 语 言 的 数 量已经从不到十种增加到了五十多种,20世纪 90年代中期出现了一批新方法,其中最引人 注目的是 Booch 提出的 Booch' 93、 Jacobson提出的 OOSE方法和 Rumbaugh等人提出的 OMT方法。1995年,Booc h 和 Rumbaugh决定将他们各自的方法结合起来成为一种方法。1995 年 10月发布了第1个版本,被称作“统一方法” ( Unified Method 0. 8 ) 。一年之后 Jacobson加入其中,结合 了 Booch、OMT和 Jacobson方法的优点,统 一了符号体系,并 从 其 他的方法和工程实践中吸收了许多经过实际检验的概念和技术,于 1996年形成了 UML0.9。由于统一的符号体系只是一种建模语言,而不是一种建模方法,所以 自 0.9版起 ,改称 “统一建模语言“ ( UnifiedModeling Language ) 。在此过程中,由 Rational公 司发起成立了UML伙伴组织。开始时有 12 家公司加入,共同 推出了 UML1. 0版,并 于1997 年 1月提交到对象管理组织( OMG) ,申请 作 为一种标准建模语言。此后,对 UML进一步做了修改,产生了 UML1. 1版。1997年 11月,O MG正式采纳 UML1. 1作为建模语言规范 ,然后成立任务组进行不断地修订,并 产 生了 UML1. 2、1. 3和 1. 4版本,其中UML1. 3是较为重要的修订版。
UML 1. X 基本上是为分析和对小规模软件系统建模而设计的。 UML 2. O 在2003年 6月被推荐采用,完 成了这个工业标准建模语言的一次大的升级。新的 UML 2. 0更加适合系统工程师和软件开发人员所面临的日益复杂的大型软件系统的挑战。它具有更好的扩展性,在基 于构件和系统行 为建模 方面提供更 强的支持 。
1.5 模型驱动的软件构架
"Write Once, Run Everywhere" ( WORE ) ,是 Sun Microsystems为宣传 Java语言的跨平台特性 而提出的 口号。Sun Microsystems的目的是让一个 Java程序可以 在不同的 操作系 统 上 执行,使 Java成 为 平 台无关性 语言 ( platform independent language)。但是Java语言并不能代替所有其他开发语言,在开发软件时,软件工程师除了要考虑解决功能需求问题,还 要关注开发语言与系统环境间的整合问题。OMG 的模型驱动的软 件构架 ( Model Driven Architecture , MDA )的目的就是利用建模语言创建模型,并且由模型驱动自动生成可执行程序。在MDA 下,软件工程师关注的是平台无关模 型( platfo rm independent model) ,而不是 执行系统的具体技术。
1.5.1 MDA的 三种模型
MDA 是一种基于建模的软件构架,MDA 构架通过建立三种模型达到模型驱动自动生成可执行程序的目的。
(1 )计算无关模型 ( Computation Independent Model,CIM) : 用于建立业务需求、流程和规则等业务模型。这些模型与系统逻辑运算 和平台无关,所以被称 为计算无关模型。一般用 UML 的用例图和活动图 描述。
( 2) 平台无关模型( Platform Independent Model, PIM ) : 是从业务流程中抽象出的逻辑运算 。PIM 不包含与系统执行 环境和技术相关的特定信息, 所以 P IM 被称为平台无关模型。一般用 U ML 的类图 ,状态图 ,顺序图描述。
( 3 ) 平台特定模型( Plat form Specific Mod el , PSM): 是从相应 PIM 转换而来,它不仅包含 P IM 的逻辑运算 ,也包含系统执行环境所 需要的相关技术应用。所以 PS M 被称为平台特定模型。P IM 可以被转换为多种多样的 PSM ,一般有 J ava / EJ B,CORBA, XM L/ SOAP 等模型。
在 MDA 下,C IM 可以驱动产生P IM, P IM 可以转换产生 PS M , PS M 可以自动 产生系统可执行程序(见图1-3) 。MDA 是基千 OMG 定义的一系列建模标准和规范来实现的 ,这些标准和规范解决了 MDA 模型 CC IM , PIM 和 PS M ) 的建立、扩展、交换、转换等技术问 题。

图1-3 MDA的模型和模型之间的转换
1.5.2 MDA的三个核心建模标准
MD A 的三个核心建模标准是:
(1 ) 统一建模语言( U M L ) 是 M D A 使用的主要建模语言。由于 U M L 已经在面向对象分析设计中广泛应用,所以,O M G 把 U M L 作为 M D A 中建模的主要标准。虽然 UM L 可以用来定义 M D A 中的各种模 型,但是,M D A 并不要求必须使用 U M L。
( 2 ) 元对象机制( MetaObjectFacility , MOF ) 是 MDA用于定义模型的标准。它不仅使 UML在今后的 扩展中有依据的标准,同时也是建立任何新的建模工具和元数据仓库(如CWM ) 的标准。MOF的标准是 UML一系列标 准中的一个子集—— 类图( ClassDiagrams ) 。 MDA要求必须 以 MOF标准作为所有 MDA元模型的标准。
( 3 ) 公共仓库元模型( C o m m o n W are house Metamodel , C W M ) 对企业各种数据模型进行了全面和完整的标准化,并且定义任何两种数据模型之间的映射规则。CW M 使得企业具有跨数据库,甚至跨行业之间的数据挖掘能力。M D A 使用 U M L进行系统建模 ,MDA 使用 CWM 进行数据建模。
1.5.3 OMG的 4层模型结构
OMG把模型分 为 4 层(见 图 1-4 ) : M3层是 元--元模 型层 ( meta- metamodel layer ) ; M2层是元模型层( metamodel layer); Ml 层是模型层( model layer) ; MO层是运行层( run- timelayer) 。

图l-4 OMG的4层模型结构
M3 模型的目的是定义 M2 的元模 型。在这层中只有一个元-元 模 型就是 MOF 模型。M2 模型的目的是定义 Ml的模型,在 这层有很多种元模型,如 UML和CWM。Ml 模型的目的是定义各种数据和类。 MO 模 型的目的是表现系统执行时数据和对象。从图 1-4 可以看出,MOF 是 M DA 基础标准。
1.6 UML的建模对象
UML 是一种有效的面向对象分析和设计的建模工具,那 么 如 何 在面向对象编程方法中应用 U ML 图形进行软件建模呢?在回答这个问题之前,必须 先 了 解软件开发过程中都需要建立哪些软件模型,即 U ML 的建模对象是什么 ,然后,才能有的放矢地选择相应的 U ML 建模图形工具为软件建模。
在软件的生命周期中,软件有两种存在形式,即静 止状态和运行状态。UML 提供的建模图可分为结构和行为两大类型,所以,在软件开发的分析和设计时,需要从 三个方面来考虑建立软件模型,如表 1-1 所示。
(1 ) 静止状态下的结构。
( 2 ) 运行 状态下的结构。
( 3 ) 运行 状态下的行为(或功能)。

1.6.1 UML的结构模型
软件不只具有一种结构,就 像一座建筑一样 ,包括起 支撑作用的框架结构 ,进排水用的管道结构,电 力和通信用的线路结构,起 隔 离作用的坚壁结构等。从软件整体角度看 ,也 称 软件为软件系统 ,根据对软件系统的关注角度不同 ,软件 系统结构 也 有 多 种 不 同 的 表 现 形 式。 表 1 -2 给 出 了 用 于 表 达 不 同 结 构 的UML 图。

1 、静止状态下的 结构
当软件处于逻辑设计阶段时,人们关注的是软件系统的组 成结构。根据组成单位的不同,软件系统 组成结构可以分为构件( Co mponent ) 结构和类( Class ) 结构, 所以 ,可以 用构件图( Co mpo ne nt D i ag ra m) 和类图( Class Diag ra m) 来建立 这两种结 构模型。
当软件处于物理部署阶段时,人们关注的是软件程序在计算机硬件系统中的物理分布和部 署方法,这时需要的是软件系统的部署结构,U ML 的部署图( Deplo ym en t Diag ra m)用来解决这类建模问题。
2. 运行 状态下的 结构
当软件处于运行状态时,人们关注的是软件系统 在运行时某一瞬间的状态。软件在运行时,组成 软件的 基本单位类( Class ) 是以对象( O bject) 的形式存在的,这时,软件系统 的瞬间状态模型以对象结构模型的形式表达,可以选用对象图(O bject Di ag ra m ) 来建立系统在运行状态瞬间的结构模型。
1.6.2 UML的行为模型
软件只有 在运行时 才有行 为(即功能)。软件系统行为的表现形式是不同的: 与软件功能相关联的行 为是系统行为 ,与对象相关联的行为是 对象的行为,与对象某一行为的内 部执行逻辑相关联的行为是逻辑行为。表 1-3 给出 了用于表达软件系统运行状态下不同行为的U M L 图。

1. 系统行为
系统在运行状态下的行为是由用户提出的需求决定的,将用户目标链接到系统设 计是非常重要的。在系统开发过程中,用例 描 述 了 各种情况下系统的行为和系统响应其中一个相关人(系统的主要参与者)的请求时的行为,也 就是说,用 例用于发现系统的行为。一个系统拥有许多用例,UML的 用 例 图 用于为系统行为所涉及的诸多的用例建立相互关联的模型。但是,UML用 例 图 不等于用例,用 例 图 并 不 描 述具体系统行为,将 在第 2章 详 细讲述。
2. 对象行为
在运行状态下 ,系统行为的实现是由对象行为的协同作用综合表现的。每个对象都有多种行为,如何完整全面地确定一个对象全部可能的行为呢? 这个建模问题需要应用 UM L 的顺序图或通信图来解决。当对象的行为是在一种状态下实现的,则 应 用U M L的 顺 序图或通信图就可以描述对象的所有行为了,但是,如果对象的行为随着对象状态的变化而变化,U M L 的 顺 序图或通信图就遇到了局限性,这时需要应用U M L的状态图来全面地分析该对象所有可能发生的状态以及在每种不同状态下相应的行为。
3. 逻辑行为
软件系统和其对象可能是一个简单的动作( Actio n ),也可能是由一系列动作组成的一个活动( A ct i vi ty) ,这种活动通常可能涉及在一 系列条件的限制下与多个其他对象的信息交流的过程。这种具有复杂逻辑活动的行为称为逻辑行为,可以应用 UM L 的活动图( Act ivit y Diag ra m) 来为该行为建模。
1. 7 总 结
UML是一种建模语言,具 有广泛的应用领域,它 不 仅可以应用于软件领域的建模,也可以用于非软件领域的建模,例如,在企业管理中,对企业的组织结构、工作流程 和工艺设计的建模等。另外 ,UML不 是 一 种开发方法,它 是 独立于任何软件开发方法之外的语言。利用它建模时 ,可遵循任何类型的建模过程。
UM L 特别适用于以面向对象分析和设计作为软件开发方法的建模。UML 建模活动可能是从办公室的白板或桌子上的白纸上画UML草图开始的,然后建模者会用他们画出的 UML 模型图与其他的相关人员交流,当他们认为所 建的模型是正确的之后,他们才会坐下来根据模型图的要求进行编码的工作,这样在编写代码时就不会出 现严重的逻辑错误。
软件工程的研究和实践证明,在提高软件工程的质量、降低软件开发的风险、处理复杂的功能需求、建立有效的开发平台等诸多软件开发中的关键问题方面,U ML 建模是非常有效的方法。

