统一建模语言(Unified Modeling Language,UML)是一种通用的标准化建模语言,又称标准建模语言。它是一个支持模型化和软件系统开发的图形化语言,面向对象设计,独立于任何具体
程序设计语言,具有广泛的建模能力和坚实的理论基础,能为软件开发的所有阶段提供模型化和
可视化支持,属于一个庞大的表示法体系。
自1994年起,为达成建模语言统一效果,格雷迪·布奇(Grady Booch)和吉姆·鲁姆博夫(Jim Rumbaugh)将Booch 93和OMT-2统一了起来。1995年,在OOSE的创始人伊万·雅各布森(Ivar
Jacobson)加入开发后,统一建模语言的第一个公开版本发布,即UM 0.8。次年6月,统一建模语言推出0.9版本,自此正式改称为UML。至同年底,UML已经稳占面向对象技术市场85%的份额。1997年1月,UML 1.0正式发布上线。2003年6月,UML 2.0宣告完成。该版本与UML1比较,有显著改进。随后,UML不断更新迭代,于2017年12月发布了2.5版本。同时,UML也被ISO认定为标准,即ISO/IEC19501和ISO/IEC19595。
统一建模语言的组织结构由构架、基本构造块(包含建模的事物、关系和图)以及实现特定目标的公共机制三部分组成,建模类型分为功能模型、对象模型和动态模型三种,包括类图、
用例图、顺序图等。其建模能力比其他面向对象建模方法更强。它适合于一般系统的开发,对并行、
分布式系统的建模尤为适宜,已成功应用于电信、金融、电子、国防等领域之中。
概述
定义
统一建模语言利用
视图、图、模型元素和通用机制等,从不同角度来观察和描述一个软件系统的体系结构,是一个庞大的表示法体系。作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。
UML语义
UML语义是指描述基于UML、精确的元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的最佳表达方法所造成的影响。此外,UML还支持对元模型的扩展定义。
UML表示法
UML的表示法定义了UML中使用的符号以及符号的表示方法,为开发者或开发工具使用这些图形符号和文本语法来进行系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上属于UML元模型的实例。UML表示法分为通用表示和图形表示两部分组成。
主要特点
UML是一种定义良好、易于表达、功能强大且普遍适用的设计语言,它融入了
软件工程领域的新思想、新方法和新技术,并支持软件开发的全过程。其主要特点表现为六点。
UML为统一的建模语言:UML语言汲取了面向对象及一些非面向对象方法的思想,使用统一的元素及其表示符号,为用户提供无二义性的设计模型交流方法,早已被对象管理组织(OMG)认定为建模语言的标准。
UML支持面向对象:UML支持面向对象的软件开发,支持面向对象思想的主要概念,所提供的图形元素能够简洁明了地表示这些概念及其关系。
UML支持
可视化建模:UML是一种图形化语言,它自然地支持可视化建模,用图形符号对系统建模。此外,UML还支持扩展机制,用户可以通过它自定义建模元素的各种属性。
UML具备强大的表达能力:UML在演进的过程中提出了模板、进程和线程等新的概念,这些概念有效地支持了各种抽象领域和系统内核机制的建模。同时,UML强大的表达能力使它可以对各种类型的软件系统建模,包括商业领域的业务过程。
UML独立于开发过程:UML支持系统与应用所有的开发过程,并支持系统与应用开发过程中的任一阶段。
UML支持模型与代码之间的转换:模型可以被UML工具转化成指定的程序语言代码,程序语言代码也可以在UML工具的作用下转换为模型。
目标
UML的目标是以面向对象图的方式来描述任何类型的系统,促进面向对象工具市场的发展。具体来说,它的开发和运用是为了提供深度的
可视化建模语言给用户,进而让用户能够发展和改变有意义的模型,同时也是为了提供可扩展性和专有化机制,使系统或应用在扩展时无需对核心概念进行修改。与此同时,UML的目的还包括了提供合理基础,以便人们理解标准。此外,UML还想应用于任何
程序设计语言平台、工具平台以及软件开发的过程,完成与具体的实现和过程相分离,并追求持续升级迭代、高适应性和
可用性、对高级概念的支持,欲达成与最优
软件工程实践经验的相结合。
功能
为软件系统的开发提供可视化模型
在实际开发软件、编写代码的过程时,除了使用文本编辑表达式和算法外,大多数程序员仍要做一些简单的建模工作。如果不建立模型,软件系统中的某些东西很难用文本的
编程语言来表达清楚,且可能导致代码的相关信息永远丢失,不利于后续的软件维护。但个人所做简单的模型并不利于交流,难被其他开发人员理解。而UML作为一种统一的、标准的建模语言,较好地解决了这一问题。UML符号具有定义良好的语言,不会引起歧义,使得交流更加方便。此外,UML作为
可视化的建模语言,为系统提供了图形化的可视模型,使系统的结构变得直观、易于理解。利用UML为软件系统建立模型,既有利于交流,也有利于对软件的维护。
规约软件系统的开发过程
规约(Specifying)意味着建立的模型是准确的、无歧义的、完整的。UML定义了在开发软件系统过程中做出的所有重要的分析、设计和实现决策的规格说明。
构造软件系统的实施框架
UML不是可视化的
编程语言,但它的模型可以直接对应于各种各样的编程语言。简而言之,开发者可从UML的模型生成Java、
C++等语言的编码,甚至能够生成关系数据库中的表。从UML模型生成编程语言代码的过程被称为前向工程(Forward Engineering),从代码实现生成UML模型的过程被称为
逆向工程(Reverse Engineering)。Rational Rose和Prosa等诸多CASE工具既支持前向工程,也支持逆向工程。
为软件系统的产出建立文档
在软件的开发过程中,为软件系统建立清晰、完整、准确的文档是非常重要的。UML为描述需求、测试、项目规划活动和软件发布管理活动的建模提供了语言(即建模图形元素和符号),也可以为系统的体系结构及其所有细节建立文档。
发展历程
初步开发
20世纪80年代初期,面向对象分析和设计建模语言的数量从不到10种增加到了50多种。众多方法学家和语言创造者努力推广自己的产品并在实践中不断进行完善。然而每种方法各有长短,软件开发人员和用户不了解不同建模语言的优缺点及它们相互之间的差异,所以很难选择最适合各自要求的建模语言。
在90年代,少数几种方法开始在一些关键性的项目中发挥作用,其中最引人注目的有Booch 93、OOSE和OMT-2等。此时面向对象方法已经成为软件分析和设计方法的主流,这些方法所做的最重要的尝试是在
程序设计艺术与
计算机科学之间寻求合理的平衡。因此,在客观上,极有必要在比较不同建模语言的优缺点及总结面向对象技术应用实践的基础上求同存异,达成建模语言统一效果。Grady Booch和Jim Rumbaugh在1994年开始致力于这一工作。他们首先将Booch 93和OMT-2统一起来,并于1995年10月发布了第一个公开版本,称为统一方法(Unitied Met hod)UM 0.8。
改进完善
1995年秋,OOSE的创始人Ivar
Jacobson加入开发,并采用了他的用例思想。经过Grady Booch、Jim Rumbaugh及Ivar Jacobson三人的共同努力,于1996年6月和10月分别发布了两个新的版本,即UML 0.9和UML0.91。由于UM只是一种建模语言,而不是一种建模方法,自0.9版本起,正式改称为UML。
1996年,一些机构将UML当作其商业策略已日趋明显。UML的开发者得到了来自公众的正面反应,并倡议成立了“UML成员协会”,以完善、加强和促进UML的定义工作。当时,UML成员协会的成员有
迪吉多、HP、I-Logix、Itellicorp、IBM等。1996年底,UML已经稳占面向对象技术市场85%的份额。1997年1月,UML 1.0发布。同年11月,OMG开始采纳UML作为其标准建模语言。从此,UML的相关开发、推广等工作交由
omg负责,同月还发布了UML 1.1。然而由于这两个UML版本的提交过程比较仓促,所以其中还是存在了一些问题。
1998年6月,OMG的修订任务组提交了UML 1.2,它主要纠正了UML 1.1中的印刷和语法错误以及某些逻辑上的明显不一致,但是并没有涉及对重要技术的改进。1999年6月提交的UML 1.3是建模语言规范的第一个成熟版本,这一版本修改了印刷和语法错误,解决了逻辑上的不完备性,修正了技术上的错误和疏漏,阐明了模糊的和有歧义的表述,并改进了文档的组织性和可读性。
迭代发展
2001年5月,UML 1.4推出。UML 1.4在UML 1.3的基础上进行了微小修改,除了修改技术上的错误、澄清有关细节外,更重要的是对扩展机制的图形表示、构件和制品(
构件)以及协作和模式方面作出的改动。2003年3月,UML 1.5发布。同年6月于
巴黎召开的
omg技术会议上,分析和设计专案小组投票通过了UML 2.0上层结构规范,至此UML 2.0宣告完成。UML 2.0是比UML1有显著改进的新版本,此后4个UML 2.0规范相继形成,陆续进入ISO的标准化日程。而在OMG的组织下,UML还经历了多次版本升级。2017年12月,UML 2.5发布。同时,UML也被ISO认定为标准,即ISO/IEC19501和ISO/IEC19595。
在完善过程中,UML吸收了百家之长,融合了来自很多其他面向对象方法的优点,如Meyer前置条件和
后置条件、Odell分类、Shlaer-Meller对象生存周期等。
组织结构
UML的组成结构直接奠定了UML的知识体系结构,一般包括了构造块、规则、公共机制以及体系结构四个部分。其中,前三个部分是对UML中存在的各个要素的抽象表现,UML体系结构则负责将其他三个组成构件有机地组织起来,从而形成一个完整的体系。
构造块
UML中包括了两种基本构造块,即事物构造块和关系构造块。其中,事物构造块是模型中最具有代表性的抽象机制,一共包括结构事物、行为事物、分组事物及注释事物4大类;关系构造块用于表示模型元素之间相互连接的关系,较为常见的有依赖关系、关联关系、泛化关系和实现关系等。
事物构造块
关系构造块
规则
像其他语言一样,UML自有一套规则。这些规则用来定义和支配基本构造块之间如何协作,其中包括命名、范围、可见性、完整性以及执行。同时,UML的规则还暗示用户专注于最重要的分析、设计和实现问题,这些问题将促使模型随时间的推移而具有良好的结构。
公共机制
统一建模语言的公共机制共4种,即规格说明(Specification)、修饰(Adornment)、通用划分(Common Division)和扩展机制(Extensibility Mechanism)。 这些通用的公共机制,可贯穿于整个建模过程的方方面面。
规格说明
UML不只是一个图形语言,还为每一个UML图形规定了文字说明的语法和语义。例如,一个类图标的背后必有一套说明,它提供了关于属性、操作、行为等的描述。通常使用UML的图标表示法
可视化一个系统,使用UML的说明叙述该系统的细节。
修饰
大多数的UML元素都有惟一的、直接的图形表示法,以此来表达该元素的最重要特征。除此之外,还可以对该元素加上各种修饰性说明,用于描述该元素其他方面的细节特征。例如,对于一个对象类,最基本的图形表示法是一个矩形,其中包含了类的名称、属性和操作。此外可以加上一些修饰,如可见性标记。
通用划分
通用划分是一种保证不同抽象概念层次的机制,包括类和对象的划分、接口和实现的划分。其中,类和对象的划分保证了实例及其抽象的划分,使得对一组实例对象的公共静态和动态特征无需逐一管理、描述和实现。接口和实现的划分则保证了一系列操作的规约和不同类对该操作的具体实现。
拓展机制
尽管UML已经是一套功能较强、表现力丰富的建模语言,但有时仍难以准确表达模型的许多细小方面。因此,UML的开发者们为UML设计了一种简单、通用的扩展机制。扩展机制能够应用于UML的各种建模元素之中,可扩展UML,也可把UML用户化,更便于完成软件系统的开发工作。
体系结构
UML的构架由5类
视图组成,包括用例视图、逻辑视图、进程视图(并发视图)、构件视图(组件视图)和部署视图。这5类视图属于“4+1”视图模型,由菲利普·克鲁赫滕(Philippe Kruchten)提出,从五个不同的视角来描述软件体系结构。每一个视图只关心系统的一个侧面,五个视图结合在一起才能反映系统的软件体系结构的全部内容。它们对于软件体系结构的
可视化、详细描述、构造等方面都极为重要。每个视图都是某个特定方面对于整个系统描述的一个投影,结合起来可以完整描述整个系统,其中用例视图是描述系统功能的核心和其他视图的出发点。
建模类型
在统一建模语言中,有三种主要的建模类型:功能模型、对象模型和动态模型。其中,功能模型有用例图,对象模型有类图、对象图、包图,动态模型有顺序图、活动图、
状态图。除此之外,UML还包括了组件图、部署图以及协作图。
功能模型
功能模型是指从用户角度展示系统功能的模型。在UML中,通过
用例图建立实现用户需求的功能模型。用例图(Use Case Diagram)为用例、相关参与者及其关系的图形化表示,详细描述了参与者以及他们如何与软件系统交互,便于人们理解软件系统的范围和提供给参与者的功能。用例模型的主要元素包括系统边界、用例及执行者(参与者),这些元素之间的关系主要有关联、扩展、包含、泛化等。
在软件系统开发中,对于相关的不同人员,用例模型有着不同的作用,如为客户指明了系统的功能、帮助开发者理解系统功能等。它从用户的角度切入,对系统的需求展开描述,是导出对象模型和动态模型的依据。
对象模型
对象模型是对客观世界实体中对象及其相互之间关系的
映射,描述了系统的静态结构,采用对象、属性、操作、关联等概念来展示系统的结构和基础。在
系统分析阶段,对象建模的主要任务是建立问题域的概念模型。这个模型描述了现实世界中的类与对象以及它们之间的关系,而非实际的软件类或构件。
对象模型用类符号、类实例符号、类的继承关系、聚集关系和关联关系等表示。有些对象具有主动服务功能,称为主动对象。当系统较复杂时,可以划分主题,画出主题图,以利于对问题的理解。对象模型为建立动态模型和功能模型,提供了实质性的框架。
动态模型
动态模型用以规范对象的行为,表示瞬时系统、行为化系统的控制性质,描述对象和关系的状态、状态转换的触发事件、对象的服务(行为)。其显示出对象在系统运行的不同时期、不同时刻的动态交互情况,对开发交互式系统起到了很重要的作用。在UML中,使用各种行为图来表达系统的动态模型,如顺序图、活动图等。
其他模型
阶段过程
利用UML进行
系统分析建模的过程主要包括静态建模和动态建模两个阶段。在UML的静态建模阶段,主要根据系统需求建立系统静态结构,对系统进行分析和描述。在UML的动态建模阶段,主要描述系统的动态行为,需要明确系统中各个对象的操作及变化状态,令静态对象拥有活跃性和可执行性。
方法步骤
UML的建模方法步骤大致分为四步:第一,描述需求,进行需求分析;第二,根据需求建立系统的静态模型,以构造系统的结构;第三,展开详细设计,描述系统的行为,并对系统设计进行细化;第四,实现系统设计。这其中的第一步和第二步属于UML的静态建模机制,所建立的模型皆为静态模型,包括
用例图、类图、包图、对象图、构件图和配置图等五种图形。而第三步则属于UML的动态建模机制,该步骤内所建立的模型包括
状态图、活动图、顺序图和协作图四种图形,或可执行,或可表示执行时的时序状态或交互关系。
建模工具
由于UML已经成为建模的国际标准,很多公司推出了支持UML的建模工具,最有影响、使用最广的是Rational公司旗下的ROSE,此外还有ArgoUML、IBM Rational
软件 Architect等,这些工具都给
可视化建模带来了极大的便利。
实际应用
应用领域
UML是在多种面向对象建模方法的基础上发展起来的软件建模语言,它的应用范围非常广泛,可以描述许多类型的系统;也可以用于软件开发的各个阶段,从需求规格描述到系统完成后的测试与维护。
不同类型系统的应用
UML可直接为面向对象软件系统创建模型,也可用来描述其他类型的软件系统、商业机构或过程,常见应用包括了信息系统、具有实时要求的工业系统或工业过程嵌入式实时系统、分布式系统、系统软件、商业系统等。
软件开发过程中的应用
在数据库设计中的应用
数据库设计即从需求到实现的过程,通常包括数据库建模和数据设计。前者着重解决逻辑
数据模型和物理数据模型;而后者着眼于从整个需求的产生、业务过程、逻辑分析、物理数据库构建到数据库的开发的全过程。在这些过程中,都可以使用UML来进行,如使用
用例图来描述系统功能以及支持业务处理环境的模型、使用活动图来显示处理流程等。
应用实例
装备维修训练系统分析与设计
在装备维修训练系统的实际开发应用中,将UML运用到分析与设计阶段,采用UML
流程图对维修训练
系统分析过程建模,并利用UML对保障性分析过程及维修训练设计过程建模,明确基本活动的节点、设计的一般过程,加强了对装备维修训练相关过程的理解和把握。
柔性管理信息系统开发
在柔性管理信息系统的实际开发应用中,采用应用建模的方法,利用了UML完成系统的需求分析、
概念设计和详细设计,构建出系统的需求模型、静态结构模型和动态的行为模型,加深用户对系统的开发平台、体系架构和实现功能的认识;同时根据用户意见,持续对系统的模型和文档进行修补,大幅减少系统实现阶段的工作量,有效应对用户的需求变更,并提高系统对企业环境的适应能力,进一步解决了企业需求“柔性”和管理信息系统自身“刚性”的矛盾问题。
面向领域的电子商务系统建模
面向领域的电子商务系统建模机制利用UML的静态结构建模、动态行为建模等机制,围绕“
数据交换”这一电子商务核心业务,将电子商务建模规范化,使之形成以UML用例模型为业务建模、UML活动图和泳道图为工作流建模、UML顺序图为业务过程建模、文档和UML类图为业务词汇表建模的体系。基于该体系建立的
中国石化电子商务平台物资采购业务,在运营两年多后网上业务量已超过总业务量的50%。
常见扩展
ArchiMate
ArchiMate是The Open Group为
企业架构提供的开放和独立的建模语言,由不同的工具供应商和咨询公司提供支持。它提供了一组清晰的概念和架构域之间的关系,并提供了一个简单而统一的结构来描述这些域的内容。它是一种精简而简单的语言,其中的几个概念特意借鉴了UML,以提供一个简单的桥梁。
SysML
SysML是一种通用图形建模语言,用于指定、分析、设计和验证
复杂系统,这些系统可能包括硬件、软件、信息、人员、程序和设施。该语言为建模系统需求、行为、结构和参数提供了具有语义基础的图形表示,用于与其他工程分析模型集成。它表示了UML2的一个
子集,具有满足UML对系统工程RFP的要求。
UML for Systems Engineering RFP
UML for Systems Engineering RFP由OMG公司和国际系统工程委员会(INCOSE)联合开发,并由OMG公司于2003年3月发布。其规定了扩展UML以支持系统工程社区需求的要求。
未来展望
UML来自于产业界、工程界的实践总结,同时也属于在归纳基础上进行理论
升华的产物,其核心内容反映了多年来全球软件工业的领导者在软件设计构造领域的
最佳实践和成功经验,因而仍旧具有很高的实用价值。而随着技术的革新和对缺陷的不断修复,UML作为面向对象的一种标准语言,将会成为推动
人工智能、科技金融、自动化、无人驾驶等众多领域的主力军,并用自身的优势和特点来推动科学技术的发展进步。