CSDN博客

img Angus_Li

第1章 UML综述

发表于2003/1/6 10:09:00  839人阅读

这一部分介绍了UML的基本原理,包括UML建模的性质和目标以及UML覆盖的所有功能领域。

 第1章 UML 综述

  本章是UML及其应用的一个快速浏览。
1.1 UML简介
  统一建模语言(UML)是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。它记录了对必须构造的系统的决定和理解,可用于对系统的理解、设计、浏览、配置、维护和信息控制。UML 适用于各种软件开发方法、软件生命周期的各个阶段、各种应用领域以及各种开发工具,UML 是一种总结了以往建模技术的经验并吸收当今优秀成果的标准建模方法。UML包括概念的语义,表示法和说明,提供了静态、动态、系统环境及组织结构的模型。它可被交互的可视化建模工具所支持,这些工具提供了代码生成器和报表生成器。UML标准并没有定义一种标准的开发过程,但它适用于迭代式的开发过程。它是为支持大部分现存的面向对象开发过程而设计的。
  UML描述了一个系统的静态结构和动态行为。UML将系统描述为一些离散的相互作用的对象并最终为外部用户提供一定的功能的模型结构。静态结构定义了系统中的重要对象的属性和操作以及这些对象之间的相互关系。动态行为定义了对象的时间特性和对象为完成目标而相互进行通信的机制。从不同但相互联系的角度对系统建立的模型可用 于不同的目的。
  UML还包括可将模型分解成包的结构组件,以便于软件小组将大的系统分解成易于处理的块结构,并理解和控制各个包之间的依赖关系,在复杂的开发环境中管理模型单元。它还包括用于显示系统实现和组织运行的组件。
UML不是一门程序设计语言。但可以使用代码生成器工具将UML模型转换为多种程序设计语言代码,或使用反向生成器工具将程序源代码转换为UML。UML不是一种可用于定理证明的高度形式化的语言,这样的语言有很多种,但它们通用性较差,不易理解和使用。UML是一种通用建模语言。对于一些专门领域,例如用户图形界面(GUI)设计、超大规模集成电路(VLSI)设计、基于规则的人工智能领域,使用专门的语言和工具可能会更适合些。UML是一种离散的建模语言,不适合对诸如工程和物理学领域中的连续系统建模。它是一个综合的通用建模语言,适合对诸如由计算机软件、固件或数字逻辑构成的离散系统建模。
1.2 UML 的历史
  UML是为了简化和强化现有的大量面向对象开发方法这一目的而开发的。
