Read this post in: de_DEen_USes_ESfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_TW

什么是UML?统一建模语言详解

UML代表统一建模语言它是一种标准化的建模语言,由一组集成的图表组成,旨在帮助系统和软件开发人员指定、可视化、构建和记录软件系统的各种构件,同时也适用于业务建模和其他非软件系统。

UML代表了一套经过实践证明在建模大型复杂系统方面行之有效的最佳工程实践。UML是开发面向对象软件及软件开发过程中的重要组成部分。UML主要通过图形化符号来表达软件项目的架构设计。使用UML有助于项目团队进行沟通、探索潜在设计方案,并验证软件的架构设计。本文将详细介绍UML的各个方面。

UML的起源

UML的目标是提供一种可被所有面向对象方法使用的标准符号,并选择和整合以往符号中的最佳元素。UML旨在适用于广泛的领域,因此它为各种系统和活动(例如分布式系统、分析、系统设计和部署)提供了相应的构造。

UML源于三种领先的面向对象建模符号的统一:

  1. 对象建模技术(OMT) [詹姆斯·伦巴ugh 1991] – 最适合用于分析和数据密集型信息系统。
  2. Booch [格雷迪·布奇 1994] – 在设计和实现方面非常强大。格雷迪·布奇长期与Ada语言合作,并对该语言的面向对象开发做出了重大贡献。尽管Booch方法功能强大,但其符号体系并不太受欢迎(其模型中大量使用云形符号——不够整洁)。
  3. OOSE(面向对象软件工程 [伊瓦尔·雅各布森 1992])——以一种称为用例的模型为特征。用例是一种强大的技术,用于理解整个系统的运行行为(这是面向对象方法传统上较薄弱的领域)。

1994年,软件界震惊不已,因为OMT的创造者吉姆·伦巴ugh离开通用电气,加入理性软件公司的格雷迪·布奇。双方合作旨在将各自的理念融合成一种统一的方法(暂定名称为“统一方法”)。

到1995年,OOSE的创造者伊瓦尔·雅各布森也加入了理性软件公司,他的理念(尤其是“用例”这一概念)被融入新的统一方法中——如今被称为统一建模语言1.0。伦巴ugh、布奇和雅各布森组成的团队被亲切地称为“三剑客”。

UML还受到当时其他面向对象符号的影响:

  • 梅勒和斯莱尔 [1998]
  • 科德和尤尔丹 [1995]
  • 维尔夫斯-布罗克 [1990]
  • 马丁和奥德尔 [1992]

UML还包含了当时其他主要方法中所没有的新概念,例如扩展机制和约束语言。

UML的发展历史

  1. 1996年,对象管理组(OMG)发布了首个提案请求(RFP),这成为促使这些组织合作提交联合RFP回应的催化剂。
  2. 理性公司与多家愿意投入资源以制定强大UML 1.0规范的组织共同组建了UML合作伙伴联盟。对UML 1.0规范贡献最大的组织包括:
    • 数字设备公司
    • 惠普公司
    • I-Logix
    • IntelliCorp
    • IBM
    • ICON Computing
    • MCI Systemhouse
    • Microsoft
    • Oracle
    • Rational Software
    • 德州仪器
    • Unisys
  3. 此次合作产生了UML 1.0,这是一种定义清晰、表达性强、功能强大且通用的建模语言。它于1997年1月作为最初的RFP响应提交给OMG。
  4. 1997年1月,IBM、ObjecTime、Platinum Technology、Ptech、Taskon、Reich Technologies和Softeam也分别向OMG提交了RFP响应。这些公司加入了UML合作伙伴,贡献了他们的想法,合作伙伴共同提出了修订后的UML 1.1响应。UML 1.1专注于提升UML 1.0语义的清晰度,并整合了新合作伙伴的贡献。该版本提交给OMG审议,并于1997年秋季被采纳。版本从1.1发展到1.5,随后推出UML 2.0至2.5(当前版本为UML 2.5)。

