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

UML是统一建模语言的简称,是一种标准化建模语言,由一组集成的图表组成,旨在帮助系统和软件开发人员指定、可视化、构建和记录软件系统的伪影,以及商业建模和其他非软件系统。UML 代表了一系列最佳工程实践,这些实践在大型复杂系统的建模方面被证明是成功的。UML 是开发对象导向软件和软件开发过程的重要组成部分。UML 主要使用图形标注来表达软件项目的设计。使用UML可帮助专案团队进行沟通、探索潜在设计并验证软件的架构设计。在本文中,我们将为您提供关於什麽是 UML 的详细想法、UML 的历史以及每个 UML 图类型的描述,以及 UML 示例。

UML 的起源

UML 的目标是提供标准符号,可用於所有面向物件的方法,并选择和集成前体符号的最佳元素。UML 专为各种应用而设计。因此,它为广泛的系统和活动(例如分散式系统、分析、系统设计和部署)提供结构。

UML 是 OMT 统一产生的符号

  1. 物件建模技术 OMT [詹姆斯·伦博1991] - 最适合分析和数据密集型信息系统。
  2. 布赫 [格雷迪 · 布赫1994] - 在设计和实施方面非常出色。格雷迪·布赫曾与阿达语进行过广泛的合作,并且是开发面向对象的语言技术的主要参与者。虽然Booch方法很强,但这个符号不太受欢迎(很多云形主导了他的模型——不是很整洁)
  3. OOSE(面向对象的软件工程 [伊瓦尔·雅各森1992]) - 具有一种称为"使用案例"的模型。使用案例是了解整个系统行为的有力技术(OO 传统上是弱的领域)。

1994年,OMT的创造者吉姆·伦博离开通用电气,加入理性公司的格雷迪·布赫,震惊了软件界。夥伴关系的目的是将他们的想法合并到单一的统一方法中(该方法的工作标题确实是"统一方法")。

到1995年,OOSE的创造者伊瓦尔·雅各森也加入了理性,他的想法(特别是"使用案例"的概念)被纳入新的统一方法——现在称为统一建模语言1。伦博、布赫和雅各森的团队被亲切地称为 "三个朋友"

UML 也受到其他对象导向记分的影响:

  • 梅勒和施莱尔 (Mellor and Shlaer) [1998]
  • 考德和尤顿 (Coad and Yourdon)[1995]
  • 维尔夫斯-布罗克 (Wirfs-Brock) [1990]
  • 马丁和奥德尔 (Martin and Odell) [1992]

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

UML 历史

  1. 1996年,物件管理小组(OMG)发出的第一份提案请求(RFP)为这些组织联合起来,产生联合RFP对策提供了催化剂。
  2. Rational 与几个愿意投入资源以实现强大的 UML 1.0 定义的组织建立了 UML 合作夥伴财团。对 UML 1.0 定义贡献最大的包括:
  • Digital Equipment Corp
  • HP
  • i-Logix
  • IntelliCorp
  • IBM
  • ICON Computing
  • MCI Systemhouse
  • Microsoft
  • Oracle
  • Rational Software
  • TI
  • Unisys
  1. 这种协作产生了UML 1.0,这是一种定义明确、表现力强、功能强大且普遍适用的建模语言。这是1997年1月提交OMG的,作为RFP的初步答覆。
  2. 1997年1月,IBM、ObjecTime、白金技术、Ptech、塔斯顿、帝国技术和软化工业也分别向OMG提交了RFP答覆。这些公司加入了 UML 合作夥伴,贡献他们的想法,合作夥伴共同提出了修订后的 UML 1.1 回应。UML 1.1 版本的重点是提高UML 1.0语义的清晰度,并纳入新合作夥伴的贡献。它提交OMG审议,并在1997年秋季通过,并增强1.1至1.5,随後从01至06年UML 2.1(现在UML当前版本为2.5)

UML 历史记录

为什麽UML

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

  1. 为使用者提供即用、富有表现力的视觉建模语言,以便他们能够开发和交换有意义的模型。
  2. 提供可扩展性和专业化机制,以扩展核心概念。
  3. 独立於特定的程序设计语言和发展过程。
  4. 为理解建模语言提供正式依据。
  5. 鼓励二OO二工具市场的发展。
  6. 支援更高层次的发展理念,如协作、框架、模式和元件。
  7. 整合最佳实践。

