该篇文章是在《设计模式》第一章《简单工厂模式》中提到了UML类图的知识,因为这不是零碎的知识点,所以独自开辟一个系列来学习。该知识可通过设计模式
以及UML知识
标签查看。
UML知识
一、UML简介
UML
是统一建模语言的简称,它是一种由一整套图标组成的标准化建模语言。UML
用于帮助系统开发人员阐明,展示,构建和记录软件系统的产出。UML
代表了一系列在大型而复杂系统建模中被证明是成功的做法,是开发面向对象软件和软件开发过程中非常重要的一部分。UML
主要使用图形符号来表示软件项目的设计,使用UML
可以帮助项目团队沟通、探索潜在的设计和验证软件的架构设计。
源文链接:https://www.visual-paradigm.com/cn/guide/uml-unified-modeling-language/what-is-uml/
官方网站:https://www.uml.org/
1.1 UML起源
UML
的目标是提供一个标准的符号,可以被所有面向对象的方法使用,并选择和整合前兆符号的最佳元素。UML
可用于广泛的应用程序,它为不同的系统和活动(如分布式系统,分析,系统设计和部署)提供了构造。
UML
是由OMT统一而来的符号,时序如下:
- 对象建模技术OMT(1991)-最适合分析和数据密集型信息系统。
- Booch(1994)-强项为设计和实作。Grady Booch曾经为Ada语言方面做过广泛的工作,并且一直是该语言面向对象技术发展的主要参与者。尽管Booch方法很强大,但是并未广为接受(因为他的模型包含着很多云状,给人不整齐的感觉)。
- OOSE(面向对象的软件工厂1992)-有一个称为用例的模型。用例是理解整个系统行为的强大技术。
1994年,OMT的创始人Jim Rumbaugh离开了通用电气公司(General Electric),转投Rational,与Grady Booch并肩作战。这使得软件世界惊呆的合作,为的是要把二人的想法结合成一个统一的方法(项目名称也就是”统一方法”)。
到了1995年,OOSE的创建者lvar Jacobson也加入了Rational,他的想法(特别是有关”用例(Use Case)”)的概念被整合于统一方法中,成为”统一建模语言”。
1.2 UML历史
- 在1996年间,由Object Management Group(OMG)发布的第一个征求建议书(RFP),成为了让这些组织联合起来的催化剂。
- Rational与几个愿意为加强UML1.0投入资源的组织建立了UML伙伴联盟。
- 这次合作产生了UML1.0,一个由明确定义,表达力强大且通用的建模语言。UML1.0在1997年1月提交给OMG,作为最初的RFP回应。
- 1997年1月,IBM,ObjectTime,Ptech等也相继向OMG提交了RFP回应。这些公司加入了伙伴联盟,贡献了他们的想法,并一起制定了经修订的UML1.1。UML1.1的重点是提高UML1.0语义的清晰度,并纳入来自新合作伙伴的意见。UML1.1被提交给OMG供考虑,并在1997年秋季被采用,及后被改良,版本从1.1渐渐提高到1.5,并于2001到2006年内提高到2.1(现在的UML版本为2.5)
1.3 为何用UML
首先要注意的是UML
设计很多不同的图表(模型),其原因是提供从许多不同的角度来审视系统。软件开发流程往往有许多持分者参与其中,例如:分析师、设计师、程序员、测试员、质量保证员、客户、技术文件撰稿员。
这些人都对系统的不同方面各持不同兴趣,故此在建模时需要考虑不同的细节层次。例如,程序员需要了解系统的设计,并将设计转换为代码,而技术文件撰稿员则对整个系统的行为感兴趣,借以了解产品的功能。UML
提供了极富表达能力的建模语言,好让各持分者至少可以从一个UML
图标得到感兴趣的资讯。
二、UML概述
UML
图表可大致分为结构性图表和行为性图表两种。
结构性图表显示了系统在不同抽象层次和实现层次上的静态结构以及它们之间的相互关系。结构性图表中的元素表示系统中具有意义的概念,可能包括抽象的、现实的和实作的概念。结构性图表有七种类型:
行为性图表显示了系统中对象的动态行为,可用以表达系统随时间的变化。行为性图表有其中类型:
三、UML图表简述
3.1 类图
类图是一切面向对象方法的核心建模工具。该图描述了系统中对象的类型以及它们之间存在的各种静态关系。
有三种主要的关系:
- 关联关系:代表类型之间的关系(一个人为公司工作,一个公司有多个办事处)。
- 继承关系:专为将实例关系(ERD)应用于面向对象设计而设的一种关系。它在面向对象设计中的继承概念互相呼应。
- 聚合关系:面向对象设计中的一种对象组合的形式。
类图示例:
有关类图的更多详细信息,请阅读文章什么是类图
3.2 组件图
在统一建模语言中,组件图描绘了组件如何连接在一起以形成更大的组件或软件系统。它展示了软件组件的体系结构以及它们之间的依赖关系。那些软件组件包括运行时组件,可执行组件和源代码组件。
组件图示例:
有关组件图的更多详细信息,请阅读文章什么是组件图
3.3 部署图
部署图有助于模拟面向对象软件系统的物理方面。它是一个结构性图标,显示了软件产出于系统架构内如何被分发至指定目标。产出即显示生活中各种通用开发过程产生的产品。部署图对运行时配置进行建模,并可视化应用程序中产出的分布。在大多数情况下,它表达了硬件配置以及和软件组件之间的关系。
部署图示例:
有关部署图的更多详细信息,请阅读文章什么是部署图
3.4 对象图
对象图是实例(Instance)的表达,包括对象和数据值。静态的对象图是类图的一个实例,它是系统在某个时间点详细状态的快照,不同之处在于类图表示了一个由类及其关系组成的抽象模型,而对象图则表达了特定时刻的实例。对象图的使用是相当有限的,它常被用做展示数据结构例子。
3.4.1 类图与对象图的例子
有些人难以区分UML
类图和UML
对象图,因为它们都包含一些”矩形块”和一些连接线,看起来很相似。有些人甚至认为它们是相同的,因为某些UML
软件会将类图和对象图的符号放在同一个图标编辑器-类图中。
事实上,类图和对象图表达着两个不同的层次。在本文中,我们将向您提供关于这两个UML
图表的一些想法,让您了解它们是什么,它们的区别以及何时使用它们。
3.4.2 类图与对象图的关系
您会在编程时创建”类”。例如,在网上银行系统中,您可以创建”用户”,”账户”,”交易”等类。又例如,在课堂管理系统中,您会创建”教师”,”学生”,”任务”等。在每个类中都有属性和操作来表示类的特征和行为,而类图则是一种让你看到这些类和它们的属性,操作和相互关系的图表。
UML
对象图显示了系统中的对象实例如何在特定状态下彼此交互。它也表示那个状态下那些对象的数据值。换句话说,UML
对象图可以被看作是如何在特定状态下使用类(在UML
类图中绘制)的表达。
且看看下面的UML
图例子。我相信您会在几秒内了解它们的差异。
3.4.3 类图示例
以下类图示例代表两个类-用户和附件。用户可以上传多个附件,因此这两个类以一个关联连接,在附件方则以0..*
作为多重性。
3.4.4 对象图示例
下面的对象图示例显示了当Peter(即用户)上传两个附件时User 和 Attachment 类的对象实例如何。因上传两个附件,所以有两个附件对象。
有关对象图的更多详细信息,请阅读文章什么是对象图
3.5 包图
包图是UML
一种用以显示包和包之间的依赖关系的结构性图表。该模型图能够显示系统的不同视图,例如,多层应用程序。
包图示例
有关包图的更多详细信息,请阅读文章什么是包图
3.6 复合结构图
复合结构图是添加到UML2.0
中的新的图表之一。复合结构图与类图相似,是一种用于微观视角的系统建模组件图,而不是整个类的组成部分。它是一种静态结构图,显示了一个类的内部结构和这个结构所实现的协作。
复合结构图可以包括内部零件,零件通过其互相交互或通过端口与外界交互。复合结构是一组相关联的元素,它们在运行时进行协作以达到某种目的。每个元素在协作中都有一些定义的角色。
复合结构图示例
有关复合结构图的更多详细信息,请阅读文章什么是复合结构图
3.7 轮廓图
轮廓图使您能够创建特定于域和平台的原型,并定义它们之间的关系。
轮廓图示例
有关轮廓图的更多详细信息,请阅读文章什么是轮廓图
3.8 用例图
用例模型从用例的角度描述系统的功能需求,它是系统预期功能(用例)及其环境(参与者)的模型。用例使您能够将系统需要与系统如何满足这些需求相关联。
将用例模型想象成一个菜单,就像在餐馆中找到的菜单一样,通过查看菜单,你知道什么菜肴以及它们的价格,你也知道餐厅供应什么样的菜肴:意大利、墨西哥、中国等等。通过查看菜单,您可以对该餐厅的用餐体验有一个全面的了解,因为它是一个非常强大的计划工具,所以团队成员通常在开发周期的所有阶段都使用用例模型。
用例图示例
有关用例图的更多详细信息,请阅读文章什么是用例图
3.9 活动图
活动图用于展示工作流程,它支持选择(Choice)、迭代(Iteration)和并发(Concurrency)。活动图描述了目标系统的控制流程,比如探索复杂的业务规则和操作,描述用例和业务流程。在统一建模语言中,活动图旨在模拟计算和组织过程(即工作流程)。
活动图示例
有关活动图的更多详细信息,请阅读文章什么是活动图
3.10 状态图
状态图是UML
中用来描述基于David Harel的状态图概念的系统行为的一种图表。状态图描绘允许的状态和转换以及影响这些转换的事件,它有助于可视化对象的整个生命周期,从而更好地理解以状态主导地系统。
状态图示例:
有关状态图的更多详细信息,请阅读文章什么是状态图
3.11 序列图
序列图根据事件序列展示对象如何进行协作。它展示了在用例的特定场景中,对象如何与其他对象交互。凭借现金的可视化建模功能,您只需点击几下即可创建复杂的序列图。另外Viaual Paradigm
可以根据用例描述中定义的事件流生成序列图。
序列图示例
有关序列图的更多详细信息,请阅读文章什么是序列图
3.12 通讯图
与序列图类似,通讯图也用于模拟用例的动态行为。与序列图相比,通讯图更侧重于显示对象的协作而不是时间顺序。它们实际上在语义上是等价的,因此一些建模(如Visual Paradigm)允许您从一个模型生成一个到另一个。
通信图示例
有关通信图的更多详细信息,请阅读文章Post not found: 什么是通信图 什么是通信图
3.13 交互概述图
交互概述图侧重于交互控制流程的概述,它是活动图的变体,其中节点是交互(Interactions)或交互发生(Interaction Occurrences)。交互概述图描述了隐藏于消息(Message)和生命线(Lifeline)间的交互。
交互概述图示例
有关交互概述图的更多详细信息,请阅读文章什么是交互概述图
3.14 时序图
时序图显示了既定时间内对象的行为。时序图是序列图的一种特殊形式,它俩之间的差异是轴反转,时间从左到右增加,生命线显示在垂直排列的独立隔间中。
时序图示例
有关时序图的更多详细信息,请阅读文章什么是时序图