UML History

为什么使用UML?

随着软件的战略价值在许多公司中不断提升,业界寻求能够自动化软件生产、提高质量,同时降低开发成本和缩短上市时间的技术。这些技术包括组件技术、可视化编程、设计模式和框架。企业也在寻求应对规模和范围扩大带来的复杂性的方法。特别是,他们认识到需要解决诸如物理分布、并发性、复制、安全性、负载均衡和容错等反复出现的架构问题。此外,万维网的发展虽然简化了一些事情,却加剧了这些架构问题。统一建模语言(UML)正是为了满足这些需求而设计的。

  1. 为用户提供一种即用型、表达性强的可视化建模语言,用于开发和交换有意义的模型。
  2. 提供可扩展性和特殊化机制,以扩展核心概念。
  3. 与特定的编程语言和开发过程无关。
  4. 为理解建模语言提供正式基础。
  5. 促进面向对象工具市场的增长。
  6. 支持协作、框架、模式和组件等高层次开发概念。
  7. 整合最佳实践。

UML – 概述

在深入探讨UML理论之前,让我们先简要介绍一些UML中的主要概念。

需要注意的是,UML包含许多不同的图表(模型)需要适应。原因在于,一个系统可以从多个不同的视角进行观察。软件开发涉及众多利益相关者。

例如:

  • 分析师
  • 设计师
  • 程序员
  • 测试人员
  • 质量保证
  • 客户
  • 技术作者

所有这些人都对系统的不同方面感兴趣,而每个方面都需要不同层次的细节。例如,程序员需要理解系统的架构,并能够将设计转化为低级代码。相比之下,技术作者关注的是系统的整体行为,需要理解产品的功能。UML试图提供一种足够丰富的语言,使所有利益相关者都能从至少一个UML图中获益。

以下是UML 2图结构中所展示的13种图的简要概述:

结构图展示系统及其各部分在不同抽象层次和实现层次上的静态结构,以及它们之间的关系。结构图有七种类型:

行为图展示系统中对象的动态行为,可以描述为一系列随时间变化的过程。时间。行为图有七种类型:

UML Diagram Types

什么是类图?

类图是几乎所有面向对象方法中使用的核心建模技术。该图描述了系统中对象的类型以及它们之间存在的各种静态关系。

关系

有三种重要的主要关系:

  1. 关联——表示类型实例之间的关系(例如,一个人为一家公司工作,一家公司拥有多个办公室)。
  2. 继承 – 面向对象设计中用于ER图的最明显补充。它与面向对象设计中的继承有直接对应关系。
  3. 聚合 – 面向对象设计中的一种对象组合形式。

类图示例

Class Diagram

有关类图的更多详情,请阅读文章什么是类图?

什么是组件图?

在统一建模语言中,组件图描述了组件如何连接在一起以形成更大的组件或软件系统。它展示了软件组件及其依赖关系的架构。这些软件组件包括运行时组件、可执行组件以及源代码组件。

组件图示例

Component Diagram

有关组件图的更多详情,请阅读文章什么是组件图?

什么是部署图?

部署图有助于建模面向对象软件系统的物理方面。它是一种结构图,展示了系统架构作为软件工件部署(分布)到部署目标的结果。工件代表开发过程中产生的物理世界中的具体元素。它以静态视图建模运行时配置,并可视化应用程序中工件的分布情况。在大多数情况下,它涉及对硬件配置以及运行在其上的软件组件进行建模。

部署图示例

Deployment Diagram

有关部署图的更多详情,请阅读文章什么是部署图?

什么是对象图?

对象图是实例的图,包括对象和数据值。静态对象图是类图的一个实例;它展示了系统在某一时刻的详细状态快照。区别在于,类图表示由类及其关系组成的抽象模型,而对象图则表示某一特定时刻的实例,本质上是具体的。对象图的使用范围较为有限,主要用于展示数据结构的示例。

类图与对象图对比——一个示例

