【UML用户指南】-29-对体系结构建模-协作

news2024/12/23 1:33:02

目录

1、概念

1.1、名称

1.2、结构

1.3、行为

1.4、组织协作

2、常用建模技术

2.1、对角色建模

2.2、对用例的实现建模

2.3、对操作的实现建模

2.4、对机制建模


在UML中,用协作来对机制建模。协作为系统中的交互构造块指定一个名称,其中既包含结构元素也包含行为元素

允许从外部把一个协作可视化为一个组块。放大一个协作,将被引导到其他一些图——特别是类图(用于协作的结构部分)和交互图(用于协作的行为部分)。

1、概念

协作 (collaboration)是一组类、接口和其他元素的群体,它们共同工作以提供比各组成部分的总和更强的合作行为。协作也是关于一个像类目(包括类、接口、构件、结点或用况)或操作那样的元素如何由一组以特定方式扮演特定角色的类目和关联来实现的规约。

协作的图形表示法是把它画成一个虚线椭圆

1.1、名称

名称 (name)是一个文本串。单独一个的名称叫做简单名 (simplename);

受限名 (qualifiedname)是用协作存在于其内的包名作为前缀的协作名。

一般要求名称首字母大写

1.2、结构

一是结构部分,它详细说明共同工作以完成该协作的类、接口和其他元素;

二是行为部分,它详细说明关于这些元素如何交互的动态性。

协作不能拥有自己的结构元素,而仅引用或使用在其他地方声明的类、接口、构件、结点和其他结构元素。这也是为什么把协作称作系统体系结构中的概念组块而不称作物理组块的原因。一个协作可以跨越系统的多个层次。

上图描绘了如何展开协作Internode messaging的内部,给出一个命名系统概念组块的协作,可以展开它以显露其内部的结构细节。

1.3、行为

协作的结构部分通常用组合结构图来表示,而行为部分通常用交互图来表示。

协作的行为部分可以由一个或多个交互图描述。如果想强调消息的时间顺序,就用顺序图。如果想强调协作时对象之间的结构关系,则采用协作图。

协作的行为部分必须与它的结构部分一致。看到的角色必须与在其内部结构中看到的角色相匹配。

1.4、组织协作

协作之间也存在关系。一些协作可以精化另一些协作,可以把这种关系建模为精化关系。协作间的精化关系通常反映了它们所表示的用况之间的精化关系。
 

2、常用建模技术

2.1、对角色建模

本质上,角色是出现在模式的个体实例中的对象的代理或替身。例如,若想对窗口应用中的对象响应鼠标事件的方式建模,则应该绘制包含角色的交互图,角色的类型包括窗口、事件和处理程序。

上图所展示了一个交互图,它图示了交换机语境中用于初始通话的一个局部的场景。其中有4个角色:a(CallingAgent)、c(Connection)、t1和t2(Terminal的两个实例)。这四个角色都表示现实世界中可能存在的具体对象的概念性代理。

2.2、对用例的实现建模

上图展示了一组从信用卡验证系统中提取的用况,其中有两个基本用况——Place order(订购)和Generate bill(生成账单)和两个从属用况——Detect card fraud(检验卡的真伪)和Validate transaction(事务验证)。虽然在多数情况下不需要显式地对这种关系建模(而是留给工具去做),但是此图显式地通过协作Order management(订单管理)对用况Place order的实现建模。可以进一步把该协作展开到它的结构和行为方面,引向相应的类图和交互图。通过实现关系,可以将用况与它对应的脚本连接起来。

2.3、对操作的实现建模

使用协作的另一个目的是对操作的实现建模。可以通过直接编码来描述操作的实现。

操作的参数、返回值和其中的局部对象提供了操作的实现的语境。

如果操作是算法密集型的,则用活动图对它的实现建模。

如果操作很复杂或者需要某些详细的设计工作,则将它的实现表示为协作。可以分别用类图和交互图来进一步展开协作的结构部分和行为部分。
 

上图展示了一个主动类RenderFrame,它显露出了三个操作。

函数progress很简单,所以直接采用代码实现,这在图中通过附加注解来描述。

操作render就复杂多了,所以它的实现由协作Ray trace来表示。尽管在这里没有显示,但可以展开这个协作来看它的结构方面和行为方面。

2.4、对机制建模

在所有结构良好的面向对象系统中,都会发现一系列模式。一方面,可以找到一些惯用法,它们代表了实现语言的使用模式。另一方面,会发现一些刻画整个系统并形成特定风格的体系结构模式和框架。在这两者之间,会发现代表系统中通用设计模式的机制,通过这些机制,系统中的事物以共同的方式彼此交互。可以用UML将这些机制建模为协作。

机制是独立存在的协作,其语境不是单个的用况或操作,而是整个系统。系统中这一部分的任何可见的元素都可以作为参与一个机制的候选者


 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1898987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Aigtek电压放大器参数有哪些

电压放大器是广泛应用于电子电路中的一种重要电路元件,它主要用于将输入信号的电压放大到所需的输出电压水平。在设计和使用电压放大器时,我们需要了解并考虑一系列的参数和特性。本文将详细介绍电压放大器的主要参数,包括放大倍数、带宽、输…

JAVA 对象存储OSS工具类(腾讯云)

对象存储OSS工具类 import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; import com.qcloud.cos.auth.BasicCOSCredentials; import com.qcloud.cos.auth.COSCredentials; import com.qcloud.cos.model.ObjectMetadata; import com.qcloud.cos.model.PutObj…

机器学习之模型训练

