随着软件产品的价值提高,企业欲寻找技术以改善软件生产流程、提高质量、降低成本并缩短产品上市时间。这些技术包括组件技术,可视化编程,模式和框架的应用。企业也寻求能管理系统因范围和规模扩大而衍生的复杂性的技术。他们也意识到需要解决周期性的体系结构问题,如物理分布、并发性、复制、安全性、负载平衡和容错性。随着软件体系架构的复杂性持续提高,由此 UML 应运而生。
# UML 是什么
UML 是统一建模语言的简称,它是一种由一整套图表组成的标准化建模语言。UML 用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。UML 代表了一系列在大型而复杂系统建模中被证明是成功的做法,是开发面向对象软件和软件开发过程中非常重要的一部分。UML 主要使用图形符号来表示软件项目的设计,使用 UML 可以帮助项目团队沟通、探索潜在的设计和验证软件的架构设计。
# UML 哪里好
Page-Jones 在 Fundamental Object-Oriented Design in UML 一书中总结了 UML 的主要目的,如下:
为用户提供现成的、有表现力的可视化建模语言,以便他们开发和交换有意义的模型。
为核心概念提供可扩展性 (Extensibility) 和特殊化 (Specialization) 机制。
独立于特定的编程语言和开发过程。
为了解建模语言提供一个正式的基础。
鼓励面向对象工具市场的发展。
支持更高层次的开发概念,如协作,框架,模式和组件。
整合最佳的工作方法 (Best Practices)。
可以帮助开发团队以一种可视化的方式理解系统的功能需求。有利于开发团队队员之间在各个开发环节间确立沟通的标准,便于系统文档的制定和项目的管理。因为 UML 的简单、直观和标准性,在一个团队中用 UML 来交流比用文字说明的文档要好的多。UML 为非专业编程人士理解软件的功能和构造,提供了一种直白、简单、通俗的方法。使用 UML 可以方便的理解各种框架的设计方式等等各种各样的好处。
# 从 OMT 说起
OMT(Object Modeling Technique,对象建模技术)是一种面向对象的软件开发方法,它涵盖了面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)的各个方面。下面是对这三个概念的简要介绍:
面向对象分析(OOA - Object-Oriented Analysis)面向对象分析是一种分析方法,用于识别系统中的对象和类,以及它们之间的关系。OOA 的目的是理解问题域并建立一个概念模型,通常包括:
对象模型:描述系统中的类和对象,以及它们之间的静态关系。
动态模型:描述对象随时间变化的行为,包括状态和事件。
功能模型:描述系统的功能需求和数据流。
面向对象设计(OOD - Object-Oriented Design)面向对象设计是在 OOA 的基础上进一步细化系统的设计。OOD 关注如何将分析阶段得到的概念模型转化为软件架构和组件。这包括:
细化类和对象的设计,包括属性和方法。
确定类的继承关系和接口。
设计系统的架构,包括组件、包和模块。
考虑系统的可扩展性、可维护性和性能。
面向对象编程(OOP - Object-Oriented Programming)面向对象编程是一种编程范式,它使用类和对象的概念来组织代码。OOP 的关键特性包括:
封装:将数据(属性)和操作数据的方法结合在一起,隐藏内部实现细节。
继承:允许新类(子类)继承现有类(父类)的属性和方法。
多态:允许不同类的对象对同一消息做出响应,但具体行为会根据对象的实际类而变化。
抽象:通过创建抽象类和接口来定义对象的接口,而不是具体的实现。
OMT 方法将 OOA、OOD 和 OOP 整合在一起,提供了一种从问题域分析到软件实现的连贯方法。通过 OMT,开发者可以创建一个清晰、一致的模型,然后使用面向对象的技术来实现这个模型。随着时间的推移,OMT 的一些概念和技术被统一建模语言(UML)所吸收和发展,UML 现在成为了面向对象软件开发中更为广泛使用的标准。
# UML 诞生前夜
计算机有软件和硬件两部分组成,从计算机诞生到现在,硬件技术始终比软件技术的发展速度快。上世纪 60 年代,“软件危机”发生,硬件技术的迅速发展使得计算机价格下降,成了普通人可以用得起的“家用电器”;人们需要更加复杂的软件系统来满足他们工作、生活中的各种需要,但是,当时的软件开发模式很难开发出复杂的软件,即使开发出来,其可靠性、可维护性都是很大的问题。
为了解决“软件危机”,人们提出了“软件工程”的概念,试图将工程化的思想引入到软件业。在这一阶段,诞生了很多的开发方法,其中包括面向对象的开发方法,由于面向对象的各种优点,这种开发方法得到了大家的普遍关注,出现了 Simula、C++ 、Java、 C#等面向对象的语言,也出现了各种面向对象的建模方法:OMT、OOSE、Booch 等。这些建模方法之间各有区别,对于开发人员来讲,如同三门不同的语言,使用不同语言的开发人员不能很好的交流。
公认的面向对象建模语言出现于 20 世纪 70 年代中期。从 1989 年到 1994 年,其数量从不到 10 种增加到了 50 多种。在众多的建模语言中,语言的创造者努力推崇自己的产品,并在实践中不断完善。但是,面向对象方法的用户并不了解不同建模语言的优缺点及相互之间的差异,因而很难根据应用特点选择合适的建模语言,于是爆发了一场“方法大战”。20 世纪 90 年代,一批新方法出现了,其中最引人注目的是 Booch 1993、和 OMT-2 等。
这时,人们期待一种统一的建模语言的诞生,如同建筑设计图一样,符号简单、没有二义性而且更重要的是人人都能够看懂,交流起来很方便,就这样,UML 诞生了,UML 提出了一套 IT 专业人员期待多年的统一的标准建模符号。通过使用 UML,人员能够阅读和交流系统架构和设计规划,就像建筑工人多年来所使用的建筑设计图一样。
# UML 创始人们
1、Grady Booch
Grady (IBM fellow)因其在软件架构、软件工程和软件建模方面的杰出贡献而在国际上享有盛名。自 Rational 于 1981 年创建以来,他就一直担任 IBM Rational 的首席科学家。Grady 于 2003 年 3 月荣获 IBM 名士(IBM fellow)的称号。
Booch 方法的力量在于其丰富的符号体系,主要包括:
类图(类结构-静态视图)
对象图(对象结构-静态视图)
状态转移图(类结构-动态视图)
时态图(对象结构-动态视图)
模块图(模块体系结构)
进程图(进程体系结构)
.....
2、Ivar Jacobson
Ivar Jacobson 博士是 Objectory 方法的发明者,也是瑞典 Objectory AB 公司的创始人。Jacobson 博士是两本影响深远的畅销书的主要作者:《面向对象的软件工程―一种用例驱动方法》(1992 年计算机语言生产力奖获得者)和 《对象的优势―采用对象技术的业务过程再工程》。Jacobson 将 use case 模型与其它五种系统模型关联:
领域对象模型。use case 模型根据领域来表示。
分析模型。use case 模型通过分析来构造。
设计模型。use case 模型通过设计来具体化。
实现模型。该模型依据具体化的设计来实现 use case 模型。
测试模型。用来测试具体化的 use case 模型。
3、James Rumbaugh
James Rumbaugh 博士是享誉全球的软件开发方法学家。Jim 一直是引导 UML 未来开发的领袖,他提出了许多有关 UML 的概念。他与 Rational 的其他软件领袖一起工作在各个领域,比如 Rational 统一过程和实时开发方法学。自从 2003 年 IBM 收购了 Rational 之后,Jim 就一直致力于推动 IBM 建模工具的开发。Rumbaugh 的 OMT 方法将开发过程分为四个阶段:分析->系统设计->对象设计->实现
# UML 发展历程
1995 年 10 月 UM 0.8(Unified Method)
1996 年 6 月和 10 月 UML0.9 和 UML0.91
1997 年 11 月发布了新的版本 UML.1.1
1998 年发布了 UML 1.2 版本
1999 年发布了 UML 1.3 版本
2003 年 3 月发布了 UML 1.5 版本
2005 年发布了 UML 2.0 版本
2006 年发布了 UML 2.1 版本
2009 年发布了 UML 2.2 版本
2010 年发布了 UML 2.3 版本
2011 年发布了 UML 2.4.1 版本
2013 年发布了 UML 2.5.版本
2017 年发布了 UML 2.5.1 版本
1994 年,OMT 的创始人 Jim Rumbaugh 离开了通用电气公司 (General Electric),转投了 Rational,与 Grady Booch 并肩作战。这使得软件世界惊呆的合作,为的是要把二人的想法结合成一个统一的方法(项目名称也就是 “统一方法”)。
1995 年,OOSE 的创建者 Ivar Jacobson 也加入了 Rational,他的想法(特别是有关“用例” (Use Case) 的概念)被整合于统一方法中,成为“统一建模语言”。Rumbaugh,Booch 和 Jacobson 的团队则被称为“三友”
UML 是由 OMT(对象建模技术) 统一而来的符号。
对象建模技术 OMT [James Rumbaugh 1991] - 最适合分析和数据密集型信息系统。
Booch [Grady Booch 1994] - 强项为设计和實作。Grady Booch 曾经为 Ada 语言方面做过广泛的工作,并且一直是该语言面向对象技术发展的主要参与者。尽管 Booch 方法很强大,但是但并未广为接受 (因为他的模型包含着很多云状,序人不整齐的感觉)
OOSE(面向对象的软件工程[Ivar Jacobson 1992]) - 有一个称为用例的模型。用例是理解整个系统行为的强大技术(OO 传统上很弱的领域)。
在 1996 年间,由 Object Management Group (OMG) 发布的第一个征求建议书 (RFP),成为让这些组织联合起来的催化剂。Rational 与几个愿意为加强 UML 1.0 投入资源的组织建立了 UML 伙伴联盟。那些对 UML 1.0 最有贡献的人包括:
Digital Equipment Corp
HP
I-Logix
IntelliCorp
IBM
ICON Computing
MCI Systemhouse
微软
甲骨文
Rational 软件
TI
Unisys 公司
UML 的目标是提供一个标准的符号,可以被所有面向对象的方法使用,并选择和整合前兆符号的最佳元素。UML 可用于广泛的应用程序,它为不同的系统和活动(如分布式系统,分析,系统设计和部署)提供了构造。
UML 1.0 在 1997 年 1 月提交给 OMG。一个有明确定义,表达力强大且通用的建模语言。UML 还包含其他主要方法中不存在的新概念,如扩展机制和约束语言。
UML 也受到其他面向对象符号的影响:
ellor 和 Shlaer [1998]
Coad 和 Yourdon [1995]
Wirfs-Brock [1990]
Martin 和 Odell [1992]
# UML 标准规范
最新规范:UML v.2.5.1 [2017 年 12 月]
最新规范:UML v.2.5.1 变更 [2017 年 12 月]
历史规范:UML 基础建模 ISO 2012 版标准 [2012 年 5 月]
历史规范:UML 复杂建模 ISO 2012 版标准 [2012 年 5 月]
历史规范:UML 基础建模 v.2.4.1 [2011 年 8 月]
历史规范:UML 复杂建模 v.2.4.1 [2011 年 8 月]
历史规范:UML 基础建模 v.2.3 [2010 年 5 月]
历史规范:UML 复杂建模 v.2.3 [2010 年 5 月]
历史规范:UML 基础建模 v.2.2 [2009 年 2 月]
历史规范:UML 复杂建模 v.2.2 [2009 年 2 月]
历史规范:UML 基础建模 v.2.2 变更 [2009 年 2 月]
历史规范:UML 复杂建模 v.2.2 变更 [2009 年 2 月]
历史规范:UML 基础建模 v.2.1.2 [2007 年 11 月]
历史规范:UML 复杂建模 v.2.1.2 [2007 年 11 月]
历史规范:UML 基础建模 v.2.1.2 变更 [2007 年 11 月]
历史规范:UML 复杂建模 v.2.1.2 变更 [2007 年 11 月]
历史规范:UML 基础建模 v.2.0 [2005 年 7 月]
历史规范:UML 复杂建模 v.2.0 [2005 年 7 月]
历史规范:UML v.1.5 [2003 年 3 月]
历史规范:UML v.1.4.2 ISO 标准 [2005 年 4 月]
历史规范:UML v.1.4 [2001 年 9 月]
历史规范:UML v.1.3 [2000 年 3 月]
# 结束语
是的,没看错,从标准规范多年没更新来看,UML 发展已经非常成熟了。它已在软件工程领域得到了广泛的应用,我们应该理解一个成熟的技术不会像新兴技术那样快速发展。UML 是我们开展重构工作的基石,重要且可靠的工具、手段,后续会持续更新 UML 的基础知识和应用。
参考资料:
什么是统一建模语言(UML)?
https://www.visual-paradigm.com/cn/guide/uml-unified-modeling-language/what-is-uml/
UML 基础-火龙果软件工程
http://www.uml.org.cn/oobject/OObject.asp