当前位置: 首页 > news >正文

(轉貼) UML中文FAQ (OO) (UML)

V1.0
张恂
2003年10月29日

编者按:

一直很难找到中文的、适合国人看的UML FAQ,而英文的UML FAQ往往散落于各处不易收集和消化,导致很多看似简单却很基本、很关键的问题在网络论坛、BBS上被反复地提出,既浪费了提问者、解答者不少的时间和精力,也给大家学习总结、进一步提高带来了困难。于是,结合自己的所学所想试着编写了一个UML中文FAQ供各位参考。众人拾柴火焰高,有什么不足之处,欢迎大家多多提出宝贵意见,不断补充,一起来完善!
联系邮箱:zhangxun2001@hotmail.com


什么是UML?
UML有哪些特点?
UML有什么用?
UML不能做什么?
为什么要学习和掌握UML?
什么情况下不需要或不适合用UML?
什么情况下应该用UML?
促进UML普及和应用对于加强我国软件业的实力有什么重要意义?
UML的统一性表现在哪些方面?
UML是如何诞生的?
UML是一家之言,或少数派的观点吗?
UML之父是谁?
UML标准有哪些最新进展?
初学者如何开始学习UML?
世界上有哪些著名的公司、组织参与了UML标准的制订?

什么是UML?

Unified Modeling Language(统一建模语言)是国际对象管理组织OMG制定的一个通用的、可视化建模语言标准,可以用来描述(specify)、可视化(visualize)、构造(construct)和记载(document)软件密集型系统的各种工件(artifacts,又译制品)。


UML有哪些特点?
UML的“通用性”主要是指不仅仅可以用它来描述软件,而且还可以用它来描述一般企业或组织的业务流程以及由软、硬件共同组成、以软件为主的复杂系统(即所谓的软件密集型系统),甚至还包括非软件系统。

UML的“可视性”是指可以通过UML一系列的图形符号,组成多种视图(view)来直观、清晰地表达系统分析设计中方方面面的、许多复杂的概念。UML主要是为了人的阅读和使用而设计的,所以它采用了半形式化的,易于人们理解、交流的形式。

UML是一种分析设计专用的建模语言,它本身不是编程(programming)语言,不能直接用来生成可执行的软件。UML是一种抽象层次比C、C++、Java、VB、Delphi等文本高级语言更高的图形语言,通过它我们可以抽象地表示用高级编程语言编写的文本程序的逻辑结构和行为。相比传统的高级编程语言,UML能够更加高效、准确地反映软件设计的方案和思路,是真正用来“设计程序”(design programs)的语言。从这个意义上看,不妨称UML为“甚高级”程序设计语言。

UML基本上不能算作全新的发明,它并非学者教授、科研机构的研究成果,而是直接来自于产业界、工程界的实践总结,是在归纳基础上进行理论升华的产物,其核心内容反映了30多年来全球软件工业的领导者在软件设计构造领域的最佳实践和成功经验,因而具有很高的实用价值。

实践证明,OO分析设计(OOAD)方法比传统方法能更加准确、全面地描述现实世界。UML是用来表述OO概念的一种语言工具,而很奇妙,它本身作为一件产品同样也是用OO方法来设计的,这使得UML具有传统建模语言所不具备的很强的语义表达能力和非常灵活的可扩展性。

UML有什么用?

UML的用途非常广泛,可以概括为“描述、可视化、构造、记载”4种基本功能,在业务建模、需求分析、系统设计、实现和测试、数据建模、项目管理等阶段任务中均可根据需要采用。

UML建模是建立软件开发文档的一个有效手段,通过UML可视化地描述系统需求,记载软件构成,能够显著地提高文档的质量和可读性,减少编写文档的工作量。

UML实质上是一种系统分析设计专用语言,通过可视化的图形符号结合文字说明或标记可以帮助业务/系统分析员、软件架构师/设计师、程序员等各种建模者有效地描述复杂软件(或业务)的静态结构和动态行为,包括工作流(数据流和控制流)、功能需求、结构元素及关系、架构组成、设计模式、对象协作、事件响应和状态变化等等。


UML不能做什么?

UML不是高度形式化的语言,一般不能用于定理证明。

UML是基于OO方法的通用建模语言,不适合用户图形界面设计、超大规模集成电路(VLSI)设计、基于规则的人工智能等专业领域。

UML是一种离散型建模语言,适合对由软件、固件或数字逻辑构成的离散系统建模,不适合对工程和物理学领域中的连续系统建模。

