分享

什么是统一建模语言 (UML)?

 warrenlynch 2021-09-15

UML 是统一建模语言的缩写,是一种标准化建模语言,由一组集成的图表组成,旨在帮助系统和软件开发人员指定、可视化、构建和记录软件系统的工件,以及用于业务建模和其他非软件系统。 UML 代表了一组最佳工程实践,这些实践在大型复杂系统的建模中已被证明是成功的。 UML 是开发面向对象软件和软件开发过程的一个非常重要的部分。 UML 主要使用图形符号来表达软件项目的设计。 使用 UML 有助于项目团队沟通、探索潜在的设计并验证软件的架构设计。 在本文中,我们将详细介绍什么是 UML、UML 的历史、每种 UML 图类型的描述以及 UML 示例。

您是否正在寻找免费的 UML 工具来更快、更轻松、更快速地学习 UML? Visual Paradigm Community Edition 是一个支持所有 UML 图类型的 UML 软件。 它是国际屡获殊荣的 UML 建模器,但它易于使用、直观且完全免费。

免费下载

UML 的起源

UML 的目标是提供所有面向对象方法都可以使用的标准符号,并选择和集成前体符号的最佳元素。 UML 被设计用于广泛的应用程序。 因此,它为广泛的系统和活动(例如,分布式系统、分析、系统设计和部署)提供了构造。

UML 是由 OMT 统一而来的符号

  1. 对象建模技术 OMT [ James Rumbaugh 1991] - 最适合分析和数据密集型信息系统。

  2. Booch [ Grady Booch 1994] - 非常适合设计和实现。 Grady Booch 曾广泛使用 Ada 语言,并且一直是该语言面向对象技术开发的主要参与者。 尽管 Booch 方法很强大,但符号却不太受欢迎(他的模型中有很多云的形状——不是很整齐)

  3. OOSE(面向对象的软件工程 [ Ivar Jacobson 1992]) - 以称为用例的模型为特色。 用例是一种用于理解整个系统行为的强大技术(面向对象传统上薄弱的领域)。

1994 年,OMT 的创建者 Jim Rumbaugh 离开通用电气并加入 Rational 公司的 Grady Booch 时震惊了软件世界。合作的目的是将他们的想法合并成一个单一的、统一的方法(该公司的工作名称)。方法确实是“统一方法”)。

到 1995 年,OOSE 的创建者 Ivar Jacobson 也加入了 Rational,他的想法(特别是“用例”的概念)被输入到新的统一方法中——现在称为统一建模语言1。 Rumbaugh、Booch 和 Jacobson 团队被亲切地称为“三个朋友”

UML 也受到其他面向对象符号的影响:

  • 梅勒和施莱尔 [1998]

  • 科德和尤尔登 [1995]

  • 维尔夫斯-布洛克 [1990]

  • 马丁和奥德尔 [1992]

UML 还包括当时其他主要方法中不存在的新概念,例如扩展机制和约束语言。