UML - 概述

在我们开始研究 UML 理论之前,我们将对 UML 的一些主要概念进行非常简短的考察。

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

例如:

  • 分析师
  • 设计师
  • 程序师
  • 测试
  • QA
  • 客户
  • 技术作者

所有这些人都对系统的不同方面感兴趣,他们每个人都需要不同级别的细节。例如,编码器需要了解系统的设计,并能够将设计转换为低级代码。相比之下,技术作家对系统的整体行为感兴趣,需要了解产品是如何运作的。UML 试图提供一种语言,使所有利益相关者都能从至少一张 UML 图中受益。

下面快速检视以下 UML 2 图结构中显示的这 13 张图表中的每个图:

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

行为图显示系统中物件的动态行为,可描述为系统随时间变化的一系列,有七种行为图如下:

UML 图类型

什麽是类图?

类图是一种中央建模技术,它贯穿几乎所有面向物件的方法。此图描述了系统中的物件类型及其之间存在的各种静态关系。

关系

有三种主要的关系很重要:

  1. 关联- 表示类型实例之间的关系(一个人为公司工作,公司拥有多个办事处。
  2. 继承- 二OO年使用ER图的最明显补充。它与二OO二年设计中的继承有直接的通信。
  3. 聚合- 聚合,对象导向设计中的对象构成形式。

类图示例

类图

有关类图的更多详细资讯,请阅读文章什麽是类图?

什麽是组分图?

在统一建模语言中,元件图描述了元件如何连接在一起以形成更大的元件或软件系统。它说明了软件元件的架构及其之间的依赖性。这些软件元件包括运行时间元件、可执行元件以及原始程序码元件。

元件图示例

元件图

有关元件图的更多详细资讯,请阅读文章什麽是组分图?

什麽是部署图?

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

部署图示例

部署图

有关部署图的更多详细资讯,请阅读文章什麽是部署图?

什麽是物件图?

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

类图与物件图 - 范例

有些人可能发现很难理解 UML 类图和 UML 物件图之间的区别,因为它们都由命名的「矩形方块」组成,其中包含属性,并且之间有联系,这使得两个 UML 图看起来相似。有些人甚至可能认为他们是相同的,因为在UML工具中,他们同时使用类图和物件图的注释被放在同一个图表编辑器 - 类图中。

但事实上,类图和物件图代表了代码基数的两个不同方面。在本文中,我们将为您提供有关这两个 UML 图的一些想法,它们是什麽,它们的差异是什麽,以及何时使用它们。

类图和物件图之间的关系

程序设计时创建"类"。例如,在网上银行系统中,您可以创建"使用者","帐户","交易"等类。在课堂管理系统中,您可以创建「教师」,「学生」,"分配"等课程。在每个类中,都有代表类特徵和行为的属性和操作。类图是一个 UML 图,您可以可视化这些类,以及它们的属性、操作和相互关系。

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

如果您不是这些定义内容的粉丝,请查看以下 UML 图示例。我相信你会在几秒钟内理解他们的差异。

类图示例

下列类图示例表示两个类 - 使用者和附件。使用者可以上传多个附件,以便两个类与关联连接,附件侧的0.* 为多重性。

类图

物件图示例

以下物件图示例显示使用者和附件类的物件实例在Peter(即使用者)试图上传两个附件的那一刻如何"看起来像"。因此,要上传的两个附件物件有两个实例规范。

物件图

有关物件图的更多详细资讯,请阅读文章「什麽是物件图」?

什麽是包装图?

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

包装图示例

包装图

有关包图的更多详细资讯,请阅读文章什麽是包图?

什麽是复合结构图?

复合结构图是添加到UML 2.0的新产品之一。复合结构图类似於类图,是一种主要用於在微观视点建模系统的组分图,但它描绘的是各个部分而不是整个类。它是一种静态结构图,显示一个类的内部结构和该结构使协作成为可能。

此图可以包括内部部分、各部分相互交互的埠,或者该类实例通过这些电例与零件和外部世界相互作用,以及零件或埠之间的连接器。复合结构是一组相互关联的元素,在运行时协同工作以达到某些目的。每个元素在协作中都有一些定义的角色。

复合结构图示例

复合结构图

有关复合结构图的更多详细资讯,请阅读文章什麽是复合结构图?

什麽是配置档图?

配置档图使您能够创建域和平台特定的成见,并定义它们之间的关系。您可以通过绘制刻板印象形状来创建成见,并通过以资源为中心的介面将其与构图或概括联系起来。您还可以定义和可视化标记的成见值。

配置文件图示例

配置文件图

有关设定档图的更多详细资讯,请阅读UML 中什麽是设定档图的文章?

什麽是用例图?

用例模型从使用案例的角度描述系统的功能要求。它是系统预期功能(使用案例)及其环境(参与者)的模型。使用案例可让您将系统所需的内容与系统如何满足这些需求联系起来。

将用例模型视为功能表,很像您在餐厅找到的功能表。通过查看功能表,您可以了解可供您选择的菜肴、单个菜肴及其价格。您还知道餐厅供应什麽样的美食:义大利菜、墨西哥菜、中餐等。通过查看功能表,您可以全面了解该餐厅等待您用餐的体验。功能表实际上"模仿"了餐厅的行为。

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

使用案例图示例

使用案例图

有关使用案例图的更多详细资讯,请阅读文章「什麽是使用案例图」?

什麽是活动图?

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

活动图示例

活动图

有关活动图的更多详细资讯,请阅读文章什麽是活动图?

什麽是状态机器图?

状态图是UML中用於描述系统行为的一种图表,它基於大卫·哈雷尔的状态图概念。状态图描绘了允许的状态和过渡以及影响这些过渡的事件。它有助於可视化物体的整个生命周期,从而有助於更好地了解基於状态的系统。

状态机器图示例

状态机器图

有关状态机器图的更多详细资讯,请阅读文章「什麽是状态机器图」?

什麽是序列图?

序列图根据时间序列对对对象的协作进行模型。它显示了物件在使用案例的特定场景中如何与其他物件相互作用。凭藉先进的视觉建模功能,您可以在很少的点击中创建复杂的序列图。此外,一些建模工具(如视觉范式)可以从您在用例描述中定义的事件流生成序列图。

序列图示例

序列图

有关序列图的更多详细资讯,请阅读文章什麽是序列图?

什麽是通信图?

与序列图类似,通信图也用於类比使用案例的动态行为。与序列图相比,通信图更侧重於显示对象的协作,而不是时间序列。它们实际上在语因上是等价的,因此一些建模工具,例如,视觉范式允许您从一个到另一个生成它。

通信图示例

活动图

有关通信图的更多详细资讯,请阅读文章什麽是通信图?

什麽是交互概述图?

交互概述图侧重於对相互作用控制流的概述。它是活动图的变体,其中节点是相互作用或相互作用发生。交互概述图描述了隐藏消息和生命线的交互。您可以将「真实」图表连接起来,并在交互概述图内的图表之间实现高度通航性。

交互概述图示例

交互概述图

有关交互概述图的更多详细资讯,请阅读文章什麽是交互概述图?

什麽是时间图?

时间图显示物件在给定时间段内的行为。计时图是序列图的一种特殊形式。计时图和序列图之间的差异是轴被反转,以便时间从左到右增加,生命线显示在垂直排列的单独隔间中。

计时图示例

计时图

有关计时图的更多详细资讯,请阅读文章什麽是计时图?

获取视觉范式社区版,这是一个免费的UML工具,可以説明您更快、更有效地学习UML。视觉范式社区版支援所有UML图类型。其UML建模机屡获殊荣,易於使用,直观。

免费下载

UML 词汇表和术语

  • 抽象类- 永远不会被刻例化的类。此类实例将永远不会存在。
  • 演员- 发起系统所涉及的事件的对象或人员。
  • 活动:活动图中的步骤或动作。表示系统或演员采取的行动。
  • 活动图:一个荣耀的流程图,显示流程中的步骤、决策和并行操作,如演算法或业务流程。
  • 聚合- 是另一个类的一部分。图中包含类旁边有一颗空心钻石。
  • 文物- 描述设计过程中一个步骤输出的档。描述是图形、文本或某种组合。
  • 关联- 模型的两个元素之间的连接。这可能代表代码中的成员变数,或人事记录与其所代表的人之间的关联,或两类工人之间的关系,或任何类似的关系。默认情况下,协会中的两个要素都是平等的,并且通过协会相互了解。协会也可以是一个可导航协会,这意味着协会的来源端知道目标端,但反之亦然。
  • 协会类:代表并添加其他两个类之间的关联信息的类。
  • 属性- 可用於引用其他物件或储存物件状态资讯的物件的特徵。
  • 基础类:定义子类通过概括关系继承的属性和操作的类。
  • 分支:活动图中的决定点。多个过渡从分支中出现,每个分支都有一个守卫条件。当控制到达分支时,正好一个守卫条件必须是真实的:控制遵循相应的过渡。
  • : 类似物件的类别,所有描述由相同的属性和操作和所有任务相容。
  • 类图- 显示系统类和它们之间的关系。
  • 分类器: 具有属性和操作的 UML 元素。具体来说,是演员、类和介面。
  • 协作:通信图中两个对象之间的关系,表示消息可以在对象之间来回传递。
  • 通信图- 显示操作如何执行的图表,同时强调物件的作用。
  • 元件: 系统内可部署的代码单元。
  • 元件图:显示各种元件和介面之间关系的图表。
  • 概念- 要包含在域模型中的名词或抽象概念。
  • 施工阶段- 合理统一流程的第三阶段,在此期间,在正在建设中的系统中内置了多个功能反覆运算。这是完成主要工作的地方。
  • 依赖性:表示一个分类器知道另一个分类器的属性和操作,但与第二个分类器的任何实例没有直接连接的关系。
  • 部署图:显示各种处理器之间关系的图表。
  • - 系统涉及的宇宙部分。
  • 制定阶段- 合理统一流程的第二阶段,允许额外的项目规划,包括建设阶段的反覆运算。
  • 元素:任何出现在模型中的专案。
  • 封装- 物件中的数据是私密的。
  • 概括- 表示一个类是另一类(超级类)的子类。空心箭头指向超级类。
  • 事件:在状态图中,这表示导致系统采取行动或切换状态的信号或事件或输入。
  • 最终状态:在状态图或活动图中,这表示图表完成的点。
  • 子:活动图中的点,其中多个并行控制线程开始。
  • 概括:继承关系,其中子类继承并添加到基础类的属性和操作。
  • GOF - 四组设计模式。
  • 高凝聚力- 一种确保类不是太复杂的,执行无关功能的 GRASP 评估模式。
  • 低耦合- 一种处理评估模式,该模式衡量一个类对另一个类的依赖程度或连接到另一个类。
  • 初始阶段- 处理专案原始概念化和开始的理性统一过程的第一阶段。
  • 继承- 子类继承其父级(超类)类的属性或特徵。这些属性可以在子类中覆盖。
  • 初始状态:在状态图或活动图中,这表示图表开始的点。
  • 实例- 类像范本一样用於创建物件。此对象称为类实例。可以创建该类的任何数例。
  • 介面:定义构成行为契约的属性和操作的分类器。供应商类或元件可以选择实现介面(即实现其属性和操作)。然後,用户端类或元件可能依赖於介面,因此使用供应商时不提供供应商真实类别的任何详细资讯。
  • 反覆运算- 在专案中添加一些小功能的小型专案部分。包括分析、设计和编码的发展回圈。
  • 加入: 活动图中的点,其中多个并行控制线程同步并重新加入。
  • 成员:分类器中的属性或操作。
  • 合并:活动图中的一个点,其中不同的控制路径走到一起。
  • 消息- 从一个物件到另一个物件的请求,要求接收消息的物件做某事。这基本上是接收物件中对方法的呼叫。
  • 方法- 物件中的函数或程序。
  • 模型- 中央 UML 人工制品。由各种元素组成,按包排列,各要素之间的关系也由包组成。
  • 多重性- 显示在域模型中,并指示外部概念框,它表示对象数量与其他物件的量级的关系。
  • 导航性:指示关系的哪一端知道另一端。关系可以具有双向导航性(每个端都了解另一端)或单个方向导航性(一端知道另一端,但反之亦然)。
  • 记号- 图形文件,其中有创建分析和设计方法的规则。
  • :在图表中添加文本注释,以更详细地解释图表。
  • 物件- 物件:在活动图中,从活动接收资讯或向活动提供信息的物件。在协作图或序列图中,参与图表中描述的场景的物件。一般情况下:给定分类器(演员、类或介面)的一个实例或示例。
  • - 逻辑上应分组的 UML 元素组。
  • 包图:所有元素都是包和依赖性的类图。
  • 模式- 用於确定要交互对象的责任分配的解决方案。它是成功解决众所周知的常见问题的名称。
  • 参数:操作参数。
  • 多态性- 相同的消息,不同的方法。也用作模式。
  • 私有:适用於属性或操作的可见级别,表明只有包含成员的分类器代码才能访问成员。
  • 处理器:在「部署图」中,这表示可以部署代码的计算机或其他可程序设计设备。
  • 受保护:适用於属性或操作的可见度级别,表明只有包含成员或其子类的分类器代码才能访问成员。
  • 公共:适用於属性或操作的可见度级别,表示任何代码都可以访问成员。
  • 阅读方向箭头- 在域模型中指示关系的方向。
  • 实现: 表示元件或类提供给定的介面。
  • 角色- 用於域模型,它是关於演员角色的可选描述。
  • 序列图:显示物体随时间而存在的图表,以及随时间推移在这些对象之间传递以执行某些行为的消息。状态图 - 显示所有可能物件状态的图表。
  • 状态:在状态图中,这表示系统或子系统的一种状态:它在某个时间点正在执行的,以及其数据的值。
  • 状态图:显示系统或子系统状态、国家间过渡和导致过渡的事件的图表。
  • 静态:属性的修饰器,表示分类器的所有实例之间共用的属性只有一个副本。操作的修饰器,表示操作独立,不针对分类器的特定实例操作。
  • 刻板印象:一个修饰剂应用於一个模型元素,指示它的东西,通常不能在UML中表达。从本质上讲,陈规定型观念允许您定义UML的"方言"。
  • 子类:通过概括关系继承子类定义的属性和操作的类。
  • **游动:**活动图的元素,指示系统或域执行特定活动的各个部分。泳道内的所有活动均由以泳道为代表的物件、元件或演员负责。
  • 时间拳击- 每个反覆运算将有一个时间限制与特定的目标。
  • 过渡:在活动图中,表示从一个活动或分支或合并或叉或加入到另一个活动的控制流。在状态图中,表示从一个国家到另一个国家的变化。
  • 过渡阶段- 合理统一过程的最後阶段,在此期间,使用者接受使用新系统的培训,系统提供给使用者。
  • UML - 统一建模语言利用文本和图形文档,通过允许对象之间建立更具凝聚力的关系来增强软件专案的分析和设计。
  • 使用案例:在"使用案例图"中,表示系统响应演员的某些请求而采取的操作。
  • 使用案例图:显示行为人与使用案例之间关系的图表。
  • 可见性:属性或操作的修饰器,指示代码对成员的访问。能见度级别包括公共、受保护和私立。
  • 工作流程- 产生特定结果的一组活动。

流行的 UML 书籍

下面列出一些最畅销的 UML 书籍,您可以阅读以学习 UML。

  1. UML 蒸馏:标准物件建模语言简介
  2. UML 2 和统一流程:实用对象导向分析与设计
  3. 学习UML 2.0
  4. 使用 UML 构建 Web 应用程序
  5. 统一建模语言参考手册
  6. UML 2.0 样式的元素
  7. 爪哇程序师的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设计工具

您要寻找免费的 UML 工具,以便更快、更轻松、更快地学习 UML 吗?视觉范式社区版是一个 UML 软件,支援所有 UML 图类型。它是一个国际屡获殊荣的UML建模师,但它是易於使用,直观 - 完全免费。

免费下载



<<:  回归初心;重新出发 IOS基础

>>:  Day15 测试写起乃 - Devise login user

day10 轨迹 (雷)没有就等着被电到飞上天

来部落格看图文并茂文章 补觉鸣诗 前面说防火墙 我们会设定 log 记录功能 而一般防火墙内建空间不...

第二十八天:用 TeamCity 发布 Package

在这系列教学里,我们以撰写一个以购物车为主题的 Kotlin 函式库为例,经过一连串 TDD、语法风...

[Day01] Python 入门,总是可以多学到一点

写在前面 基本上分享会很随意, 主要就是纪录一些我觉得有趣或是 Kaggle 这系列想传达一些 py...

[Day-18] 一维阵列小练习

上次学习了基本的阵列语法 这次要来练习简单的阵列使用 都是基本的宣告以及画面显示 主要是练习一维阵列...

popcat 如何使用 python 搭配 selenium 在浏览器上自动点击

popcat 有监於台湾在popcat中被泰国抢下金牌,无聊的我写了这一个咚咚 这次是使用 Pyth...