本身作为语言,UML仅仅是一种表达形式,不是建模方法,在实际的软件项目开发中仅仅掌握一套标准的图形符号是远远不够的。用好UML首先需要掌握OOAD的基本原则和方法,并在一定的软件开发过程(如UP/RUP、XP等)的指导下进行有取舍的运用。

为什么要学习和掌握UML?

首先,UML对于当前大多数希望进一步改进质量的软件开发团队来说是必不可少或必须的。为什么这样说呢?因为,C++、Java等源码并不能直观、方便地反映复杂程序的设计:如内部逻辑结构、各种隐含的依赖关系、运行时的状态改变和特殊行为等等。写好的代码仅仅是一种实现方式,很难反映出现象背后的真实本质——设计,因此对于大多数稍稍复杂点的项目来说,仅有代码是不够的。

可视化建模历来是一种成功的工程实践做法,并非软件行业所特有。软件的设计方案在用C++、Java实现之前通常隐藏在人们的头脑当中,而设计正确与否是决定软件质量好坏的要害,一个前提是必须用适当的方式把它表达出来。通过程序代码来表达、讨论、评估和选择复杂软件的设计往往是很笨拙的,这一表达

方式的空欠唯有通过类似UML的建模语言来填补。

其次,OO方法是当代主流的软件开发技术。世界先进的软件团队和个人早已摆脱了对如何使用具体的平台API、个别编程语言特性的纠缠,而把更多的精力放在了需求、架构、设计机制和模式等对软件质量有重大影响的核心要素——分析与设计上。UML作为OO建模语言的事实上标准和主要的表达媒介,在这些场合能发挥关键的作用。所以,熟练地掌握并运用好UML是当今系统分析员、架构师/设计师以及程序员等软件工程师所必备的一项基本技能。


什么情况下不需要或不适合用UML?

对于一个特定的软件公司或开发团队,在下列情况下建议不采用UML:
1)传统的做法已完全适用,对OOAD的要求也不高,项目非常成功,无任何改进的必要;
2)开发的系统比较简单,直接用源码配上少量的文字就能解决问题,软件开发文档也无需添加图形来辅助说明;
3)开发人员更习惯于直接阅读源码,用源码交流,这样做不影响工作效率和质量;
4)开发的系统本身不属于OO方法、UML适用范围。


什么情况下应该用UML?

对于一个特定的软件公司或开发团队,在下列情况下建议采用UML:
1)OO方法是项目决定采用的方法论,是整个项目或产品成功的关键;
2)开发人员感觉用源码说明不了真正的问题,希望利用可视化建模语言简化文档,提高交流的效率,准确抓住问题的本质;
3)系统的规模和设计都比较复杂,需要用图形抽象地表达复杂的概念,增强设计的灵活性、可读性和可理解性,以便暴露深层次的设计问题,降低开发风险;
4)公司希望记录已成功项目、产品的公共设计方案,在开发新项目时可以参考、重用过去的设计,节省投入,提高成功率。
促进UML普及和应用对于加强我国软件业的实力有什么重要意义?

OO方法自上世纪80年代以来已经成为软件开发的主流技术,标准OO建模语言UML的问世说明OO技术的发展达到了一个新的高峰。推广普及UML的应用可以使我国软件开发人员、软件企业和客户乃至整个行业都从中获益:
1)个人
UML相关知识体系蕴含了非常丰富的当代软件工程先进知识。软件开发人员通过学习和掌握UML概念、表示法及相关的软件过程、软件工程技术,能够加深对OOAD原则、方法的理解,提高抽象思维能力,从而站在更高的层次上分析问题、解决问题,这是一条快速提高个人软件设计能力的有效途径。
2)企业
对软件企业内部,用好UML,不但能直接提升企业的软件设计开发能力,而且由于UML能形象直观地记录软件设计的核心思想,可以使软件开发管理透明
化,促进企业知识资产的保护和增值,促进软件重用和整体效益的提升。对外,由于UML是通行的软件行业国际标准,企业在业务交往中有效运用UML,无论对于开拓国内外产品市场还是保障工程承接、项目外包等业务的顺利开展都大有裨益。
3)行业
积极采用国际通行的软件描述和设计语言UML,一方面能增加信息透明度,显著降低软件企业之间、客户与开发商之间的沟通成本,减少项目失败的风险,另一方面能促进行业市场的规范化和标准化,增进国际技术交流,整体提高我国软件业的技术水平和参与国际市场竞争的能力。据悉,与UML有关的国家级标准目前正在考虑制定过程当中。


