发信人: chivalry (L.G), 信区: Npsos
标 题: UML概述
发信站: 哈工大紫丁香 (2003年03月26日04:37:08 星期三), 站内信件
1 UML简介
统一建模语言(UML)是一个通用的可视化建模语言,用于对软件进行描述、可视化处
理、构造和建立软件系统制品的文档。它记录了对必须构造的系统的决定和理解,可用于
对系统的理解、设计、浏览、配置、维护和信息控制。UML 适用于各种软件开发方法、软
件生命周期的各个阶段、各种应用领域以及各种开发工具,UML 是一种总结了以往建模技
术的经验并吸收当今优秀成果的标准建模方法。UML包括概念的语义,表示法和说明,提供
了静态、动态、系统环境及组织结构的模型。它可被交互的可视化建模工具所支持,这些
工具提供了代码生成器和报表生成器。UML标准并没有定义一种标准的开发过程,但它适用
于迭代式的开发过程。它是为支持大部分现存的面向对象开发过程而设计的。
UML描述了一个系统的静态结构和动态行为。UML将系统描述为一些离散的相互作用的
对象并最终为外部用户提供一定的功能的模型结构。静态结构定义了系统中的重要对象的
属性和操作以及这些对象之间的相互关系。动态行为定义了对象的时间特性和对象为完成
目标而相互进行通信的机制。从不同但相互联系的角度对系统建立的模型可用 于不同的
目的。
UML还包括可将模型分解成包的结构组件,以便于软件小组将大的系统分解成易于处理
的块结构,并理解和控制各个包之间的依赖关系,在复杂的开发环境中管理模型单元。它
还包括用于显示系统实现和组织运行的组件。
UML不是一门程序设计语言。但可以使用代码生成器工具将UML模型转换为多种程序设计语
言代码,或使用反向生成器工具将程序源代码转换为UML。UML不是一种可用于定理证明的
高度形式化的语言,这样的语言有很多种,但它们通用性较差,不易理解和使用。UML是一
种通用建模语言。对于一些专门领域,例如用户图形界面(GUI)设计、超大规模集成电路
(VLSI)设计、基于规则的人工智能领域,使用专门的语言和工具可能会更适合些。UML是
一种离散的建模语言,不适合对诸如工程和物理学领域中的连续系统建模。它是一个综合
的通用建模语言,适合对诸如由计算机软件、固件或数字逻辑构成的离散系统建模。
2 UML 的历史
UML是为了简化和强化现有的大量面向对象开发方法这一目的而开发的。
2.1 面向对象的开发方法
利用传统程序设计语言(如Cobol和 Fortran语言)的软件开发方法出现于20世纪70年
代,在80年代被广泛采用,其中最重要的是结构化分析和结构化设计方法[Yourdon-79]和
它的变体,如实时结构化设计方法[Ward-85]等。这些方法最初由Constantine、Demarco、
Mellor、Ward、Yourdon和其他一些人发明和推广,在一些大型系统,特别是和政府签约的
航空和国防领域的系统中取得了一定突破,在这些系统中,主持项目的政府官员强调开发
过程的有组织性和开发设计文档的完备和充分。结果不总是像预料的那么好—许多计算机
辅助软件工程系统(CASE)只是摘录一些已实现的系统设计的报表生成器—尽管如此,这
些方法中仍包含一些好的思想,有时在一些大系统中是很有效的。商业应用软件更不愿采
用大型的CASE系统和开发方法。大部分商业企业都独立开发本企业内部使用的软件,客户
和缔约人之间没有对立关系,而这种关系正是大型政府工程的特征。一般都认为商用系统
比较简单,不论这种看法是否正确,反正它不需要经过外界组织的检查。
普遍认为,诞生于1967年的Simula-67是第一个面向对象的语言。尽管这个语言对后来
的许多面向对象语言的设计产生了很大的影响,但是它没有后继版本。80年代初Smalltalk
,语言的广泛使用掀起了一场“面向对象运动”,随之诞生了面向对象的C、C++、Eiffel
和CLOS等语言。起初,尽管面向对象编程语言在实际使用中有一定的局限性,但它仍然吸
引了广泛的注意力。在smalltalk语言成名约5 年后,第一批介绍面向对象软件开发方法的
书籍出现了。包括Shlaer/Mellor [Shlaer-88]和Coad/Yourdon [Coad-91],紧接着又有Bo
och的[Booch-91]、Rumbaugh/Blaha/Premerlani/Eddy/Lorensen的[Rumbaugh-91]和Wirfs-
Brock/Wilkerson/Wiener [Wirfs-Brock-90](注意:图书版权年代往往包括了上一年度7
月份以后出版的书)。这些著作再加上 Goldberg/Robson[Goldberg-83]
Cox[Cox-86]和Meyer[Meyer-88] 等有关程序语言设计的著作,开创了面向对象方法的先河
。第一阶段在1990年末完成。稍晚[Jacobson-92]出版了,它建立在以前的成果的基础上,
介绍了一种稍微不同的方法,即以用例和开发过程为中心。
在以后的5年中,大批关于面向对象方法的书籍问世,各有自己的一套概念、定义、表
示法、术语和适用的开发过程。有些书提出了一些新概念,但总的来说各个作者所使用的
概念大同小异。许多后继出版的书都照搬前人,自己再做一些小的扩充或修改。最早的著
作者也没闲着,他们大部分人都更新了自己前期的著作,采纳了其他人一些好的思想。总
之,出现了一些被广泛使用的核心概念,另外还有一大批被个别人采纳的概念。即使在被
广泛接受的核心概念里,在各个面向对象方法中也有一些小的差异。这些面向对象方法之
间的细微比较常使人觉得这些概念不知依据哪个为好,特别是非专业的读者。
2.2 统一工作
在UML之前,已经有一些试图将各种方法中使用的概念进行统一的初期尝试,比较有名
的一次是Coleman和他的同事们[Coleman-94]对OMT[Rumbaugh-91]、Booch[Booch-91]、CRC
[Wirfs-Brock-90]方法使用的概念进行融合。由于这项工作没有这些方法的原作者参与,
实际上仅仅形成了一种新方法,而不能替换现存的各种方法。第一次成功合并和替换现存
的各种方法的尝试始于1994 年在Rational 软件公司Rumbaugh与 Booch合作。他们开始合
并OMT和Booch 方法中使用的概念,于1995年提出了第一个建议。此时,Jacobson 也加入
了Rational公司开始与Rumbaugh和Booch一同工作。他们共同致力于设计统一建模语言。三
位最优秀的面向对象方法学的创始人共同合作,为这项工作注入了强大的动力,打破了面
向对象软件开发领域内原有的平衡。而在此之前,各种方法的拥护者觉得没有必要放弃自
己已经采用的概s念而接受这种统一的思想。
1996年,OMG发布了征集向外界关于面向对象建模标准方法的消息。UML的三位创始人
开始与来自其他公司的软件工程方法专家和开发人员一道制订一套使OMG感兴趣的方法,并
设计一种能被软件开发工具提供者、软件开发方法学家和开发人员这些最终用户所接受的
建模语言。与此同时,其他一些人也在做这项富有竞争性的工作。1997年9月,所有建议终
于被合并成一套UML方法提交到OMG。 最后的成果是许多人共同努力的结果。我们发起了创
建UML的工作并提出了一些有益的建议,但是这些建议的最终成型是集体智慧的结晶。
2.3 标准化
1997年11月,UML被OMG全体成员一致通过,并被采纳为标准。OMG承担了进一步完善UM
L标准的工作。在UML标准通过前,就已经有许多概括UML精华的书出版发行。许多软件开发
工具供应商声称他们的产品支持或计划支持UML,若干软件工程方法学家宣布他们将使用UM
L的表示法进行以后的研究工作。UML的出现似乎深受计算机界欢迎,因为它是由官方出面
集中了许多专家的经验而形成的,减少了各种软件开发工具之间无谓的分歧。我们希望建
模语言的标准化既能促进软件开发人员广泛使用面向对象建模技术,同时也能带来UML支持
工具和培训市场的繁荣,因为不论是用户还是供应商都不用再考虑到底应该采用哪一种开
发方法。
2.4 核心组员
提出UML建议或进行UML标准修订工作的核心组员有下列人员:
数据存取公司:Tom Digre
DHR 技术公司:Ed Seidewitz
HP 公司:Martin Griss
IBM 公司:Steve Brodsky, Steve Cook, Jos Warmer
I—Lgix 公司:Eran Gery, David Harel
ICON Computing 公司:Desmond D'Souza
IntelliCorp and James Martin 公司:Conrad Bock, James Odell
MCI 系统企业:Cris Kobryn, Joaquin Miller
ObjecTime 公司:John Hogg, Bran Selic
Oracle 公司:Guus Ramackers
铂技术公司:Dilhar Desilva
Rational 软件公司:Grady Booch, Ed Eykholt, Ivar Jacobson, Gunnar Overgaard,
Karin Palmkvist, James Rumbaugh
SAP 公司:Oliver Wiegert
SOFTEAM:Philippe Desfray
Sterling 软件公司:John Cheesman, Keith Short
Taskon 公司:Trygve Reenskaug
2.5 统一的意义
“统一”这个词在UML中有下列一些相互关联的含义:
* 在以往出现的方法和表示法方面。UML合并了许多面向对象方法中被普遍接受的概念,
对每一种概念,UML都给出了清晰的定义、表示法和有关术语。使用UML可以对已有的用各
种方法建立的模型进行描述,并比原来的方法描述得更好。
* 在软件开发的生命期方面。UML对于开发的要求具有无缝性。开发过程的不同阶段可以
采用相同的一套概念和表示法,在同一个模型中它们可以混合使用。在开发的不同阶段,
不必转换概念和表示。这种无缝性对迭代式的、增量式软件开发是至关重要的。
* 在应用领域方面。UML适用于各种应用领域的建模,包括大型的、复杂的、实时的、分
布式的、集中式数据或计算的、嵌入式的系统。也许用某种专用语言来描述一些专门领域
更有用,但在大部分应用领域中,UML 不但不比其他的通用语言逊色并且更好。
?在实现的编程语言和开发平台方面。 UML可应用于运行各种不同的编程实现语言和开发平
台的系统。其中包括程序设计语言、数据库、4GL、组织文档及固件等。在各种情况下,前
部分工作应当相同或相似,后部分工作因各种开发媒介的不同而有某种程度上的不同。
* 在开发全过程方面。UML是一个建模型语言,不是对开发过程的细节进行描述的工具。
就像通用程序设计语言可以用于许多风格的程序设计一样,UML适用于大部分现有的或新出
现的开发过程。尤其适用于我们所推荐的迭代式增量开发过程。
* 在内部概念方面。在构建UML元模型的过程中,我们特别注意揭示和表达各种概念之间
的内在联系并试图用多种适用于已知和未知情况的办法去把握建模中的概念。这个过程会
增强对概念及其适用性的理解。这不是统一各种标准的初衷,但却是统一各种标准最重要
的结果之一。
3 UML的目标
UML语言的开发有多个目标。首先,最重要的目标是使UML一个通用的建模语言,可供
所有建模者使用。它并非某人专有,且建立在计算机界普遍认同的基础上,即它包括了各
种主要的方法并可作为它们的建模语言。至少,我们希望它能够替代OMT,Booch,Objecto
ry方法以及参与UML建议制订的其他人所使用的方法建立的模型。其次,我们希望 UML 采
用源自OMt Booch, Objectory及其他主要方法的表示法,即尽可能地它能够很好地支持设
计工作,像封装、分块、记录模型构造思路。此外,我们希望UML 准确表达当前软件开发
中的热点问题,比如大规模、分布、并发、方式和团体开发等。
UML并不试图成为一个完整的开发方法。它不包括一步一步的开发过程。我们认为一个
好的软件开发过程对成功的开发软件是至关重要的,我们向读者推荐一本书[Jacobson-99]
。UML和使用UML的软件开发过程是两回事,这一些很重要。我们希望UML可以支持所有的,
至少是目前现有的大部分软件开发过程。UML包含了所有的概念,我们认为这些概念对于支
持基于一个健壮的构架来解决用例驱动的需求的迭代式开发过程是必要的。
UML的最终目标是在尽可能简单的同时能够对实际需要建立的系统的各个方面建模。UM
L需要有足够的表达能力以便可以处理现代软件系统中出现的所有概念,例如并发和分布,
以及软件工程中使用的技巧,如封装和组件。它必须是一个通用语言,像任何一种通用程
序设计语言一样。然而,这样就意味着UML必将十分庞大,不可能像描述一个近乎于玩具一
样的软件系统那样简单。现代语言和操作系统比起40年前要复杂多,因为我们对它们的要
求越来越多。UML提供了多种模型,不是在一天之内就能够掌握的。它比先前的建模语言更
复杂,因为它更全面。但是你不必一下就完全学会它,就像学习任何一种程序设计语言、
操作系统或是复杂的应用软件一样。
4 UML概念域
UML的概念和模型可以分成以下几个概念域。
1). 静态结构。
任何一个精确的模型必须首先定义所涉及的范围,即确定有关应用、内部特性及其相
互关系的关键概念。UML的静态组件称为静态视图。静态视图用类构造模型来表达应用,每
个类由一组包含信息和实现行为的离散对象组成。对象包含的信息被作为属性,它们执行
的行为被作为操作。多个类通过泛化处理可以具有一些共同的结构。子类在继承它们共同
的父类的结构和行为的基础上增加了新的结构和行为。对象与其他对象之间也具有运行时
间连接,这种对象与对象之间的关系被称为类间的关联。一些元素通过依赖关系组织在一
起,这些依赖关系包括在抽象级上进行模型转换、模板参数的捆绑、授予许可以及通过一
种元素使用另一种元素等。另一类关系包括用例和数据流的合并。静态视图主要使用类图
。静态视图可用于生成程序中用到的大多数数据结构声明。在UML视图中还要用到其他类型
的元素,比如接口、数据类型、用例和信号等,这些元素统称为类元,它们的行为很像在
每种类元上具有一定限制的类。
2). 动态行为。
有两种方式对行为建模。一种是根据一个对象与外界发生关系的生命历史;另一种是
一系列相关对象之间当它们相互作用实现行为时的通信方式。孤立对象的视图是状态机—
当对象基于当前状态对事件产生反应,执行作为反应的一部分的动作,并从一种状态转换
到另一种状态时的视图。状态机模型用状态图来描述。
相互作用对象的系统视图是一种协作,一种与语境有关的对象视图和相互之间的链,通过
数据链对象间存在着消息流。视图点将数据结构、控制流和数据流在一个视图中统一起来
。协作和互操作用顺序图和协作图来描述。对所有行为视图起指导作用的是一组用例,每
一个用例描述了一个用例参与者或系统外部用户可见的一个功能。
3). 实现构造
UML模型既可用于逻辑分析又可用于物理实现。某些组件代表了实现。构件是系统中物
理上的可替换的部分,它按照一组接口来设计并实现。它可以方便地被一个具有同样规格
说明的构件替换。节点是运行时间计算资源,资源定义了一个位置。它包括构件和对象。
部署图描述了在一个实际运行的系统中节点上的资源配置和构件的排列以及构件包括的对
象,并包括节点间内容的可能迁移。
4). 模型组织
计算机能够处理大型的单调的模型,但人力不行。对于一个大型系统,建模信息必须
被划分成连贯的部分,以便工作小组能够同时工作在不同部分上。即使是一个小系统,人
的理解能力也要求将整个模型的内容组织成一个个适当大小的包。包是UML模型通用的层次
组织单元,它们可以用于存储、访问控制、置以管理配及构造包含可重用的模型单元库。
包之间的依赖关系是对包的组成部分之间的依赖关系的归纳。系统整个构架可以在包之间
施加依赖关系。因此,包的内容必须符合包的依赖关系和有关的构架要求。
5). 扩展机制
无论一种语言能够提供多么完善的机制,人们总是想扩展它的功能。我们已使UML具有
一定的扩展能力,相信能够满足大多数对UML扩充的需求而不改变语言的基础部分。构造型
是一种新的模型元素,与现有的模型元素具有相同的结构,但是加上了一些附加限制,具
有新的解释和图标。代码生成器和其他的工具对它的处理过程也发生了变化。标记值是一
对任意的标记值字符串,能够被连接到任何一种模型元素上并代表任何信息,如项目管理
信息、代码生成指示信息和构造型所需要的值。标记和值用字符串代表。约束是用某种特
定语言(如程序设计语言)的文本字符串表达的条件专用语言或自然语言。UML提供了一个
表达约束的语言,名为OCL。与所有其他扩展机制一样,必须小心使用这些扩展机制,因为
有可能形成一些别人无法理解的方言。但这些机制可以避免语言基础发生根本性变化。
--
Chivalry includes bravery ,loyalty,honor,courtesy,
repect for woman,protection of the weak,and generosity.
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 210.46.72.251]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.682毫秒