UML 的历史

  1. 1996 年, ) 发布的第一个提案请求 (RFP) 对象管理组 (OMG 为这些组织联合起来产生联合 RFP 响应提供了催化剂。

  2. Rational 与几个愿意投入资源以实现强大的 UML 1.0 定义的组织建立了 UML 合作伙伴联盟。 对 UML 1.0 定义贡献最大的包括:

    • 数字设备公司

    • 生命值

    • i-Logix

    • 智能公司

    • IBM

    • 图标计算

    • MCI系统屋

    • 微软

    • 甲骨文

    • 理性软件

    • TI

    • 优利系统

  3. 这种合作产生了 UML 1.0,这是一种定义明确、表达能力强、功能强大且普遍适用的建模语言。 这是在 1997 年 1 月提交给 OMG 作为初始 RFP 响应。 1

  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 增强到 1.5,随后从 01 到 06 被采用到 UML 2.1(现在 UML 当前版本是 2.5)


    UML 历史


    为什么选择 UML

    随着软件对许多公司的战略价值的增加,该行业正在寻找技术来自动化软件生产并提高质量并降低成本和上市时间。 这些技术包括组件技术、可视化编程、模式和框架。 随着系统范围和规模的增加,企业还寻求技术来管理系统的复杂性。 特别是,他们认识到需要解决反复出现的架构问题,例如物理分布、并发性、复制、安全性、负载平衡和容错。 此外,万维网的发展虽然使某些事情变得更简单,但也加剧了这些架构问题。 统一建模语言 (UML) 旨在响应这些需求。 Page-Jones 在 UML 中的基本面向对象设计中总结了 UML 设计的主要目标如下:

    1. 为用户提供即用型、富有表现力的可视化建模语言,以便他们可以开发和交换有意义的模型。

    2. 提供可扩展性和专业化机制来扩展核心概念。

    3. 独立于特定的编程语言和开发过程。

    4. 为理解建模语言提供正式的基础。

    5. 鼓励面向对象工具市场的增长。

    6. 支持更高级别的开发概念,例如协作、框架、模式和组件。

    7. 整合最佳实践。

    UML - 概述

    在我们开始研究 UML 的理论之前,我们将非常简短地介绍 UML 的一些主要概念。

    关于 UML,首先要注意的是有很多不同的图表(模型)需要习惯。 这样做的原因是可以从许多不同的角度看待一个系统。 软件开发将有许多利益相关者参与其中。

    例如:

    • 分析师

    • 设计师

    • 编码员

    • 测试员

    • 质量保证

    • 客户

    • 技术作者

    所有这些人都对系统的不同方面感兴趣,并且每个人都需要不同级别的细节。 例如,编码人员需要了解系统的设计并能够将设计转换为低级代码。 相比之下,技术作家对整个系统的行为感兴趣,需要了解产品的功能。 UML 试图提供一种表达能力很强的语言,以便所有涉众都可以从至少一个 UML 图中受益。

    下面快速浏览一下这 13 个图表中的每一个,如下面的 UML 2 图表结构所示:

    结构图显示了系统的静态结构及其在不同抽象和实现级别上的部分以及它们如何相互关联。 结构图中的元素代表了系统中有意义的概念,可能包括抽象概念、现实世界概念和实现概念,结构图有以下七种类型:

    行为图显示 的 动态行为 了系统中对象 ,可以描述为系统随 发生的一系列变化 时间 ,行为图有以下七种类型:

    UML 图类型

    什么是类图?

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

    关系

    三种主要的关系很重要:

    1. 关联 - 表示类型实例之间的关系(一个人为一家公司工作,一家公司有多个办公室。

    2. 继承 - 用于面向对象的 ER 图的最明显补充。 它与面向对象设计中的继承有着直接的对应关系。

    3. 聚合 - 聚合,面向对象设计中的一种对象组合形式。

    类图示例

    类图

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

    什么是组件图?

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

    组件图示例

    组件图

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

    什么是部署图?

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

    部署图示例

    部署图

    有关部署图的更多详细信息,请阅读 什么是部署图?

    什么是对象图?

    对象图是实例图,包括对象和数据值。 静态对象图是类图的一个实例; 它显示了系统在某个时间点的详细状态的快照。 不同之处在于类图表示由类及其关系组成的抽象模型。 但是,对象图表示特定时刻的实例,它本质上是具体的。 对象图的使用相当有限,即显示数据结构的示例。

    类图与对象图 - 一个例子

    有些人可能会发现很难理解 UML 类图和 UML 对象图之间的区别,因为它们都由命名的“矩形块”组成,其中有属性,之间有链接,这使得两个 UML 图看起来相似. 有些人甚至可能认为它们是相同的,因为在 UML 工具中,他们使用类图和对象图的符号放在同一个图编辑器 - 类图中。

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

    类图和对象图的关系

    您在编程时创建“类”。 例如,在网上银行系统中,您可以创建“用户”、“帐户”、“交易”等类。在课堂管理系统中,您可以创建“教师”、“学生”、“作业”等类. 在每个类中,都有代表类的特征和行为的属性和操作。 类图是一个 UML 图,您可以在其中可视化这些类,以及它们的属性、操作和相互关系。

    UML 对象图显示了系统中的对象实例在特定状态下如何相互交互。 它还表示处于该状态的那些对象的数据值。 换句话说,UML 对象图可以看作是在特定状态下如何使用类(在 UML 类图中绘制)的表示。

    如果您不喜欢这些定义内容,请查看以下 UML 图示例。 我相信你会在几秒钟内了解它们的区别。

    类图示例

    以下类图示例表示两个类 - 用户和附件。 用户可以上传多个附件,因此这两个类通过关联连接,0..* 作为附件侧的多重性。

    类图

    对象图示例

    下面的对象图示例向您展示了当 Peter(即用户)尝试上传两个附件时 User 和 Attachment 类的对象实例“看起来像”。 所以要上传的两个附件对象有两个Instance Specification。

    对象图

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

    什么是封装图?

    包图是 UML 结构图,它显示了包和包之间的依赖关系。 模型图允许显示系统的不同视图,例如,作为多层(又名多层)应用程序 - 多层应用程序模型。

    封装图示例


    封装图

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

    什么是复合结构图?

    复合结构图是添加到 UML 2.0 的新工件之一。 复合结构图类似于类图,是一种主要用于从微观角度对系统进行建模的组件图,但它描绘的是单个部分而不是整个类。 它是一种静态结构图,显示了类的内部结构以及该结构使之成为可能的协作。

    该图可以包括内部部件、部件通过其相互交互或通过该类的实例与部件和外部世界交互的端口,以及部件或端口之间的连接器。 复合结构是一组相互关联的元素,它们在运行时协作以实现某些目的。 每个元素在协作中都有一些定义的角色。

    复合结构图示例


    复合结构图

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

    什么是剖面图?

    概要图使您能够创建特定于域和平台的构造型并定义它们之间的关系。 您可以通过绘制定型形状来创建定型,并通过以资源为中心的界面将它们与组合或概括相关联。 您还可以定义和可视化构造型的标记值。

    剖面图示例


    剖面图

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

    什么是用例图?

    用例模型根据用例描述系统的功能需求。 它是系统预期功能(用例)及其环境(参与者)的模型。 用例使您能够将您对系统的需求与系统如何满足这些需求相关联。

    将用例模型视为菜单,很像您在餐厅中找到的菜单。 通过查看菜单,您可以了解您可以享用的菜肴、个别菜肴及其价格。 你也知道这家餐厅供应什么样的美食:意大利菜、墨西哥菜、中国菜等等。 通过查看菜单,您会对在该餐厅等待您的用餐体验有一个总体印象。 实际上,菜单“模拟”了餐厅的行为。

    因为它是一个非常强大的规划工具,所以用例模型通常由所有团队成员在开发周期的所有阶段使用。

    用例图示例


    用例图

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

    什么是活动图?

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

    活动图示例


    活动图

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

    什么是状态机图?

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

    状态机图示例


    状态机图

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

    什么是序列图?

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

    序列图示例


    序列图

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

    什么是通信图?

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

    通信图示例


    活动图

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

    什么是交互概览图?

    交互概述图侧重于交互控制流的概述。 它是活动图的变体,其中节点是交互或交互事件。 交互概览图描述了隐藏消息和生命线的交互。 您可以链接“真实”图表并在交互概览图表内的图表之间实现高度导航。

    交互概览图示例


    交互概览图

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

    什么是时序图?

    时序图显示了对象在给定时间段内的行为。 时序图是时序图的一种特殊形式。 时序图和时序图的区别在于轴倒转,时间从左到右增加,生命线显示在垂直排列的单独隔间中。

    时序图示例


    时序图

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

    获取 Visual Paradigm 社区版,这是一个免费的 UML 工具,可以帮助您更快、更有效地学习 UML。 Visual Paradigm Community Edition 支持所有 UML 图类型。 它的 UML 建模器屡获殊荣,易于使用且直观。

    免费下载

    UML 术语表和术语

    • 抽象类 - 永远不会被实例化的类。 此类的实例永远不会存在。

    • 演员 -发起事件的系统涉及一个物体或人。

    • 活动 :活动图中的一个步骤或动作。 表示系统或参与者采取的行动。

    • 活动图 :显示流程(例如算法或业务流程)中的步骤和决策以及并行操作的美化流程图。

    • 聚合 - 是另一个类的一部分。 在图表中包含类旁边显示为空心菱形。

    • 工件 - 描述设计过程中某个步骤的输出的文档。 描述是图形、文本或某种组合。

    • 关联 - 模型的两个元素之间的连接。 这可能代表代码中的成员变量,或人事记录与其代表的人之间的关联,或两类工人之间的关系,或任何类似的关系。 默认情况下,Association 中的两个元素是相等的,并且通过Association 相互了解。 一个关联也可以是一个可导航的关联,这意味着关联的源端知道目标端,但反之则不然。

    • 关联类 :代表两个其他类之间的关联并向其添加信息的类。

    • 属性 - 对象的特性,可用于引用其他对象或保存对象状态信息。

    • 基类 :定义子类通过泛化关系继承的属性和操作的类。

    • 分支 :活动图中的决策点。 分支中出现多个转换,每个转换都有一个保护条件。 当控制权到达分支时,恰好一个 Guard Condition 必须为真; 和控制遵循相应的过渡。

    • :一类相似的对象,全部由相同的属性和操作描述,并且所有分配兼容。

    • 类图 - 显示系统类和它们之间的关系。

    • 分类器 :具有属性和操作的 UML 元素。 具体来说,Actor、类和接口。

    • 协作 :通信图中两个对象之间的关系,表示消息可以在对象之间来回传递。

    • 通信图 - 显示操作如何在强调对象角色的同时完成的图。

    • 组件 :系统内可部署的代码单元。

    • 组件图 :显示各种组件和接口之间关系的图。

    • 概念 - 要包含在域模型中的名词或抽象概念。

    • 构建阶段 - Rational Unified Process 的第三阶段,在此期间,在构建中的系统中构建了几次功能迭代。 这是主要工作完成的地方。

    • 依赖 :一种关系,表明一个分类器知道另一个分类器的属性和操作,但不直接连接到第二个分类器的任何实例。

    • 部署图 :显示各种处理器之间关系的图。

    • - 系统涉及的宇宙部分。

    • 精化阶段 - Rational Unified Process 的第二阶段,允许额外的项目规划,包括构建阶段的迭代。

    • 元素 :出现在模型中的任何项目。

    • 封装 - 对象中的数据是私有的。

    • 泛化 - 表示一个类是另一个类(超类)的子类。 空心箭头指向超类。

    • 事件 :在状态图中,这表示导致系统采取行动或切换状态的信号、事件或输入。

    • 最终状态 :在状态图或活动图中,这表示图完成的点。

    • Fork :活动图中多个并行控制线程开始的点。

    • 泛化 :继承关系,子类继承并增加基类的属性和操作。

    • GoF - 四组设计模式集。

    • 高内聚 - 一种 GRASP 评估模式,可确保类不会太复杂,不会执行不相关的功能。

    • 低耦合 - 一种 GRASP 评估模式,用于衡量一个类对另一个类的依赖程度或与另一个类的连接程度。

    • 初始阶段 - Rational Unified Process 的第一阶段,处理项目的原始概念化和开始。

    • 继承 - 子类继承其父(超类)类的属性或特征。 这些属性可以在子类中被覆盖。

    • 初始状态 :在状态图或活动图中,这表示图开始的点。

    • 实例 - 类用作模板来创建对象。 这个对象被称为类的一个实例。 可以创建任意数量的类实例。

    • 接口 :定义形成行为契约的属性和操作的分类器。 提供者类或组件可以选择实现接口(即实现其属性和操作)。 客户端类或组件可能依赖于接口,从而使用提供者而不需要提供者的真实类的任何细节。

    • 迭代 - 一个迷你项目部分,在此期间将一些小功能添加到项目中。 包括分析、设计和编码的开发循环。

    • Join :活动图中的一个点,多个并行控制线程同步并重新加入。

    • 成员 :分类器中的属性或操作。

    • 合并 :活动图中不同控制路径聚集在一起的点。

    • 消息 - 从一个对象到另一个对象的请求,要求接收消息的对象做某事。 这基本上是对接收对象中的方法的调用。

    • 方法 - 对象中的函数或过程。

    • 模型 - 中央 UML 工件。 由按层次结构排列的各种元素组成,元素之间也有关系。

    • 多重性 - 在域模型中显示并在概念框外指示,它表示对象数量与其他对象的分位数之间的关系。

    • Navigability :表示关系的哪一端知道另一端。 关系可以具有双向导航性(每一端都知道另一端)或单向导航性(一端知道另一端,但反之则不然)。

    • 符号 - 带有创建分析和设计方法规则的图形文档。

    • 注意 :添加到图表中的文本注释以更详细地解释图表。

    • 对象 - 对象:在活动图中,从活动接收信息或向活动提供信息的对象。 在协作图或序列图中,参与图中描述的场景的对象。 一般而言:给定分类器(Actor、Class 或 Interface)的一个实例或示例。

    • - 逻辑上应该组合在一起的一组 UML 元素。

    • 包图 :一个类图,其中所有元素都是包和依赖项。

    • 模式 - 用于确定交互对象的责任分配的解决方案。 它是成功解决众所周知的常见问题的名称。

    • 参数 :操作的参数。

    • 多态 - 相同的消息,不同的方法。 也用作图案。

    • Private :应用于属性或操作的可见性级别,表示只有包含该成员的分类器的代码才能访问该成员。

    • 处理器 :在部署图中,这表示可以部署代码的计算机或其他可编程设备。

    • Protected :应用于属性或操作的可见性级别,表示只有包含该成员的分类器或其子类的代码才能访问该成员。

    • Public :应用于属性或操作的可见性级别,表示任何代码都可以访问该成员。

    • 阅读方向箭头 - 指示域模型中关系的方向。

    • 实现 :表示组件或类提供给定的接口。

    • 角色 - 在域模型中使用,它是关于参与者角色的可选描述。

    • 序列图 :显示对象随时间存在的图,以及随时间在这些对象之间传递以执行某些行为的消息。 状态图 - 显示所有可能的对象状态的图。

    • 状态 :在状态图中,这表示系统或子系统的一种状态:它在某个时间点正在做什么,以及其数据的值。

    • 状态图 :显示系统或子系统的状态、状态之间的转换以及导致转换的事件的图。

    • 静态 :属性的修饰符,表示在分类器的所有实例之间只有一个共享的属性副本。 操作的修饰符,表示操作独立存在,不对分类器的一个特定实例进行操作。

    • Stereotype :应用于模型元素的修饰符,指示关于它的一些通常不能用 UML 表达的东西。 本质上,Stereotypes 允许您定义自己的 UML“方言”。

    • 子类 :继承子类通过泛化关系定义的属性和操作的类。

    • 泳道 :活动图的一个元素,指示系统或域的哪些部分执行特定的活动。 泳道内的所有活动均由泳道所代表的对象、组件或角色负责。

    • 时间拳击 - 每次迭代都有特定目标的时间限制。

    • 转换 :在活动图中,表示从一个活动或分支或合并或分叉或加入到另一个活动的控制流。 在状态图中,代表从一种状态到另一种状态的变化。

    • 过渡阶段 - Rational Unified Process 的最后一个阶段,在此阶段,用户接受使用新系统的培训,并使用户可以使用该系统。

    • 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. 绍姆的 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 设计工具

      本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多