有些人可能会觉得难以理解UML类图与UML对象图之间的区别,因为它们都包含带有属性和相互连接的命名“矩形块”,这使得两种UML图看起来很相似。有些人甚至认为它们是相同的,因为在UML工具中,类图和对象图的符号都放在同一个图编辑器中——即类图编辑器。

但实际上,类图和对象图代表了代码库的两个不同方面。在本文中,我们提供了一些关于这两种UML图的想法,包括它们是什么、有何不同以及何时使用它们。

类图与对象图之间的关系

编程时你会创建“类”。例如,在一个在线银行系统中,你可以创建诸如“用户”、“账户”、“交易”等类。在一个课堂管理系统中,你可以创建诸如“教师”、“学生”、“作业”等类。每个类都包含表示类特征和行为的属性和操作。类图是一种UML图,你可以用它来可视化这些类、它们的属性、操作以及彼此之间的关系。

UML对象图展示了类的对象实例(在UML类图中绘制)在某一特定状态下的“样子”。换句话说,UML对象图可以被视为类(在UML类图中)在某一特定状态下被使用的一个实例。

如果你不喜欢这些定义,可以看一下下面的UML图示例。我相信你几秒钟内就能理解它们的区别。

类图示例

下面的类图示例展示了两个类——用户和附件。一个用户可以上传多个附件,因此这两个类在附件一侧通过具有多重性0…*的关联进行关联。

Class Diagram

对象图示例

下面的对象图示例展示了当彼得(即一个用户)尝试上传两个附件时,用户和附件类的对象实例“看起来是什么样子”。因此,有两个待上传附件的实例规范。

Object Diagram

有关对象图的更多详情,请阅读文章什么是对象图?

什么是包图?

包图是UML结构图的一种,用于展示包以及包之间的依赖关系。包图可用于展示系统的不同视图,例如多层(也称为多层)应用程序——多层应用程序模型。

包图示例

Package Diagram

有关包图的更多详细信息,请阅读文章什么是包图?

什么是组合结构图?

组合结构图是UML 2.0新增的几种新构件之一。组合结构图类似于类图,是一种主要用于从微观视角建模系统的组件图,但它展示的是单个部件的内部结构,而非整个类。它是一种静态结构图,用于展示类的内部结构以及该结构所支持的协作关系。

该图可包含内部部件、部件之间或类的实例与外部世界交互的端口,以及部件或端口之间的连接器。组合结构是由一组在运行时协同工作以实现特定目标的相互连接的元素组成。每个元素在协作中都有其明确的角色。

组合结构图示例

Composite Structure Diagram

有关组合结构图的更多详细信息,请阅读文章什么是组合结构图?

什么是配置文件图?

通过配置文件图,您可以创建领域和平台特定的构造型,并定义它们之间的关系。您可以通过绘制构造型形状,并通过以资源为中心的接口将其与组合或泛化关联起来,来创建构造型。您还可以定义并可视化构造型的标记值。

配置文件图示例

Profile Diagram

有关配置文件图的更多详细信息,请阅读文章UML中的配置文件图是什么?

什么是用例图?

用例模型以用例的形式描述系统的功能需求。它是系统预期功能(用例)及其环境(参与者)的模型。用例使您能够将系统所需执行的功能与系统如何满足这些需求联系起来。

可以把用例模型想象成一份菜单,就像你在餐厅里看到的那种。通过查看菜单,你可以了解有哪些菜品可供选择,每道菜的具体内容及其价格。你还能知道这家餐厅提供哪种菜系:意大利菜、墨西哥菜、中国菜等。通过查看菜单,你就能大致了解在这家餐厅用餐的体验。实际上,菜单正在“模仿”餐厅的行为。

由于它是一种非常强大的规划工具,因此用例模型在整个开发周期的所有阶段都被团队所有成员使用。

用例图示例

Use Case Diagram

有关用例图的更多详细信息,请阅读文章什么是用例图?

什么是活动图?

