欢迎光临散文网 会员登陆 & 注册

系统架构师-UML相关

2023-06-17 09:41 作者:chaojilaji123  | 我要投稿

原文合集地址如下,有需要的朋友可以关注


[本文地址](https://mp.weixin.qq.com/s/rXzQ7EqlK42AOs836xfa7A)


[合集地址](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzI5MjY4OTQ2Nw==&action=getalbum&album_id=2969297821654843397&scene=173&from_msgid=2247484209&from_itemidx=1&count=3&nolastread=1#wechat_redirect)


# 介绍


>UML(Unified Modeling Language)用例图的缩写为UCD,其中UCD代表Use Case Diagram。用例图是软件系统设计中的一种图形化表示工具,用于描述系统的功能需求和用户与系统之间的交互。用例图主要用于捕捉系统的行为视图,展示系统中的参与者(actors)和用例(use cases)之间的关系。


## 用例图中的元素

在UML(Unified Modeling Language)用例图中,常见的元素包括:


1. 参与者(Actors):参与者是与系统进行交互的外部实体,可以是人、其他软件系统、硬件设备等。参与者可以触发用例的执行,也可以从系统中接收结果。参与者通常以图标形式表示,如人的图标或系统图标。


2. 用例(Use Cases):用例代表系统中的一个功能或一个用户场景,描述了系统提供的服务。用例通常以椭圆形状表示,并使用有意义的名称来描述其功能。每个用例描述了一个或多个参与者与系统之间的交互流程。


这些元素一起构成了用例图,通过用例图可以清晰地描述系统的功能需求和用户与系统之间的交互关系,帮助开发团队和利益相关者更好地理解和沟通系统的设计。


## 用例图中的关系有哪些

在UML(Unified Modeling Language)用例图中,常见的关系有以下几种:


### 1. 关联关系(Association)

>关联关系表示参与者(Actor)与用例(Use Case)之间的连接。它们表示参与者与用例之间的通信和交互关系。关联关系通常使用直线连接参与者和用例。


假设我们正在设计一个客户管理系统,其中包含以下几个用例:


1. 创建客户档案(Create Customer Profile)

2. 更新客户信息(Update Customer Information)

3. 查看客户详情(View Customer Details)

4. 删除客户档案(Delete Customer Profile)


在这个客户管理系统中,我们还有两个参与者:


1. 管理员(Administrator):负责管理系统和客户档案的管理员。

2. 客户(Customer):使用系统的客户。


现在我们来看一下哪些场景是关联关系:


关联关系示例 1:

   - 参与者:管理员

   - 用例:创建客户档案

   - 关联关系:管理员与创建客户档案之间建立关联关系,表示管理员可以触发创建客户档案的操作。


关联关系示例 2:

   - 参与者:客户

   - 用例:更新客户信息

   - 关联关系:客户与更新客户信息之间建立关联关系,表示客户可以触发更新自己信息的操作。


关联关系示例 3:

   - 参与者:管理员

   - 用例:查看客户详情

   - 关联关系:管理员与查看客户详情之间建立关联关系,表示管理员可以触发查看客户详情的操作。


关联关系示例 4:

   - 参与者:管理员

   - 用例:删除客户档案

   - 关联关系:管理员与删除客户档案之间建立关联关系,表示管理员可以触发删除客户档案的操作。


在这些关联关系中,参与者与各个用例之间建立了连接,表示**参与者可以触发或执行相应的用例**。这些关联关系在用例图中通过直线连接参与者和用例来表示。



### 2. 包含关系(Include)

>包含关系表示一个用例(包含者)包含另一个用例(被包含者)的行为。当一个用例需要调用另一个用例以完成其功能时,可以使用包含关系来表示这种关系。包含关系通常使用带箭头的虚线表示。


假设我们正在设计一个客户管理系统,其中包含以下几个用例:


1. 创建客户档案(Create Customer Profile)

2. 更新客户信息(Update Customer Information)

3. 查看客户详情(View Customer Details)

4. 删除客户档案(Delete Customer Profile)


在这个客户管理系统中,我们可以看到一些用例之间存在包含关系:


包含关系示例 1:

   - 用例:更新客户信息

   - 包含关系:更新客户信息包含了创建客户档案

   - 描述:在执行更新客户信息的过程中,如果客户档案不存在,则需要先执行创建客户档案的操作,因此创建客户档案是更新客户信息的一个子功能。这种关系可以使用包含关系来表示。


包含关系示例 2:

   - 用例:删除客户档案

   - 包含关系:删除客户档案包含了查看客户详情

   - 描述:在执行删除客户档案的过程中,需要先查看客户详情来确认要删除的客户信息。因此,查看客户详情是删除客户档案的一个子功能。这种关系可以使用包含关系来表示。


在这些包含关系的示例中,**一个用例包含了另一个用例的行为,也就是说,一个用例的功能需要调用另一个用例来完成**。这种关系在用例图中可以用带箭头的虚线来表示。


### 3. 扩展关系(Extend)

>扩展关系表示一个用例(扩展者)可以在特定条件下扩展另一个用例(被扩展者)的功能。当一个用例的某个功能是可选的,并且仅在满足一定条件时才会发生时,可以使用扩展关系来表示这种关系。扩展关系通常使用带箭头的虚线表示。


假设我们正在设计一个客户管理系统,其中包含以下几个用例:


1. 创建客户档案(Create Customer Profile)

2. 更新客户信息(Update Customer Information)

3. 查看客户详情(View Customer Details)

4. 删除客户档案(Delete Customer Profile)


在这个客户管理系统中,我们可以找到一些使用扩展关系的场景:


扩展关系示例 1:

   - 基础用例:创建客户档案

   - 扩展用例:验证客户信息

   - 描述:当执行创建客户档案的操作时,可以选择进行验证客户信息的扩展。验证客户信息是一个可选的扩展功能,仅在需要验证客户信息时才会发生。通过扩展关系,我们可以将验证客户信息扩展与创建客户档案基础用例关联起来。


扩展关系示例 2:

   - 基础用例:更新客户信息

   - 扩展用例:记录修改日志

   - 描述:当执行更新客户信息的操作时,可以选择记录修改日志的扩展。记录修改日志是一个可选的扩展功能,用于记录更新客户信息的操作历史。通过扩展关系,我们可以将记录修改日志扩展与更新客户信息基础用例关联起来。


在这些扩展关系的示例中,**一个用例可以在特定条件下扩展另一个用例的功能**。扩展关系通过带箭头的虚线表示,并指示扩展发生的条件。通过扩展关系,我们可以描述系统中的可选功能,并以清晰的方式表示这些功能与基础用例之间的关系。


### 4. 泛化关系(Generalization)

>泛化关系表示一个用例或参与者是另一个用例或参与者的特殊情况。泛化关系用于描述继承关系,其中子用例或子参与者继承了父用例或父参与者的行为和属性。泛化关系通常使用带空心三角形的实线表示。


假设我们正在设计一个客户管理系统,其中有两种类型的客户:普通客户(Regular Customer)和VIP客户(VIP Customer)。在这个系统中,我们可以使用泛化关系来表示这两种客户之间的关系。


泛化关系示例:


泛化关系示例 1:

   - 父用例:创建客户档案

   - 子用例:创建普通客户档案、创建VIP客户档案

   - 描述:创建普通客户档案和创建VIP客户档案都是创建客户档案的特殊情况。这里的泛化关系可以表示为父用例“创建客户档案”和子用例“创建普通客户档案”以及“创建VIP客户档案”之间的继承关系。


泛化关系示例 2:

   - 父用例:查看客户详情

   - 子用例:查看普通客户详情、查看VIP客户详情

   - 描述:查看普通客户详情和查看VIP客户详情都是查看客户详情的特殊情况。这里的泛化关系可以表示为父用例“查看客户详情”和子用例“查看普通客户详情”以及“查看VIP客户详情”之间的继承关系。


在这些泛化关系的示例中,**子用例继承了父用例的行为和属性,子用例是父用例的特殊情况**。通过泛化关系,我们可以使用父用例来定义通用的行为和属性,并通过子用例来表示不同情况下的特殊行为和属性。在用例图中,泛化关系通常使用带空心三角形的实线来表示。


### 5. 依赖关系(Dependency)

>依赖关系表示一个元素(依赖者)依赖于另一个元素(被依赖者)。当一个元素的变化可能影响到另一个元素时,可以使用依赖关系来表示这种关系。依赖关系通常使用带箭头的虚线表示。


假设我们正在设计一个客户管理系统,其中包含以下几个用例:


1. 创建客户档案(Create Customer Profile)

2. 更新客户信息(Update Customer Information)

3. 发送邮件通知(Send Email Notification)


在这个客户管理系统中,我们可以找到一些使用依赖关系的场景:


依赖关系示例 1:

   - 用例:发送邮件通知

   - 依赖关系:发送邮件通知依赖于更新客户信息

   - 描述:当执行发送邮件通知的操作时,需要获取最新的客户信息来构建邮件内容。发送邮件通知的操作依赖于更新客户信息的结果。因此,发送邮件通知用例依赖于更新客户信息用例。


依赖关系示例 2:

   - 用例:创建客户档案

   - 依赖关系:创建客户档案依赖于发送邮件通知

   - 描述:在执行创建客户档案的操作时,需要发送邮件通知给相关人员。创建客户档案的操作依赖于发送邮件通知的结果。因此,创建客户档案用例依赖于发送邮件通知用例。


在这些依赖关系的示例中,**一个用例的执行依赖于另一个用例的结果或输出**。依赖关系可以帮助我们描述用例之间的依赖关系,以确保正确的顺序和流程。在用例图中,依赖关系通常使用带箭头的虚线来表示。



## 对比记忆


### 包含关系和扩展关系的区别

包含关系和扩展关系是用例图中两种不同的关系,用于描述用例之间的关联和扩展。


包含关系(Inclusion Relationship)是一种用于描述一个用例包含另一个用例的关系。在包含关系中,一个用例的功能需要调用另一个用例来完成。被包含的用例是包含用例的一部分,也就是说,包含用例将使用被包含用例的功能来完成自身的行为。包含关系通常用于表示一种可重用的行为或功能,以便将其用于多个用例中。


扩展关系(Extension Relationship)是一种用于描述一个用例在特定条件下扩展另一个用例的功能的关系。在扩展关系中,一个用例可以在特定条件下扩展另一个用例的功能,以增加额外的行为或功能。扩展关系通常用于表示一种可选的或条件性的功能,只有在特定条件下才会触发扩展用例的执行。


区别如下:


- 包含关系强调一个用例的功能需要调用另一个用例来完成,被包含的用例是包含用例的一部分。

- 扩展关系强调一个用例可以在特定条件下扩展另一个用例的功能,扩展用例是基础用例的可选或条件性扩展。



### 泛化关系和扩展关系的区别

泛化关系(Generalization Relationship)和扩展关系(Extension Relationship)是用例图中两种不同的关系,用于描述用例之间的关联和继承。


1. 泛化关系:

   - 泛化关系用于描述用例之间的继承关系,表示一个用例是另一个用例的特殊情况或子类。

   - 通过泛化关系,一个用例可以继承另一个用例的行为和属性。

   - 泛化关系适用于表示用例之间的一般与特殊关系,其中子用例继承了父用例的通用行为。

   - 在用例图中,泛化关系通常使用带空心三角形的实线来表示。


2. 扩展关系:

   - 扩展关系用于描述一个用例在特定条件下扩展另一个用例的功能。

   - 通过扩展关系,一个用例可以在特定条件下增加额外的行为或功能,扩展用例是基础用例的可选或条件性扩展。

   - 扩展关系适用于表示用例之间的可选或条件性功能扩展,其中扩展用例依赖于基础用例的执行,并在满足特定条件时才会触发执行。

   - 在用例图中,扩展关系通常使用带箭头的虚线来表示。


总结来说,泛化关系用于表示用例之间的继承关系,子用例是父用例的特殊情况;而扩展关系用于表示一个用例在特定条件下扩展另一个用例的功能。它们描述了不同类型的关联和行为,用于表示不同的用例之间的关系。


### 泛化关系和包含关系的区别

泛化关系(Generalization Relationship)和包含关系(Inclusion Relationship)是用例图中两种不同的关系,用于描述用例之间的关联和组织结构。


1. 泛化关系:

   - 泛化关系用于描述用例之间的继承关系,表示一个用例是另一个用例的特殊情况或子类。

   - 通过泛化关系,一个用例可以继承另一个用例的行为和属性,子用例是父用例的扩展。

   - 泛化关系适用于表示用例之间的一般与特殊关系,其中子用例继承了父用例的通用行为。

   - 在用例图中,泛化关系通常使用带空心三角形的实线来表示。


2. 包含关系:

   - 包含关系用于描述一个用例包含另一个用例的关系,表示一个用例的功能需要调用另一个用例来完成。

   - 被包含的用例是包含用例的一部分,它提供了一种可重用的行为或功能。

   - 包含关系适用于表示用例之间的组织结构和模块化,其中一个用例的功能包含了另一个用例的功能。

   - 在用例图中,包含关系通常使用带箭头的虚线来表示。


区别如下:


- 泛化关系描述了用例之间的继承关系,其中子用例是父用例的特殊情况,子用例继承了父用例的行为和属性。

- 包含关系描述了一个用例包含另一个用例的关系,其中一个用例的功能需要调用另一个用例来完成,被包含的用例提供了可重用的行为或功能。

- 泛化关系强调继承和扩展的关系,子用例是父用例的特殊情况,继承了父用例的通用行为。

- 包含关系强调模块化和组织结构,一个用例的功能包含了另一个用例的功能,被包含的用例提供了一种可重用的行为。


虽然泛化关系和包含关系在某些方面可能有一些相似之处,但它们描述的是不同的概念和关系。泛化关系用于描述继承关系,而包含关系用于描述组织和模块化关系。



## 缩写记忆方式

### 基础概念

简单来说,一共有五个关系。他们分别的关键点在如下:

1、依赖关系:一个用例的执行依赖于另一个用例的结果或输出

2、关联关系:参与者可以触发或执行相应的用例

3、泛化关系:子用例继承了父用例的行为和属性,子用例是父用例的特殊情况

4、包含关系:一个用例的功能需要调用另一个用例来完成

5、扩展关系:一个用例可以在特定条件下扩展另一个用例的功能


### 区别

包含关系中有**重用**的概念

扩展关系中有**额外**的概念

泛化关系中有**继承**的概念

依赖关系中有**先后串联**的概念


### 顺口溜

包含重用:箭头虚线

扩展额外:箭头虚线

泛化继承:空心三角形实线

依赖串联:箭头虚线

关联参与:直线






系统架构师-UML相关的评论 (共 条)

分享到微博请遵守国家法律