UML的统一性表现在哪些方面?

UML的统一性至少表现在以下几个方面:
1)随着OO技术的蓬勃发展,到上世纪90年代初OO方法已经多达50余种,它们之间既有很多共通之处也存在许多没有必要的细节差异,这妨碍了技术进步,不利于产业的发展。UML统一了多种互补的、最具代表性、最受业界欢迎的主流OO方法,这既是历史的必然,也OO方法成熟的一个重要标志。UML及与其配套的OO统一过程(RUP)在实现“合并同类项”的基础上又向前迈出了一大步,不愧为当代OO建模方法的集大成者。
2)UML适用于各个行业的信息化工程,包括电信、银行、保险、税务、办公自动化、电力、电子、国防、航天航空、制造、工业自动化、医疗、交通、商业、电子商务等诸多领域的业务建模和软件分析设计,尤其适合对大中型、复杂、分布式应用系统或软件产品建模,在这些广泛的领域中都可以统一使用一套标准的建模语言。
3)作为一种独立于具体实现的、抽象的表述方式,UML广泛地适用于各种现代程序设计语言、数据库和开发平台。
4)有了UML标准,面向各种不同的软件开发方法和过程(如重载/轻载,瀑布式/迭代递增式),在软件开发生命周期各个阶段的工作(如业务建模、需求分析、设计、实现、测试)中,都可以采用一套统一的概念和表示法,避免了语言转换的麻烦。
5)UML明确定义了一套公共的内部概念,建立了统一的关于建模语言的元模型,反映了在软件和信息建模技术领域的最新成果。


UML是如何诞生的?

识时务者为俊杰。为了突破上世纪90年代初OO方法论混战的局面,1994年杰出的Rational公司OO大师Grady Booch邀请通用电气公司著名OO大师James Rumbaugh博士加盟Rational,启动了OO方法的统一历程。他们于1995年发表了“统一方法0.8”。与此同时,另一位超一流OO大师、爱立信公司的Ivar Jacobson博士也在该年加入了二人的行列。

1996年,3人正式把他们的统一成果命名为“统一建模语言”,UML于此诞生。同时,他们还做出了一个非常重要的决定——把UML提交到非赢利性的OMG进行标准化,让全世界的软件开发人员都可以自由地分享这一软件史上的重大成果。

于是,在全球软件界具有广泛影响力的国际对象管理组织OMG从此开展了一系列OO建模语言的标准化工作。1997年11月,UML 1.1经OMG各成员投票被正式采纳为行业标准。


UML是一家之言,或少数派的观点吗?

否,UML是全球工业界和学术界的领导者协同努力的成果。自从进入OMG程序后,UML就不再由Rational一家公司所有或由少数人控制,而成为凝结了百家之长的公共知识结晶。具有丰富企业信息系统和信息工程经验的OO大师、Martin/Odell方法的领军人物James Odell为此曾表明放弃自己的方法,并直接参与领导了UML 1.x系列标准的制订工作。另一位OO大师Coad/Yourdon方法的创始人之一Peter Coad,虽然没有直接参与UML制订,但却独具慧眼创办了TogetherSoft公司(已被Borland收购),开发了著名的UML集成开发环境Together ControlCenter,成为Rational Rose的有力竞争者。事实说明,UML的确促进了各种OO方法和流派的大融合,在OO建模语言领域具有不可替代的地位。


UML之父是谁?

UML之父有三位:他们是Grady Booch(Booch方法),James Rumbaugh(OMT方法)和Ivar Jacobson(OOSE方法)。人们亲切地称他们为“3 amigos”(即“三高”,类似于大家给予合作举办世纪音乐会的,世界上3位顶尖男高音歌唱家的称谓)。


UML标准有哪些最新进展?

