UML是Unified Model Language的缩写,中文是统一建模语言,是由一整套图表组成的标准化建模语言。UML提供了极富表达能力的建模语言,可以让软件开发过程中的不同人员分别得到自己感兴趣的信息。UML的主要目的是通过使用UML使得在软件开发之前,对整个软件设计有更好的可读性、可理解性,从而降低开发风险。同时,也能方便各个开发人员之间的交流 。
UML包括了多种图表,如类图、用例图、时序图、活动图等。
UML(统一建模语言)的主要目的在《Fundamental Object-Oriented Design in UML》一书中概述如下:
1. 为用户提供现成的、有表现力的可视化建模语言,以便他们开发和交换有意义的模型。这意味着UML旨在为用户提供一种易于理解和使用的方式来创建和表示面向对象软件的结构和行为。
2. 为核心概念提供可扩展性 (Extensibility) 和特殊化 (Specialization) 机制。这使得UML的核心概念可以灵活地适应不同的应用场景和需求。
3. 独立于特定的编程语言和开发过程。这一特性使得UML可以在不同的开发环境中使用,而无需对代码进行修改或重写。
4. 为了解建模语言提供一个正式的基础。UML提供了一套标准化的符号和语法,使得其他开发者可以更容易地理解和使用UML建模语言。
5. 鼓励面向对象工具市场的发展。UML已经成为许多商业软件中广泛使用的建模语言之一,它的流行促使更多的开发者开始关注和研究面向对象的设计方法和技术。
6. 支持更高层次的开发概念,如协作,框架,模式和组件。这些高级概念可以帮助开发者更好地组织和管理他们的项目,并提高项目的可维护性和可扩展性。
7. 集成最佳的工作方法 (Best Practices)。UML试图将各种最佳实践整合到其建模语言中,以帮助开发者编写出更高质量、更易于理解和维护的代码。
UML图分为结构图和行为图。结构图包括类图、轮廓图、组件图、组合结构图、对象图、部署图和包图。 行为图包括活动图、用例图、状态机图和交互图 。
类图是一切面向对象方法的核心建模工具,描述了系统中对象的类型以及它们之间存在的各种静态关系。类图用来表示类、接口以及它们之间的静态结构和关系 。
活动图是一种用于描述系统行为的图形化语言,它以时间轴为线索,将系统中的活动按照顺序串联起来,以便于理解系统的执行流程。
用例图是一种用于描述系统功能的图形化语言,它以用户为中心,将用户的请求和系统的响应之间的关系进行了可视化表达。
状态机图是一种用于描述系统状态变化的图形化语言,它以状态转换为主线,将系统中的状态以及状态之间的转移关系进行了可视化表达。
交互概览图是一种用于描述系统交互关系的图形化语言,它以参与者为中心,将参与者之间的交互关系进行了可视化表达。
在类图中,以下是一些常见的关系:
1. 泛化(Generalization):泛化关系是一种继承关系,表示子类继承父类的所有特征和行为。箭头指向父类,带三角箭头的实线。
2. 实现(Realization):实现关系是一种类与接口的关系,表示类是接口所有特征和行为的实现。箭头指向接口,带三角箭头的虚线。
3. 关联(Association):关联关系是一种拥有关系,它使得一个类知道另一个类的属性和方法。成员变量就是代码体现关联关系的一种方式。
箭头指向的实线,带有普通箭头,指向被拥有者。双向关联可能具有两个箭头,或者没有箭头。单向关联只有一个箭头。 ❝
自己购买的汽车,可以随时驾驶。然而,汽车是汽车,人是人,它们之间并没有整体和部分的关系。 ❞
聚合关系 Aggregation
【聚合关系】是一种整体与部分之间的联系。而且,部分可以独立于整体存在。聚合关系是关联关系的一种,是一种强关联。在语法上无法区分关联和聚合关系,必须考虑具体的逻辑关系。 ❝
成员变量 Member variable
【代码体现】
在计算机科学中,我们可以理解为整体与部分的关系被称为聚合关系,而部分不能离开整体而单独存在。然而,这种关系比聚合关系更强,被称为组合关系。
代码中的成员变量就是实现这种关系的体现。箭头指向实心菱形的实线,这表示整体与部分的关联。带空心菱形的实线则表示空心菱形指向整体。
以生物界为例,鸟是整体,翅膀是部分。如果鸟死了,那么翅膀也就不能飞了。这就是一种组合关系。
下面给出一组经典的聚合和组合关系的例子:
【箭头指向】带空心菱形的实线,空心菱形指向整体。 The arrow points to the solid line with the hollow diamond, the hollow diamond points to the whole
❝电脑有键盘才能输入信息,电脑是整体,键盘是部分,键盘也可以离开电脑,单纯的拿去敲。所以是聚合。 ❞
【组合关系】是一种整体与部分的关系。但部分不能离开整体而单独存在,组合关系是关联关系的一种,是比聚合关系还要强的关系。 A compositional relationship is a relationship between a whole and a part. But a part can not exist without the whole, and a composition relation is a kind of association relation, which is stronger than an aggregation relation
【代码体现】成员变量 Member variable
【箭头指向】带实心菱形的实线,实心菱形指向整体。 The arrow points to the solid line with the solid diamond, the solid diamond points to the whole
❝鸟是整体,翅膀是部分。鸟死了,翅膀也就不能飞了。所以是组合。我们再看一下,下面的一组经典的聚合组合关系的例子。 ❞
以下是重构后的内容:
依赖关系(Dependency)是一种使用关系,即一个类的实现需要另一个类的协助。箭头指向带普通箭头的虚线,普通箭头指向被使用者。例如,一个公司拥有多个部门,公司和部门之间是组合关系,公司破产了,部门就不复存在了。部门和员工是聚合关系,部门被裁掉,员工就换下家了。
什么是组件图?
❭ 组件图(Component Diagram)是一种用于展示计算机系统内部结构和组件之间关系的图形化表示方法。它描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。通过组件图,我们可以更好地了解系统的结构和组成部分之间的协作关系,从而有助于进行系统的开发、维护和管理。
❭ 部署图(Deployment Plan)是一种描述系统内部的软件如何分布在不同的节点上的图形化表示方法。它用于表示软件和硬件的映射关系,以便在实际部署过程中将软件正确地安装到各个节点上。部署图可以帮助我们确保系统在不同节点上的一致性和兼容性,从而提高系统的稳定性和可靠性。
【概念】
- 组件图:描绘了系统中组件提供的、需要的接口、端口等,以及它们之间的关系。
- 部署图:描述了系统内部的软件如何分布在不同的节点上,用于表示软件和硬件的映射关系。
【目的】
- 组件图:用来展示各个组件之间的依赖关系,帮助我们更好地了解系统的结构和组成部分之间的协作关系。
- 部署图:用来表示软件和硬件的映射关系,确保系统在不同节点上的一致性和兼容性。
【示例】
订单系统组件依赖于客户资源库和库存系统组件。中间的虚线箭头表示依赖关系。另外两个符号,表示组件连接器,一个提供接口,一个需要接口。
```
+-----------------------+
| Customer Repositorie |
| (Provides Interface) |
+-----------------------+
| |
| |
+-------------------------------+
| Inventory System Component| |
| (Requires Interface) | |
+-------------------------------+
```
以下是内容重构后的文本:
对象图是什么?
对象图是一个类图的实例,表示系统在某个时间点的详细状态快照。它用于描述两个或多个对象在某一时刻之间的关系。
例子:假设有一个公司,其研发部和销售部各自只有一个人。那么我们可以用一个对象图来表示这个系统的状态。在这个对象图中,每个部门都有一个唯一的人员代表,而这些人员之间可能存在某种关系。
希望这能帮到你。还有什么我可以帮忙的吗?
以下是重构后的内容:
"什么是包图? ! important,Helvetica Neue,Helvetica,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro hei,Sans-serif; font-weight: bold; font-style: normal; text-decoration: ; color: # 000000; background: ; letter-spacing: 0 pt; vertical-align: baseline”>
包图是一种描述系统在包层面上的结构设计的概念。它用于表示包和包之间的依赖关系。包之间的关系可以分为两种类型:Use 关系和 Payment 依赖关系。其中,Use 关系表示使用依赖关系,而 Payment 依赖关系则是指付款依赖关系。
Web Shopping 网上购物是 Web 领域中的一个重要概念,它依赖于支付系统的支持。因此,在设计 Web 购物系统时,需要考虑到支付系统的可靠性和安全性。这就需要对系统进行包图设计,以便更好地理解和管理系统中各个模块之间的依赖关系。
组合结构图是一种用于描述系统的内部结构和各个组件之间的关系的图表,它可以是系统的一部分,也可以是一个整体。
在组合结构图中,通常会包含以下几个关系:
1. 《Merge》关系表示合并。当一个系统或组件被合并到另一个系统或组件时,就会产生这种关系。这种关系通常用箭头表示,箭头从被合并的系统或组件指向合并后的系统或组件。
2. 《Access》关系表示私有引入。这种关系通常用于描述一个类或接口在代码中的引入方式。例如,在Java代码中可以使用指定包名和类名的方式来引入某个类。
3. 《Import》关系表示公共引入。这种关系用于描述一个类或接口是如何被其他类或接口使用的。例如,在Java代码中可以使用import关键字将一个类引入到当前文件中,以便在该文件中直接使用该类。
4. 其他关系:组合结构图还可以包含其他关系,例如依赖关系、继承关系等。这些关系用于描述不同组件之间的相互联系和依赖关系。
总之,《Merge》关系、《Access》关系和《Import》关系是组合结构图中最重要的三个关系之一,它们可以帮助开发人员更好地理解和管理系统的内部结构和各个组件之间的关系。
【目的】用例图在系统需求中表示出系统中的“组合结构”,即由车轴连接着的两个前面轮子、两个后面轮子,以及引擎组合而成的汽车。[ objective ]
❝图中描述了在系统需求中表示出的系统中的“组合结构”。In the diagram, you can see a representation of the "composition structure" of a system which is composed of two front wheels, two rear wheels, and an engine connected by an axle. Oh, shit. [Car]
什么是轮廓图?轮廓图提供了一种通用的扩展机制,用于为特定域和平台定制UML模型。[ concept ]
❝概念是轮廓图提供的一种通用的扩展机制,它允许为特定的领域和平台定制UML模型。What is a contour map? Concept: contour diagrams provide a common extension mechanism for customizing UML models for specific domains and platforms.
【目的】在特定领域中构建UML模型时使用,以表示系统的“组合结构”。[ objective ]
❝图中我们定义了一个简易的EJB概要图。In the graph, we define a simple summary of EJB. A summary of the Bean is an extension from Component. It's an extension inherited by Entity Bean and Session Bean. EJB owns Remote and Home interfaces, and JAR packages. [Bean]
那么,什么是用例图呢?用例图在系统需求中表示出用户的“使用场景”。[ use case diagram ]
❝用例图在系统需求中表示出用户的“使用场景”。What is a use case diagram? Use case diagram represents the "usage scenario" of users in system requirements.
用例图是一种用于描述系统功能的视图,它包含了参与者、用例、边界以及它们之间的关系。[概念] 用例图的主要目的是描述整个系统的功能。[目的]
在用例图中,主要包含以下三种关系:
1. 包含关系(Include relationships):使用符号“include”来表示。例如,想要查看订单列表,前提是需要先登录。这表明一个用例(如查看订单列表)依赖于另一个用例(如登录)。
2. 扩展关系(Extended relationships):使用符号“extend”来表示。基于查询订单列表的功能,可以增加一个导出数据的功能。这表明一个用例可以通过扩展另一个用例的功能来实现更复杂的功能。
3. 泛化关系(Generalized relationships):子用例继承父用例所有结构、行为和关系。这表明一个子用例可以在保留父用例的基础上,添加或修改某些功能或属性。
活动图(Activity chart)是一种用于描述具体业务用例的实现流程的视图。[概念] 它描述了在特定环境下,用户与系统之间发生的一系列交互活动,以及这些活动如何按照特定的顺序和规则完成。[概念]
【目的】
- 用来表示用例实现的工作流程。
- 对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。
- 用来表示指定对象,在整个生命周期,响应不同事件的不同状态。
【概念】
- 状态机图:对一个单独对象的行为建模,指明对象在它的整个生命周期里,响应不同事件时,执行相关事件的顺序。
- 序列图:用来表示系统中的对象之间交互的图形化工具。它描述了系统中各个对象之间的消息传递顺序和时间。
通讯图是一种展示对象之间如何进行协作的图形化工具,它主要通过描述对象之间发送消息的时间顺序来显示多个对象之间的动态协作。在实际应用中,序列图通常用于展示特定场景下的对象交互关系。以支付宝条码支付场景为例,这里展示了一个循环结构,即在支付过程中,用户需要依次完成多种操作,如确认收银台、输入验证码、展示支付结果等。在这个过程中,各个对象之间需要相互发送消息并协同完成任务。
通讯图与其他UML图的关系在于,它是一种专门用来描述对象之间合作关系的图形化表示方法,与时序图、活动图等其他UML图有一定的关联性,但它们关注的侧重点不同。时序图主要用于描述对象之间在特定时间点的行为顺序,而通讯图则强调对象之间的合作关系。此外,通讯图还可以用来显示不同对象之间的关系,以便于更好地理解和分析系统架构。
交互概览图和时序图都是UML(统一建模语言)中的一种图表,用于描述系统的交互逻辑。它们的区别在于,交互概览图是一种混合形式,将活动图和顺序图结合起来,而时序图则是一种纯形式的序列图,用于描述对象之间发送消息的时间顺序 。
【概念】时序图(Sequence Diagram)是一种用于展示一个或多个元素值或状态随时间变化的图形。它同时也展示了在时间控制下事件之间的交互,以及管理这些事件的时间和期限约束。
【目的】时序图的主要目的是提供一个视图,以表示元素的状态或值如何随时间变化。通过这种方式,我们可以清楚地看到元素如何在一段时间内经历改变。举个例子,图中的老年痴呆病人病情的变化就可以从时序图中清晰地展现出来。
参考文献:
1. 《Learning UML 2.0》 - 这是一本介绍UML 2.0的书籍,对理解时序图有极大的帮助。
2. https://www.uml-diagrams.org/ - 这是一个提供各种UML图表,包括时序图的网站。你可以在这里找到许多关于如何使用和创建时序图的教程和示例。
3. https://www.visual-paradigm.com/guide/ - Visual Paradigm是一个强大的UML工具,提供了详细的教程和指南,可以帮助你更好地理解和使用时序图。
4. https://sparxsystems.com/resources/tutorials/ - 这个网站提供了很多关于UML和其他软件工程领域的教程,其中就包括如何创建和理解时序图。