前言 模型训练一般分为四个步骤: 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 有了数据集和模型后,可以进行模型的训练与评估。 构建数据集 定义神经网络模型 class Network(nn.Cell):def __init__(sel…

第一篇——导论:数学通识课的体系和学习攻略

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 数学的认知大厦;之前听的时候就觉得很重要,本次又…

性能压测 -优化 Nginx的动静分离

两件事情 1.以后将所有的项目的静态资源都应该放在nginx里面 2.nginx 规则:/static/***所有请求都有nginx直接返回 nginx 配置一下配置文件,然后把html 的静态资源,绑定好是Nginx优先级高的静态资源路径,就去交给nginx静态资源…

h5 video 标签播放经过 java 使用 ws.schild( jave、ffmpeg ) 压缩后的 mp4 视频只有声音无画面的问题排查记录

1. 引入 ws.schild MAVEN 依赖&#xff1a; <dependency><groupId>ws.schild</groupId><artifactId>jave-all-deps</artifactId><version>3.5.0</version></dependency><dependency><groupId>ws.schild</grou…

基于Spring Boot框架的EAM系统设计与实现

摘 要&#xff1a;文章设计并实现一个基于Spring Boot框架的EAM系统&#xff0c;以应对传统人工管理模式存在的低效与信息管理难题。系统利用Java语言、JSP技术、MySQL数据库等技术栈&#xff0c;构建了一个B/S架构的高效管理平台&#xff0c;提升了资产管理的信息化水平。该系…

分班查询系统怎么制作?

新学年的临近&#xff0c;教师们的工作清单再次膨胀&#xff0c;充满各种任务。开学前的准备总是让人忙碌不已&#xff0c;从课程规划到教室布置&#xff0c;再到与家长的沟通&#xff0c;每一个环节都至关重要。尤其是分班结果的公布&#xff0c;这项工作虽然看起来简单&#…

Qwen1.5-1.8b部署

仿照ChatGLM3部署&#xff0c;参考了Qwen模型的文档&#xff0c;模型地址https://modelscope.cn/models/qwen/Qwen1.5-1.8B-Chat/summary http接口 服务端代码api.py from fastapi import FastAPI, Request from transformers import AutoTokenizer, AutoModelForCausalLM, …

强化学习后的数学原理:随机近似与梯度下降

概述 这节课的作用&#xff1a; 本节课大纲如下&#xff1a; Motivating examples 先回顾一下 mean estimation &#xff1a; 为什么总数反复提到这个 mean estimation&#xff0c;就是因为 RL 当中有非常多的 expectation&#xff0c;后面就会知道除了 state value 这些定义…

PySide6 实现资源的加载:深入解析与实战案例

目录 1. 引言 2. 加载内置资源 3. 使用自定义资源文件&#xff08;.qrc&#xff09; 创建.qrc文件 编译.qrc文件 加载资源 4. 动态加载UI文件 使用Qt Designer设计UI 加载UI文件 5. 注意事项与最佳实践 6. 结论 在开发基于PySide6的桌面应用程序时&…

博途通讯笔记1:1200与1200之间S7通讯

目录 一、添加子网连接二、创建PUT GET三、各个参数的意义 一、添加子网连接 二、创建PUT GET 三、各个参数的意义

新手高效指南:电子元器件BOM表创建/制作及配单全教程

在科技日新月异的今天&#xff0c;电子产品设计与制造不仅是创新精神的展现&#xff0c;更是对精确度与效率的不懈追求。在这个过程中&#xff0c;一份精细且全面的BOM&#xff08;物料清单&#xff09;犹如一座桥梁&#xff0c;连接着创意与现实世界。BOM不仅细致记录了产品所…

如何优化圆柱晶振32.768KHz的外壳接地?

圆柱晶振32.768KHz在电子设备中扮演着重要的角色&#xff0c;其精确的时钟信号对于许多应用至关重要。为了确保晶振的稳定性和准确性&#xff0c;外壳接地是一个关键步骤。 一、外壳接地的目的 外壳接地的主要目的是为了防止信号干扰。当晶振的外壳接地后&#xff0c;它相当于…

16-JS封装:extend方法

目录 一、封装需求 二、实现1&#xff1a;jQuery.extend 三、实现2&#xff1a;通过原型jQuery.fn.extend 四、优化 一、封装需求 封装需求&#xff1a; $.extend&#xff1a; var obj{ name:"xxx",age:18} var obj3{ gender:"女"} var obj2{}; 将obj、…

S7-1200PLC学习记录

文章目录 前言一、S7-12001.数字量输入模块2. PNP接法和NPN接法 二、博图软件1. 位逻辑运算Part1. 添加新设备&#xff08;添加PLC&#xff09;Part2. 添加信号模块Part3. 添加信号板中模块Part4. 添加新块Part5. Main编程文件案例1案例2 -( S )- 和 -( R )-完整操作过程&#…

ERROR | Web server failed to start. Port 8080 was already in use.

错误提示&#xff1a; *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 8080 was already in use.Action:Identify and stop the process thats listening on port 8080 or configure thi…

C++——模板详解(下篇)

一、非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之后的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类&#xff08;函数&#xff09;模板的一个参数&#xff0c;在类&#…

Swift 中的方法调用机制

Swift 方法调用详解&#xff1a;与 Objective-C 的对比、V-Table 机制、Witness Table 机制 在 iOS 开发中&#xff0c;Swift 和 Objective-C 是两种常用的编程语言。尽管它们都能用于开发应用程序&#xff0c;但在方法调用的底层机制上存在显著差异。本文将详细介绍 Swift 的…

maven项目使用netty,前端是vue2,实现通讯

引入的java包 <!-- 以下是即时通讯--><!-- Netty core modules --><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.76.Final</version> <!-- 使用最新的稳定版本…