活动图是逐步活动和操作工作流的图形化表示,支持选择、迭代和并发。它描述目标系统的控制流,例如探索复杂的业务规则和操作、描述用例和业务流程。在统一建模语言中,活动图旨在对计算过程和组织过程(即工作流)进行建模。

活动图示例

Activity Diagram

有关活动图的更多详细信息,请阅读文章什么是活动图?

什么是状态机图?

状态图是UML中用于描述系统行为的一种图表,基于大卫·哈雷尔的状态图概念。状态图展示了允许的状态和转换,以及影响这些转换的事件。它有助于可视化对象的整个生命周期,从而帮助更好地理解基于状态的系统。

状态机图示例

State Machine Diagram

有关状态机图的更多详细信息,请阅读文章什么是状态机图?

什么是序列图?

序列图根据时间顺序对对象之间的协作进行建模。它展示了在特定用例场景中对象如何相互交互。借助先进的可视化建模功能,您只需点击几次即可创建复杂的序列图。此外,一些建模工具(如Visual Paradigm)可以根据您在用例描述中定义的事件流程生成序列图。

序列图示例

Sequence Diagram

有关序列图的更多详细信息,请阅读文章什么是序列图?

什么是通信图?

与序列图类似,通信图也用于对用例的动态行为进行建模。与序列图相比,通信图更侧重于展示对象之间的协作,而非时间顺序。它们在语义上是等价的,因此一些建模工具(如Visual Paradigm)允许您从一个生成另一个。

通信图示例

Communication Diagram

有关通信图的更多详细信息,请阅读文章什么是通信图?

什么是交互概览图?

交互概览图专注于交互控制流的概览。它是活动图的一种变体,其中节点为交互或交互发生。交互概览图描述了隐藏消息和生命线的交互。您可以在交互概览图中链接到“真实”图表,从而在图表之间实现高度可导航性。

交互概览图示例

Interaction Overview Diagram

有关交互概览图的更多详细信息,请阅读文章什么是交互概览图?

什么是时序图?

时序图展示了对象在给定时间段内的行为。时序图是序列图的一种特殊形式。时序图与序列图的区别在于坐标轴是相反的,因此时间从左向右增加,生命线以垂直排列的独立单元显示。

时序图示例

Timing Diagram

有关时序图的更多详细信息,请阅读文章什么是时序图?

学习UML。绘制UML。

获取Visual Paradigm社区版——一款免费的UML工具,可帮助您更快、更有效地学习UML。Visual Paradigm社区版支持所有UML图表类型。其获奖的UML建模器直观且易于使用。

免费下载