1.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],紧接着又有Booch的[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年中,大批关于面向对象方法的书籍问世,各有自己的一套概念、定义、表示法、术语和适用的开发过程。有些书提出了一些新概念,但总的来说各个作者所使用的概念大同小异。许多后继出版的书都照搬前人,自己再做一些小的扩充或修改。最早的著作者也没闲着,他们大部分人都更新了自己前期的著作,采纳了其他人一些好的思想。总之,出现了一些被广泛使用的核心概念,另外还有一大批被个别人采纳的概念。即使在被广泛接受的核心概念里,在各个面向对象方法中也有一些小的差异。这些面向对象方法之间的细微比较常使人觉得这些概念不知依据哪个为好,特别是非专业的读者。
1.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的工作并提出了一些有益的建议,但是这些建议的最终成型是集体智慧的结晶。
1.2.3 标准化
  1997年11月,UML被OMG全体成员一致通过,并被采纳为标准。OMG承担了进一步完善UML标准的工作。在UML标准通过前,就已经有许多概括UML精华的书出版发行。许多软件开发工具供应商声称他们的产品支持或计划支持UML,若干软件工程方法学家宣布他们将使用UML的表示法进行以后的研究工作。UML的出现似乎深受计算机界欢迎,因为它是由官方出面集中了许多专家的经验而形成的,减少了各种软件开发工具之间无谓的分歧。我们希望建模语言的标准化既能促进软件开发人员广泛使用面向对象建模技术,同时也能带来UML支持工具和培训市场的繁荣,因为不论是用户还是供应商都不用再考虑到底应该采用哪一种开发方法。
1.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
1.2.5 统一的意义
  “统一”这个词在UML中有下列一些相互关联的含义:
* 在以往出现的方法和表示法方面。UML合并了许多面向对象方法中被普遍接受的概念,对每一种概念,UML都给出了清晰的定义、表示法和有关术语。使用UML可以对已有的用各种方法建立的模型进行描述,并比原来的方法描述得更好。
* 在软件开发的生命期方面。UML对于开发的要求具有无缝性。开发过程的不同阶段可以采用相同的一套概念和表示法,在同一个模型中它们可以混合使用。在开发的不同阶段,不必转换概念和表示。这种无缝性对迭代式的、增量式软件开发是至关重要的。
* 在应用领域方面。UML适用于各种应用领域的建模,包括大型的、复杂的、实时的、分布式的、集中式数据或计算的、嵌入式的系统。也许用某种专用语言来描述一些专门领域更有用,但在大部分应用领域中,UML 不但不比其他的通用语言逊色并且更好。
?在实现的编程语言和开发平台方面。 UML可应用于运行各种不同的编程实现语言和开发平台的系统。其中包括程序设计语言、数据库、4GL、组织文档及固件等。在各种情况下,前部分工作应当相同或相似,后部分工作因各种开发媒介的不同而有某种程度上的不同。
* 在开发全过程方面。UML是一个建模型语言,不是对开发过程的细节进行描述的工具。就像通用程序设计语言可以用于许多风格的程序设计一样,UML适用于大部分现有的或新出现的开发过程。尤其适用于我们所推荐的迭代式增量开发过程。
* 在内部概念方面。在构建UML元模型的过程中,我们特别注意揭示和表达各种概念之间的内在联系并试图用多种适用于已知和未知情况的办法去把握建模中的概念。这个过程会增强对概念及其适用性的理解。这不是统一各种标准的初衷,但却是统一各种标准最重要的结果之一。
1.3 UML的目标
  UML语言的开发有多个目标。首先,最重要的目标是使UML一个通用的建模语言,可供所有建模者使用。它并非某人专有,且建立在计算机界普遍认同的基础上,即它包括了各种主要的方法并可作为它们的建模语言。至少,我们希望它能够替代OMT,Booch,Objectory方法以及参与UML建议制订的其他人所使用的方法建立的模型。其次,我们希望 UML 采用源自OMt Booch, Objectory及其他主要方法的表示法,即尽可能地它能够很好地支持设计工作,像封装、分块、记录模型构造思路。此外,我们希望UML 准确表达当前软件开发中的热点问题,比如大规模、分布、并发、方式和团体开发等。
  UML并不试图成为一个完整的开发方法。它不包括一步一步的开发过程。我们认为一个好的软件开发过程对成功的开发软件是至关重要的,我们向读者推荐一本书[Jacobson-99]。UML和使用UML的软件开发过程是两回事,这一些很重要。我们希望UML可以支持所有的,至少是目前现有的大部分软件开发过程。UML包含了所有的概念,我们认为这些概念对于支持基于一个健壮的构架来解决用例驱动的需求的迭代式开发过程是必要的。
  UML的最终目标是在尽可能简单的同时能够对实际需要建立的系统的各个方面建模。UML需要有足够的表达能力以便可以处理现代软件系统中出现的所有概念,例如并发和分布,以及软件工程中使用的技巧,如封装和组件。它必须是一个通用语言,像任何一种通用程序设计语言一样。然而,这样就意味着UML必将十分庞大,不可能像描述一个近乎于玩具一样的软件系统那样简单。现代语言和操作系统比起40年前要复杂多,因为我们对它们的要求越来越多。UML提供了多种模型,不是在一天之内就能够掌握的。它比先前的建模语言更复杂,因为它更全面。但是你不必一下就完全学会它,就像学习任何一种程序设计语言、操作系统或是复杂的应用软件一样。
1.4 UML概念域
  UML的概念和模型可以分成以下几个概念域。
1. 静态结构。
  任何一个精确的模型必须首先定义所涉及的范围,即确定有关应用、内部特性及其相互关系的关键概念。UML的静态组件称为静态视图。静态视图用类构造模型来表达应用,每个类由一组包含信息和实现行为的离散对象组成。对象包含的信息被作为属性,它们执行的行为被作为操作。多个类通过泛化处理可以具有一些共同的结构。子类在继承它们共同的父类的结构和行为的基础上增加了新的结构和行为。对象与其他对象之间也具有运行时间连接,这种对象与对象之间的关系被称为类间的关联。一些元素通过依赖关系组织在一起,这些依赖关系包括在抽象级上进行模型转换、模板参数的捆绑、授予许可以及通过一种元素使用另一种元素等。另一类关系包括用例和数据流的合并。静态视图主要使用类图。静态视图可用于生成程序中用到的大多数数据结构声明。在UML视图中还要用到其他类型的元素,比如接口、数据类型、用例和信号等,这些元素统称为类元,它们的行为很像在每种类元上具有一定限制的类。
2. 动态行为。
  有两种方式对行为建模。一种是根据一个对象与外界发生关系的生命历史;另一种是一系列相关对象之间当它们相互作用实现行为时的通信方式。孤立对象的视图是状态机—当对象基于当前状态对事件产生反应,执行作为反应的一部分的动作,并从一种状态转换到另一种状态时的视图。状态机模型用状态图来描述。
相互作用对象的系统视图是一种协作,一种与语境有关的对象视图和相互之间的链,通过数据链对象间存在着消息流。视图点将数据结构、控制流和数据流在一个视图中统一起来。协作和互操作用顺序图和协作图来描述。对所有行为视图起指导作用的是一组用例,每一个用例描述了一个用例参与者或系统外部用户可见的一个功能。
3. 实现构造
  UML模型既可用于逻辑分析又可用于物理实现。某些组件代表了实现。构件是系统中物理上的可替换的部分,它按照一组接口来设计并实现。它可以方便地被一个具有同样规格说明的构件替换。节点是运行时间计算资源,资源定义了一个位置。它包括构件和对象。部署图描述了在一个实际运行的系统中节点上的资源配置和构件的排列以及构件包括的对象,并包括节点间内容的可能迁移。
4. 模型组织
  计算机能够处理大型的单调的模型,但人力不行。对于一个大型系统,建模信息必须被划分成连贯的部分,以便工作小组能够同时工作在不同部分上。即使是一个小系统,人的理解能力也要求将整个模型的内容组织成一个个适当大小的包。包是UML模型通用的层次组织单元,它们可以用于存储、访问控制、置以管理配及构造包含可重用的模型单元库。包之间的依赖关系是对包的组成部分之间的依赖关系的归纳。系统整个构架可以在包之间施加依赖关系。因此,包的内容必须符合包的依赖关系和有关的构架要求。
5. 扩展机制
  无论一种语言能够提供多么完善的机制,人们总是想扩展它的功能。我们已使UML具有一定的扩展能力,相信能够满足大多数对UML扩充的需求而不改变语言的基础部分。构造型是一种新的模型元素,与现有的模型元素具有相同的结构,但是加上了一些附加限制,具有新的解释和图标。代码生成器和其他的工具对它的处理过程也发生了变化。标记值是一对任意的标记值字符串,能够被连接到任何一种模型元素上并代表任何信息,如项目管理信息、代码生成指示信息和构造型所需要的值。标记和值用字符串代表。约束是用某种特定语言(如程序设计语言)的文本字符串表达的条件专用语言或自然语言。UML提供了一个表达约束的语言,名为OCL。与所有其他扩展机制一样,必须小心使用这些扩展机制,因为有可能形成一些别人无法理解的方言。但这些机制可以避免语言基础发生根本性变化。
1.5 表达式和图表语法
  本书列举了许多演示实际模型的表达式和图表,以及表达式的语法和图表的注释。为了尽量避免将解释说明和实例弄混,本书采用了一些约定的格式。
在图表和文本表达式中实际的表示法部分用Helvetica字体印刷。例如,模型中出现的Helvetica字体的类名是一  个合法的名称。语法表达式中的括弧是一个可能出现在实际表达式中的括弧,它不是实际语法机构的一部分。例如:Order.create(customer,amount)
在连续的文中,关键词和模型元素名都用Helvetica字体印刷,如:Order或Customer。
在一个语法表达式子中,句法单元名可以被实际的一段文字替代,这样的句法单元名用斜体印刷,如:name。斜体和下划线说明替换文本具有给定的性质。例如:
name. Operation(argument,..)
object-name:class
  在语法表达式中,下标和上划线用于指示某种语法性质。例如:
expression 这个表达式是任选的。
  expressionlist 用逗号来分隔一系列表达式。如果出现了零个或者一个重复符号,则不需要分隔符。每个重复符号都要用一个单独的替换符号。如果一个除逗号之外的标点符号出现在下标中,则它是分隔符。
=expressionlist 用上划线来连接两个或多个属于同一单元的可选的或重复出现的项目。在这个例子中,等号和表达式构成一个可以使用或省略的单元。如果只有一个项目,可以不用上划线。
  在图表中,楷体和箭头是注释,它们是解释性说明而不是实际表示法的一部分。其他文字和符号是实际表示法的一部分。

阅读全文
0 0

相关文章推荐

img
取 消
img