什么是统一建模语言 (UML) 图表,如何制作好的图表?
统一建模语言 (UML) 图
统一建模语言(UML) 是一种通用建模语言。UML 的主要目的是定义一种标准方法来可视化系统的设计方式。它与其他工程领域使用的蓝图非常相似。UML 不是 一种编程语言,而是一种可视化语言。
- 我们使用 UML 图来描绘系统的行为和结构。
- UML 帮助软件工程师、商人和系统架构师进行建模、设计和分析。
- 对象管理组织 (OMG) 于 1997 年采用统一建模语言作为标准。此后一直由 OMG 管理。
- 国际标准化组织 (ISO) 于 2005 年将 UML 发布为批准的标准。UML 多年来一直在修订,并定期进行审查。
1. 为什么需要UML?
- 复杂的应用程序需要多个团队的协作和规划,因此需要一种清晰、简洁的方式在它们之间进行通信。
- 非程序员不懂代码。因此,UML 对于与非程序员沟通系统的基本需求、功能和流程非常重要,UML 图是沟通的桥梁和工具。
- 当团队可以可视化流程、用户交互和系统的静态结构时,可以节省大量时间。
2. 不同类型的 UML 图
UML 与面向对象的设计和分析相联系。UML 利用元素并形成它们之间的关联来形成图表。UML 中的图大致可分为:
3. UML结构图
3.1. 类图
使用最广泛的 UML 图是类图。它是所有面向对象软件系统的构建块。我们使用类图通过显示系统的类、它们的方法和属性来描述系统的静态结构。类图还可以帮助我们识别不同类或对象之间的关系。
3.2. 复合结构图
我们使用复合结构图来表示类的内部结构及其与系统其他部分的交互点。
- 复合结构图表示部件及其配置之间的关系,这些关系决定了分类器(类、组件或部署节点)的行为方式。
- 它们代表使用部件、端口和连接器的结构化分类器的内部结构。
- 我们还可以使用复合结构图来建模协作。
- 它们与类图类似,只是它们详细地表示与整个类相比的各个部分。
3.3 对象图
对象图可以称为系统中的实例以及它们之间存在的关系的屏幕截图。由于对象图描述了对象实例化时的行为,因此我们能够研究系统在特定时刻的行为。
- 对象图类似于类图,不同之处在于它显示系统中类的实例。
- 我们使用类图来描述实际的分类器及其关系。
- 另一方面,对象图表示类的特定实例以及它们在某个时间点之间的关系。
3.4 组件图
组件图用于表示系统中的物理组件是如何组织的。我们使用它们对实现细节进行建模。
- 组件图描述了软件系统元素之间的结构关系,帮助我们了解计划的开发是否涵盖了功能需求。
- 当我们设计和构建复杂的系统时,组件图变得至关重要。
- 系统组件使用接口来相互通信。
3.5 部署图
部署图用于表示系统硬件及其软件。它告诉我们存在哪些硬件组件以及在其上运行哪些软件组件。
- 我们将系统架构说明为软件工件在分布式目标上的分布。
- 工件是由系统软件生成的信息。
- 它们主要用于在具有不同配置的多台计算机上使用、分发或部署软件时。
3.6 封装图
我们使用包图来描述包及其元素是如何组织的。包图只是向我们展示了不同包之间的依赖关系以及包的内部组成。
- 包帮助我们将 UML 图组织成有意义的组,并使图易于理解。
- 它们主要用于组织类和用例图。
4 行为 UML 图
4.1 状态机图
状态图用于表示系统或系统部分在有限时间实例的状况。这是一个行为图,它表示使用有限状态转换的行为。
- 状态图也称为状态机和状态图。
- 这些术语经常互换使用。简而言之,状态图用于对类响应时间和不断变化的外部刺激的动态行为进行建模。
4.2 活动图
我们使用活动图来说明系统中的控制流程。我们还可以使用活动图来引用用例执行中涉及的步骤。
- 我们使用活动图对顺序和并发活动进行建模。因此,我们基本上使用活动图直观地描述工作流程。
- 活动图侧重于流程的条件及其发生的顺序。
- 我们使用活动图来描述或描述导致特定事件的原因。
4.3 用例图
用例图用于描述系统或系统一部分的功能。它们广泛用于说明系统的功能需求及其与外部代理(参与者)的交互。
- 用例基本上是代表可以使用系统的不同场景的图表。
- 用例图为我们提供了系统或系统的一部分的功能的高级视图,而无需深入了解实现细节。
4.4 时序图
序列图只是按顺序(即这些交互发生的顺序)描述对象之间的交互。
- 我们还可以使用术语“事件图”或“事件场景”来指代序列图。
- 序列图描述了系统中的对象如何以及以什么顺序运行。
- 这些图表被软件开发人员广泛使用来记录和理解新系统和现有系统的需求。
4.5 通讯图
通信图(在 UML 1.x 中称为协作图)用于显示对象之间交换的有序消息。
- 通信图主要关注对象及其关系。
- 我们可以使用序列图来表示类似的信息,但是通信图以*形式表示对象和链接。
4.6 时序图
时序图是序列图的一种特殊形式,用于描述对象在一段时间内的行为。我们使用它们来显示控制对象状态和行为变化的时间和持续时间约束。
4.7. 交互概览图
交互概览图对一系列操作进行建模,并帮助我们将复杂的交互简化为更简单的事件。它是活动图和序列图的混合体。
5 UML图中使用的面向对象概念
-
类
类定义了对象的蓝图,即结构和功能。
-
对象
对象帮助我们分解大型系统并帮助我们模块化系统。模块化有助于将我们的系统划分为可理解的组件,以便我们可以逐个构建我们的系统。对象是系统的基本单元(构建块),用于描述实体。
-
继承
继承是子类继承父类属性的一种机制。
-
抽象
UML 中的抽象是指强调系统或对象的本质方面而忽略不相关细节的过程。通过抽象化不必要的复杂性,抽象有助于利益相关者之间更清晰的理解和沟通。
-
封装
将数据绑定在一起并保护其免受外部世界的影响称为封装。
-
多态性
功能或实体能够以不同形式存在的机制。
5.1 UML 2.0 中的新增内容
- 敏捷开发软件开发方法已被纳入,原始 UML 规范的范围也已扩大。
- 最初 UML 指定了 9 个图。UML 2.x 将图的数量从 9 个增加到 13 个。添加的四个图是:时序图、通信图、交互概述图和组合结构图。UML 2.x 将状态图重命名为状态机图。
- UML 2.x 增加了将软件系统分解为组件和子组件的能力。
6. 创建 UML 图的工具
有多种工具可用于创建统一建模语言 (UML) 图,这些工具通常用于软件开发中,以直观地表示系统架构、设计和实现。以下是一些流行的 UML 图创建工具:
-
Draw.io:
Draw.io 是一个免费的、基于 Web 的图表工具,支持各种图表类型,包括 UML。它集成了各种云存储服务,可以离线使用。
-
Visual Paradigm
Visual Paradigm 提供了一套全面的软件开发工具,包括 UML 图表。它提供在线和桌面版本,并支持广泛的 UML 图。
-
StarUML
StarUML 是一个开源 UML 建模工具,具有用户友好的界面。它支持标准 UML 2.x 图,并允许用户通过插件自定义和扩展其功能。
-
Papyrus
Papyrus 是一个开源 UML 建模工具,是 Eclipse 建模项目的一部分。它提供了一个用于创建、编辑和可视化 UML 图的可定制环境。
-
PlantUML
PlantUML 是一个基于文本的工具,允许您使用简单且人类可读的语法创建 UML 图。它通常与其他工具结合使用并支持多种图表类型。
7. 创建 UML 图的步骤
创建统一建模语言 (UML) 图涉及一个系统过程,通常包括以下步骤:
-
确定目的:
确定创建 UML 图的目的。不同类型的 UML 图有不同的用途,例如捕获需求、设计系统体系结构或记录类关系。
-
识别元素和关系:
识别需要在图中表示的关键元素(类、对象、用例等)及其关系。此步骤涉及了解您正在建模的系统的结构和行为。
-
选择适当的 UML 图类型:
选择最适合您的建模需求的 UML 图类型。常见类型包括类图、用例图、序列图、活动图等。
-
创建粗略草图:
在使用 UML 建模工具之前,在纸上或白板上创建一个粗略的草图会很有帮助。这可以帮助您可视化元素之间的布局和连接。
-
选择 UML 建模工具:
选择适合您的偏好和要求的 UML 建模工具。有各种在线和离线工具可供使用,它们提供了创建和编辑 UML 图的功能。
-
创建图表:
打开选定的 UML 建模工具并创建一个新项目或图表。开始向图中添加元素(例如,类、用例、参与者),并将它们与适当的关系(例如,关联、依赖关系)连接起来。
-
定义元素属性:
对于图中的每个元素,指定相关的属性和属性。这可能包括类属性和方法、用例详细信息或特定于图类型的任何其他信息。
-
添加注释和评论:
通过添加注释、评论和解释性注释来增强图表的清晰度。这有助于任何人查看图表以理解其背后的设计决策和逻辑。
-
验证和审查:
检查图表的准确性和完整性。确保关系、约束和元素准确地表示预期的系统或流程。根据要求验证您的图表并进行必要的调整。
-
细化和迭代:
根据反馈和其他见解完善图表。随着对系统理解的不断深入,UML 图通常会被迭代地创建。
-
生成文档:
一些 UML 工具允许您直接从图表生成文档。这可以包括类文档、用例描述和其他相关信息。
PS: 具体步骤可能会根据 UML 图类型和您使用的工具而有所不同。
8.UML图最佳实践
统一建模语言 (UML) 是用于可视化和记录系统设计的强大工具。要创建有效且有意义的 UML 图,遵循最佳实践至关重要。以下是一些 UML 最佳实践:
-
了解你的受众:
创建 UML 图时考虑您的受众。定制详细程度和图表的选择,以满足受众的理解和需求,无论他们是开发人员、架构师还是利益相关者。
-
保持图表简单且重点突出:
力求图表简单。每个图应该关注系统的特定方面或一组特定的关系。避免混乱和不必要的细节,这些细节可能会分散主要信息的注意力。
-
使用一致的命名约定:
对类、对象、属性、方法和其他 UML 元素采用一致且有意义的名称。清晰且经过深思熟虑的命名约定可以增强图表的可理解性。
-
遵循标准 UML 符号:
遵守标准 UML 表示法和符号。使用 UML 约定的一致性可确保您的图表易于被熟悉 UML 的其他人理解。
-
保持明确的关系:
清晰地定义和标记元素之间的关系。使用适当的箭头、多重符号和关联名称来传达类、对象或用例之间连接的性质。
-
验证和审查:
定期根据系统需求验证您的 UML 图,并与利益相关者一起审查它们。这有助于确保图表准确地表示预期的设计和功能。
-
随着系统的发展更新图表:
UML 图应该随着系统的发展而发展。随着设计和需求的变化,更新图表以反映系统的当前状态。过时的图表可能会导致混乱。
9.UML和敏捷开发
统一建模语言(UML)和敏捷开发是两种不同的软件开发方法,它们可以有效地集成以增强整体开发过程。以下是有关 UML 和敏捷开发之间关系的一些要点:
9.1 敏捷开发中的 UML:
-
可视化和沟通:
UML 图提供了一种直观的方式来表示系统体系结构、设计和行为。在敏捷开发中,沟通至关重要,UML 图可以作为团队成员、利益相关者甚至非技术受众之间的有效沟通工具。
-
用户故事和用例:
UML 用例图可用于捕获敏捷开发中的用户故事并对其进行建模。用例有助于从最终用户的角度理解系统,并有助于创建用户故事。
-
迭代建模:
敏捷方法论强调迭代开发,并且可以采用 UML 来支持这种方法。随着每次迭代期间对系统的理解不断发展,可以逐步创建和完善 UML 模型。
-
敏捷建模技术:
敏捷建模技术(例如用户故事映射和影响映射)通过提供轻量级方法来可视化和传达需求和设计,从而补充 UML。这些技术符合敏捷原则,即重视工作软件而不是综合文档。
9.2 平衡敏捷性和建模:
-
自适应建模:
采用自适应建模方法,在有效沟通和理解所需的范围内使用 UML。重点应该是通过工作软件而不是详尽的文档来提供价值。
-
团队赋能:
使开发团队能够根据项目的需求选择正确的建模级别。团队成员应该能够轻松地使用 UML 作为通信工具,而不会因过多的建模要求而感到负担。
10. UML 建模中的常见挑战:
- 时间密集型:
UML 建模可能被认为是耗时的,尤其是在强调快速开发的快节奏敏捷环境中。团队可能很难满足频繁更新 UML 图的需求。
- 过多的文档:
敏捷原则重视可工作的软件而不是全面的文档。使用 UML 时存在过度文档化的风险,因为团队可能会在不会直接贡献价值的详细图表上花费太多时间。
- 变更要求:
敏捷项目经常面临不断变化的需求,UML 图可能很快就会过时。跟上这些变化并确保 UML 模型反映当前的系统状态可能具有挑战性。
- 协作问题:
敏捷强调团队成员之间的协作,有时 UML 图被视为只有某些团队成员理解的工件。确保每个人都能为 UML 模型做出贡献并从中受益可能是一项挑战。
10.1. UML 限制:
-
精益文档:
专注于精益文档。不要创建大量的 UML 图,而是考虑创建足够的文档来支持代码的理解和维护。使用允许快速更新的工具。
-
迭代建模:
采用迭代方法进行 UML 建模。不要尝试预先创建全面的模型,而是随着对系统的理解的发展迭代地更新和完善 UML 图。
-
定期讨论:
定期与团队一起审查和验证 UML 模型。这有助于识别模型和实际代码之间的差异,确保 UML 图保持相关性。
-
使用协作工具:
利用支持实时更新并鼓励团队成员做出贡献的协作 UML 建模工具。这促进了协作并有助于分配维护 UML 模型的责任。
10.2 为任务选择正确的 UML 图:
-
上下文相关性:
根据项目的具体需求选择 UML 图。不同的图表有不同的用途,因此为手头的任务选择正确的图表至关重要。避免创建过于详细的图表,因为这可能无法提供重要的价值。
-
敏捷建模技术:
探索敏捷建模技术,例如用户故事映射和影响映射,这些技术侧重于以更轻量级和敏捷友好的方式可视化和传达需求和设计。
-
敏捷的动态图:
在敏捷环境中,动态 UML 图(如序列图或活动图)可能比静态图(如类图)更相关。这些动态图可以有效地捕捉系统行为。
-
反馈回路:
在 UML 模型和代码之间建立反馈循环。随着代码的发展,更新 UML 图,反之亦然。这可确保两个工件保持同步并降低文档过时的风险。
-
培训和意识:
在敏捷团队中提供培训并提高他们对 UML 图价值的认识。当团队成员了解其好处和相关性时,他们更有可能积极参与创建和维护 UML 模型。
11. 使用 UML 图的优点
-
标准化:
UML 提供了一种表示系统模型的标准化方法,确保开发人员和利益相关者可以使用通用的可视化语言进行交流。
-
沟通:
UML 图是利益相关者(包括开发人员、设计人员、测试人员和业务用户)之间强大的沟通工具。它们有助于以更容易理解的方式传达复杂的想法。
-
可视化:
UML 图有助于系统组件、关系和流程的可视化。这种视觉表示有助于理解和设计复杂的系统。
-
文档:
UML 图可以用作有效的文档工具。它们提供了一种结构化且有组织的方式来记录系统的各个方面,例如体系结构、设计和行为。
-
分析与设计:
UML 支持软件开发的分析和设计阶段。它有助于对系统的需求进行建模,然后将其转换为可以实现的设计。
12. 使用 UML 图的缺点
-
复杂:
UML 可能很复杂,尤其是对于初学者而言。学习 UML 的所有方面并熟练使用它可能需要投入大量的时间和精力。
-
耗时:
在某些情况下,创建和维护详细的 UML 图可能非常耗时。对于小型和简单的项目,创建大量 UML 文档的开销可能不合理。
-
歧义:
UML 图的解释可能是主观的,导致潜在的歧义。不同的人可能会以略有不同的方式解释同一个图表,从而导致混乱。
-
学习曲线:
由于其广泛的功能和图表,UML 的学习曲线很陡峭。团队可能需要培训和经验才能有效地使用它。
-
过度建模或建模不足:
UML 图中存在过度建模(创建太多不必要的细节)或建模不足(忽略重要细节)的风险。达到适当的平衡对于其有效性至关重要。