UML 1.x系列的最新版本是于2003年3月发布的1.5版本(http://www.uml.org/)。
OMG(http://www.omg.org/)从2000年起启动了UML 2.0标准的制定工作。U2P组织(UML2 Partners Consortium,http://www.u2-partners.org/)在UML 2.0标准的制定过程中发挥了主导作用。目前UML 2.0的上层结构(Superstructure)规范已经在2003年6月12日获得通过。
OMG已经与国际标准化组织ISO开展了合作,预示着UML将来有望成为ISO标准,值得关注。

初学者如何开始学习UML?

无外乎几种方式:读书、上网、实践、培训。

最近几年国内一窝蜂地出版了不少与UML有关的中英文书籍,但说实话,有点良莠不齐。初学者不管自学还是参加培训,选择合适的UML教材/读物是很重要的。

Craig Larman的《UML和模式应用》是一本非常好的内容丰富、真正实用的入门教材,在国际上也是用得最多的一本,无出其右者。纵观全书,以实案为中心,脉络清晰,组织老到,深浅适当,循循善诱,非常适合UML、UP、设计模式的初学者和一直对OOAD、UML的价值存有疑虑的结构化人士一读。对于熟悉OO的人来说,阅读此书也是再一次享受梳理知识、进行系统性训练的美妙体验。本人尤其推荐第2版(内容更新了不少,听说正在引进翻译,值得期待)。

如果希望与大师对话,全面深入地掌握UML的基本要领,通过领悟UML设计者的思想和意图来达到在实战中得心应手运用OO建模技术的目的,建议一定要阅读UML之父Grady Booch亲自撰写的《UML用户指南》。本书相当全面,偏重理论分析和概念阐释,这些内容和抽象技术对于真正理解UML是非常基本、必不可少的,所以它适合喜欢认真探究一切的读者。

用好UML离不开有好的过程作指导。RUP极其丰富的内容令人生畏,Ivar Jacobson大师在《统一软件开发过程》一书中从管理者和系统架构师的角度,通过实例分析系统地讲解了将UML用于分析设计实践的完整过程,深入浅出,言简意赅,可以说此书正是RUP的精华所在。带领自己的团队用好UML,得此书足矣。

此外,IT之源(http://www.iturls.com/)、UMLChina(http://www.umlchina.com/)等网站提供了非常丰富的学习资料和参考文章。

UML规范、《UML参考手册》内容深、篇幅大,主要面向UML工具开发者、专家和研究人员,不适合初学者阅读。


世界上有哪些著名的公司、组织参与了UML标准的制订?

历年来,参与UML标准制订的一些核心公司和组织包括(1.x、2.0):
全能型IT公司:HP, IBM, Unisys
大型软件公司:CA, Microsoft, Oracle
CASE厂商:I-Logix, Rational(已被IBM收购), Telelogic
电信供应商:Alcatel,Ericsson,Fujitsu,Motorola
行业组织:OMG
IT系统集成商:EDS
等等

UML在业界的影响力和地位由此可见一斑。


感谢您阅读此文!纸质媒体如需转载请与作者联系;本文版权所有者为张恂,保留所有权利;您可以从IT之源上获得本文的最新版本和相关资料;以上言论仅代表作者本人观点,与作者服务的公司无关;欢迎转载本文电子版,转载时请注明出处并保留所有原始信息。

相关文章:

  • spring MVC 3.1 forword/redirect
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • 为什么Maven会更改Eclipse JDK设置
  • C51中的INTRINS.H:内部函数
  • S3C2440与NAND FLASH(K9F1208)的接线分析
  • linux 6.2 部署nginx的过程
  • 成为Java高手需要达到的25个学习目标
  • 字符编码相关的知识
  • 远程读取XML根级别上的数据无效。 行 1,位置 1
  • 将DATAtable转换成 json格式
  • PHP之session相关实例教程与经典代码
  • HDU 3065 病毒侵袭持续中 (AC自动机)
  • HDU 1850 Being a Good Boy in Spring Festival (Nim博弈)
  • 20非常有用的Java程序片段(6-10)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • crontab执行失败的多种原因
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Javascript设计模式学习之Observer(观察者)模式
  • JavaScript学习总结——原型
  • leetcode-27. Remove Element
  • react-native 安卓真机环境搭建
  • React-redux的原理以及使用
  • vue--为什么data属性必须是一个函数
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 关于Java中分层中遇到的一些问题
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 看域名解析域名安全对SEO的影响
  • 通过npm或yarn自动生成vue组件
  • 微信小程序--------语音识别(前端自己也能玩)
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 用Python写一份独特的元宵节祝福
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​ubuntu下安装kvm虚拟机
  • #define 用法
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (接口自动化)Python3操作MySQL数据库
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (六)Hibernate的二级缓存
  • (十) 初识 Docker file
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .net 中viewstate的原理和使用
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET关于 跳过SSL中遇到的问题
  • .NET企业级应用架构设计系列之开场白
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • [\u4e00-\u9fa5] //匹配中文字符
  • [2010-8-30]
  • [Android]How to use FFmpeg to decode Android f...
  • [AutoSar NVM] 存储架构