UML术语与词汇表

  • 抽象类 – 一个永远不会被实例化的类。此类永远不会存在实例。
  • 参与者 – 一个启动与系统相关事件的对象或人。
  • 活动:活动图中的一个步骤或操作。表示系统或参与者执行的操作。
  • 活动图:一种增强版的流程图,用于展示流程中的步骤、决策以及并行操作,例如算法或业务流程。
  • 聚合 – 是另一个类的一部分。在图中以空心菱形显示在包含类旁边。
  • 制品 – 描述设计过程中某一步骤输出的文档。描述可以是图形的、文本的,或两者的结合。
  • 关联 – 模型中两个元素之间的连接。它可以表示代码中的成员变量,人员记录与其所代表的人之间的关联,两类工人之间的关系,或其他类似关系。默认情况下,关联中的两个元素相互了解且地位平等。关联也可以是可导航的,即源端了解目标端,但反之则不一定。
  • 关联类:表示两个其他类之间关联并为其添加信息的类。
  • 属性 – 对象的一个特征,可用于引用其他对象或保存关于对象状态的信息。
  • 基类:通过泛化关系定义被子类继承的属性和操作的类。
  • 分支:活动图中的一个决策点。多个转换从分支发出,每个都带有保护条件。当控制到达分支时,必须恰好有一个保护条件为真,控制将遵循相应的转换。
  • :具有相似对象的类别,所有对象都由相同的属性和操作描述,并且都具有赋值兼容性。
  • 类图:展示系统中的类及其之间的关系。
  • 分类器:具有属性和操作的UML元素。具体包括参与者、类和接口。
  • 协作:通信图中两个对象之间的关系,表示对象之间可以相互传递消息。
  • 通信图:一种强调对象角色的图,展示操作是如何完成的。
  • 组件:系统中可部署的代码单元。
  • 组件图:展示各种组件和接口之间关系的图表。
  • 概念 – 需要包含在领域模型中的名词或抽象概念。
  • 构建阶段 – Rational统一过程的第三阶段,在此阶段于构建的系统中实现多个功能迭代。这是大部分工作进行的阶段。
  • 依赖:表示一个分类器了解另一个分类器的属性和操作,但并未与第二个分类器的任何实例直接连接的关系。
  • 部署图:展示各种处理器之间关系的图表。
  • 领域 – 系统所涉及的论述宇宙的部分。
  • 精化阶段 – Rational统一过程的第二阶段,允许进行额外的项目规划,包括构建阶段的迭代。
  • 元素:模型中显示的任何项目。
  • 封装 – 对象内的数据是私有的。
  • 泛化 – 表示一个类是另一个类(超类)的子类。空心箭头指向超类。
  • 事件:在状态图中,这表示一个触发系统采取行动或改变状态的信号、事件或输入。
  • 最终状态:在状态图或活动图中,这表示图表完成的点。
  • 分叉:活动图中多个并行控制线程开始的点。
  • 泛化:一种继承关系,子类继承并扩展基类的属性和操作。
  • GoF – 四人组设计模式。
  • 高内聚 – 一种GRASP评估模式,确保类不过于复杂,且不执行无关的功能。
  • 低耦合 – 一种GRASP评估模式,用于衡量一个类对另一个类的依赖程度或连接程度。
  • 启始阶段 – Rational统一过程的第一个阶段,涉及初步概念化和项目的启动。
  • 继承 – 子类从其父类(超类)继承属性或特征。这些属性可以在子类中被重写。
  • 初始状态:在状态图或活动图中,这表示图表开始的点。
  • 实例 – 对象是类的一个实例。类充当创建对象的模板。可以创建任意数量的该类的实例。
  • 接口:一种定义属性和操作的分类器,这些属性和操作构成行为契约。提供者类或组件可以选择实现该接口(即实现其属性和操作)。客户端类或组件可以依赖该接口,从而使用提供者而不需了解实际提供者类的任何细节。
  • 迭代 – 项目中的一个小型项目部分,用于添加一些小的功能。包括分析、设计和编码的开发周期。
  • 汇合:在活动图中,多个并行控制线程同步并重新汇合的点。
  • 成员:分类器中的属性或操作。
  • 合并:在活动图中,不同控制路径汇聚的点。
  • 消息 – 一个对象向另一个对象发出的请求,要求接收对象执行某个操作。这本质上是对接收对象中方法的调用。
  • 方法 – 对象中的一个函数或过程。
  • 模型 – 核心UML构件。由各种元素组成,这些元素以层次结构排列,并在元素之间存在关系。
  • 多重性 – 显示在领域模型中外部概念框旁边,表示对象与其他对象之间的数量关系。
  • 导航:表示关系的哪一端了解另一端。关系可以具有双向导航(两端互相了解)或单向导航(一端了解另一端,但反之不成立)。
  • 符号表示法 – 用于创建分析和设计方法的图形化文档及其规则。
  • 注释:添加到图表中的文本注释,用于更详细地解释图表。
  • 对象 – 在活动图中,指从活动接收信息或向活动提供信息的对象。在协作图或顺序图中,指参与图中描述场景的对象。一般而言:给定分类器(参与者、类或接口)的一个实例或示例。
  • – 一组在逻辑上属于同一组的UML元素。
  • 包图:所有元素均为包和依赖关系的类图。
  • 模式 – 解决对象交互责任分配问题的方案。它是对一种常见且广为人知问题的命名解决方案。
  • 参数:操作的一个参数。
  • 多态性 – 相同的消息,不同的方法。也用作一种模式。
  • 私有:应用于属性或操作的可见性级别,表示只有包含该成员的分类器内部的代码才能访问该成员。
  • 处理器:在部署图中,表示可以部署代码的计算机或其他可编程设备。
  • 受保护:应用于属性或操作的可见性级别,表示只有包含该成员的分类器或其子类中的代码才能访问该成员。
  • 公共:应用于属性或操作的可见性级别,表示任何代码都可以访问该成员。
  • 阅读方向箭头 – 表示领域模型中关系的方向。
  • 实现: 表示一个组件或类提供了某个接口。
  • 角色 – 在领域模型中使用,是关于实体所扮演角色的可选描述。
  • 顺序图: 一种显示对象在时间上的存在以及对象之间随时间传递的消息以执行某种行为的图表。状态图 – 一种显示对象所有可能状态的图表。
  • 状态: 在状态图中,这表示系统或子系统的某种条件或状态:它在某一时刻正在做什么,以及其数据值。
  • 状态图: 一种显示系统或子系统状态、状态之间的转换以及引发转换的事件的图表。
  • 静态: 应用于属性的修饰符,表示该属性只有一个副本被分类器的所有实例共享。应用于操作的修饰符,表示该操作是独立的,不作用于分类器的特定实例。
  • 构造型: 应用于模型元素的修饰符,表示通常无法在UML中表达的内容。本质上,构造型允许您定义自己的“UML方言”。
  • 子类: 通过泛化关系继承超类定义的属性和操作的类。
  • 泳道: 活动图中的一个元素,表示系统或领域中负责特定活动的部分。泳道中的所有活动均由泳道所代表的对象、组件或参与者负责。
  • 时间盒 – 每个迭代都有固定的时间限制和具体目标。
  • 转换: 在活动图中,这表示从一个活动或分支或合并或分叉或汇合到另一个的控制流。在状态图中,这表示从一个状态到另一个状态的变化。
  • 转换阶段 – Rational统一过程的最后阶段,在此阶段用户接受培训以使用新系统,系统也向用户开放。
  • UML – 统一建模语言通过文本和图形化文档,使对象之间的关系更加紧密,从而增强软件项目的分析与设计。
  • 用例: 在用例图中,这表示系统对参与者请求所采取的动作。
  • 用例图: 一种显示参与者与用例之间关系的图表。
  • 可见性:用于属性或操作的修饰符,表示哪些代码可以访问该成员。可见性级别包括公共、受保护和私有。
  • 工作流—— 一组产生特定结果的活动。

热门UML书籍

以下是一些畅销的UML书籍,你可以阅读以学习UML:

  1. UML精粹:标准对象建模语言简明指南
  2. UML 2与统一过程:实用的面向对象分析与设计
  3. 学习UML 2.0
  4. 使用UML构建Web应用程序
  5. 统一建模语言参考手册
  6. UML™ 2.0风格要素
  7. 面向Java程序员的UML
  8. Schaum’s UML概要
  9. 统一建模语言用户指南
  10. UML 2认证指南:基础与中级考试
  11. UML中的面向对象设计基础
  12. 使用UML进行用例驱动的面向对象建模:一个带注释的电子商务示例
  13. 使用UML设计灵活的面向对象系统
  14. 使用UML进行用例驱动的面向对象建模
  15. 使用UML 2.0的系统分析与设计:面向对象方法
  16. UML 2.0速成
  17. 面向对象的分析与设计及其应用
  18. UML详解
  19. 设计模式:可重用面向对象软件的元素
  20. 对象入门:使用UML 2.0的敏捷模型驱动开发

相关链接

  1. 专业的UML设计工具,用于可视化建模


Visual Paradigm Online

Leave a Reply