【UML用户指南】-24-对高级行为建模-进程和线程

目录

1、概念

2、主动类

3、通信

4、同步

5、常用建模技术

5.1、对多控制流建模

5.2、对进程间通信建模


 

在UML中,可以将每一个独立的控制流建模为一个主动对象,它代表一个能够启动控制活动的进程或线程。

进程是一个能与其他进程并发执行的重量级的流;

线程是一个能与同一进程中的其他线程并发执行的轻量级的流。

主动对象是类的一个实例,在这种情况下,它是主动类的实例。同样也像所有的对象一样,主动对象通过传送消息进行互相之间的通信,然而在这里,消息的传送必须扩充某些并发语义,以帮助同步相互独立的流之间的交互。
 

主动类是类的一种,所以具有类的所有通常部分,包括类名、属性和操作。主动类经常接收信号,通常把这些信号列在一个附加栏中。
 

3dc1af7591304beebf22b5d646e459c1.png

1、概念

主动对象 (active object)是拥有进程或线程,并能够启动控制活动的对象

主动类 (active class)是其实例为主动对象的类。

进程 (process)是能同其他的进程并发执行的重量级的流;

线程 (thread)是能与同一进程中的其他线程并发执行的轻量级的流。

在图形上,主动类用一个左右边为双线的矩形来表示。

进程和线程用衍型化的主动类来表示(而且也在交互图中作为一个序列出现)

一个主动类表示一个独立的控制流,而普通的类不能体现这样的流。

与主动类相比,普通类隐含地被称作被动的,因为它们不能独立地启动控制活动。

2、主动类

主动类拥有与所有其他类相同的特性。

主动类可以有实例;主动类可以有属性和操作;主动类也可以参与到依赖、泛化和关联(包括聚合)关系中;主动类可以使用UML的任何扩展机制,包括衍型、标记值和约束;主动类可以是接口的实现;主动类可以由协作实现,它的行为可以用状态机来说明;主动类还可以参与协作。

3、通信

当对象相互协作时,它们通过从一个对象向另一个对象发送消息来进行交互。

四种交互组合:

1)消息可以在被动对象之间传递。

假定在一个时间点只有一个控制流通过这些对象,这样的一个交其实就是对一个操作的简单引用。

2)消息从一个主动对象传送到另一个主动对象。

当这种情况发生时,就有了进程间的通信,并且有两种可能的通信类型:

一种类型是,一个主动对象可能同步地调用另一个主动对象的操作。这种通信具有会合的语义,即:调用者调用操作;调用者等待接受者接受这个调用;操作被引用;为基于接收者对象的操作和类的执行选择一个方法;方法被执行;一个返回对象(如果有)被回送给调用者;然后二者分别继续它们的各自独立的路径。在调用过程中,两个控制流的步调是固定的。

另一种类型是,一个主动对象可能异步地发送一个信号或调用另一个对象的一个操作。这种通信具有邮箱的语义,这意味着调用者发送信号或调用操作,然后就继续它自己的独立的路径。在此期间,接收者在(通过插入事件或调用队列)做好准备时才接受信号或调用,完成后继续执行它的路径。之所以称这种通信为邮箱,是因为这两个对象不是同步的,而是一个对象给另一个对象留下一个消息后就离开。

在UML中,用实心箭头来表示同步消息,用枝状箭头来表示异步消息

3)消息从一个主动对象传送到一个被动对象。

如果在一个时间点上,有多于一个主动对象通过一个被动对象传送它们的控制流,那么就出现了潜在的冲突。如果同时有多个对象写或者读写同一个属性,那就是真正的冲突了。

4)消息从一个被动对象传送到一个主动对象。

初看起来,这显得不合法,但如果记住每个控制流都是以某些主动对象为根,就会理解,从被动对象传送消息到主动对象与从主动对象传送消息到主动对象具有相同的语义。

1267c440d71949f7872264db36fd0728.png

4、同步

当同一时间在一个对象中有多个控制流时,就出现了问题。如果不小心,可能有一个以上的流来修改同一属性,破坏对象的状态或丢失信息。这是典型的相互排斥问题。

三种方法建模:

1)顺序的(sequential)。调用者必须在对象外部进行协调,使得在一个时刻对象中只有一个流。当有多个控制流出现时,就无法保证该对象的语义和完整性。

2)监护的(guarded)。当有多个控制流出现时,该对象的语义和完整性是通过把所有对受监护的对象操作的调用顺序化来保证的。其效果是,在一个时刻对象恰好只有一个操作能够执行,使之简化为顺序的语义。如果没有设计好,就会有死锁的危险。

3)并发的(concurrent)。当有多个控制流出现时,该对象的语义和完整性得到保证是因为多个控制流存取不相交的数据集合,或者只读取数据。可以通过仔细设计的规则来安排这种情况。

bef02c71c9c949749c9c3a0ad54e36a0.png

可以允许同时有多个读者,但只允许有单独一个写入者来修改concurrent特性

5、常用建模技术

5.1、对多控制流建模

在UML中,可以使用包含主动类和主动对象的类图(捕捉它们的静态语义)和交互图(捕捉它们的动态语义)来做此事。

9b7c153e5bd1409e8715b28c9c2d4739.png

上图显示了一个商务系统的进程视图的一部分。可以发现3个对象并发地把信息放入系统中:StockTicker、IndexWatcher和CNNNewsFeed(名称分别为s、i和c)。这些对象中的两个(s和i)与它们自己的Analyst实例(a1和a2)通信。至少对于这个模型来说,可以简单地假定这个Analyst一个时刻只有一个控制流在它的实例中是活动的。然而,Analyst的两个实例都同时与AlertManager(名称为m)通信。因此,m必须被设计为在多个控制流出现时能维持它的语义。m和c同时与t(一个TradingManager)进行通信。每个流都给定一个由拥有它的控制流来区分的序号。

5.2、对进程间通信建模

进程间通信有两种经典的方式,即消息传送和远程过程调用。

用异步通信对消息建模,用同步通信对远程过程调用建模。

0b7ada0678f74c9da8d5252d3ff38fd1.png

上图显示了一个分布式预订系统,它的进程跨越4个结点。每个对象都用process衍型来标记。每个对象还用一个 location 属性来标记,以说明它的物理位置。在Reserva-tionAgent、TicketingManager和HotelAgent之间的通信是异步的。

用一个注解来描述通信是建立在Java Beans消息服务上的。

在TripPlanner和ReservationSystem之间的通信是同步的。它们的交互语义可以在名为CORBA ORG的协作中找到。TripPlanner作为一个client工作,ReservationAgent 作为一个server 工作。通过放大这个协作,将发现有关服务器端与客户端之间是如何协作的细节。
 

 

 

 

 

 

 

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

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

相关文章

2024新版大屏互动微信上墙源码大屏互动神器年会婚庆微现场3D签到

2024年大屏幕互动源码动态背景图和配乐素材搭建教程 php宝塔搭建部署活动现场大屏幕互动系统php源码,可以用来构建具有互动功能的大屏幕系统,为活动现场提供各种互动体验。 修复版的系统源码在原有功能的基础上,增加了更加完善的用户体验和稳…

【python学习】如何在一个python文件中调用另一个python文件的函数

在Python中,你可以通过import语句来调用另一个Python文件中的函数。假设你有两个Python文件:main.py 和 helper.py,并且你想要在main.py中调用helper.py中的函数。 首先,确保helper.py文件中有一个你可以调用的函数。例如&#x…

002-关于Geogebra软件的介绍及与MatLab的区别

为什么要学Geogebra? 因为和MatLab的科学计算相比,GeoGebra重点突出教学展示,对于教师、学生人群来讲再合适不过了,尤其是可以融入到PPT里边呈现交互式动画,想想听众的表情!这不就弥补了看到PPT播放数学公…

GIT 基于master分支创建hotfix分支的操作

基于master分支创建hotfix分支的操作通常遵循以下步骤: 切换到master分支: 首先,确保你的工作区是最新的,并且你在master分支上。如果不在master分支,你需要先切换过去。 Bash git checkout master 拉取最新的master…

科研图片清晰化

科研图片清晰化方法包括图像类型与处理工具的选择、图像色彩模式设置、图像储存与导出格式等。在科研领域,尤其是在撰写和发表学术论文的过程中,清晰的科研图片是展示研究结果的重要部分。它能够帮助审稿人和读者更好地理解研究内容和结论,增…

STM32第十二课:ADC检测烟雾浓度(MQ2)

文章目录 需求一、MQ-2 气体传感器特点应用电路及引脚 二、实现流程1.开时钟,分频,配IO2.配置ADC的工作模式3.配置通道4.复位,AD校准5.数值的获取 需求实现总结 需求 使用ADC将MQ2模块检测到的烟雾浓度模拟量转化为数字量。 最后&#xff0c…

2.00004 优化器执行计划生成的流程是怎么样的?

文章目录 整体架构关键结构体PlannerInfo (pathnodes.h:195)PlannerGlobal (pathnodes.h:95)函数栈关键函数pg_plan_query (postgres.c:885)planner (planner.c:274)standard_planner (planner.c:287)subquery_planner (planner.c:628)整体架构 关键结构体 PlannerInfo (pathn…

Servlet_Web小结

1.web开发概述 什么是服务器? 解释一:服务器就是一款软件,可以向其发送请求,服务器会做出一个响应. 可以在服务器中部署文件,让他人访问 解释二:也可以把运行服务器软件的计算机也可以称为服务器。 web开发: 指的是从网页中向后…

MySQL-SQL优化Explain命令以及参数详解

前言 在MySQL优化的众多手段中,EXPLAIN命令扮演着至关重要的角色。它是数据库管理员和开发者手中的利器,用于分析SQL查询的执行计划。通过执行EXPLAIN,MySQL会提供一份详细的查询执行计划报告,这份报告揭示了查询将如何执行&…

【GIT】GIT服务器迁移了之后如何重新映射

最近我的一个GIT服务器镜像迁移了,伴随着ip地址也发生了变化。 经过实践,发现执行一下三步即可解决: 1、进入客户端版本管理后的源码文件夹; 2、执行: git remote -v 如果目录不对会提示: fatal: not…

2024年6月个人工作生活总结

title: 2024年6月个人工作生活总结 urlname: code-for-2024-06 tags: 代码积累知识总结 categories:我的程序代码 date: 2024-06-30 00:00:00 photos:gallery/tech/c2.jpg 本文为 2024年6月工作生活总结。 研发编码 编码和注释 因某些需要,重拾了2019年的工程代码…

Scala 循环

Scala 循环 Scala,作为一种多范式的编程语言,提供了丰富的方式来处理循环和迭代。在Scala中,除了传统的for和while循环外,还有更高级的函数式编程特性,如集合操作和高阶函数,这些都可以用来实现循环和迭代的任务。本文将详细介绍Scala中的循环机制,包括基本语法、高级用…

JUC工具类: Semaphore详解

Semaphore底层是基于AbstractQueuedSynchronizer来实现的。Semaphore称为计数信号量,它允许n个任务同时访问某个资源,可以将信号量看做是在向外分发使用资源的许可证,只有成功获取许可证,才能使用资源。立刀旁 目录 # 带着BAT大厂…

EDA 虚拟机 Synopsys Sentaurus TCAD 2016.03 下载

下载地址(制作不易,下载使用需付费,不能接受的请勿下载): 链接:https://pan.baidu.com/s/1baw0IhmnFOKVkJMI3zkD_A?pwdcheo 提取码:cheo

【SQL】如何描述索引的分类

数据库中的索引种类多样,每种索引都有其特定的用途和特点。以下是常见的索引分类: 1. 单列索引 (Single-Column Index) 对单个列创建的索引。最基本的索引类型。 CREATE INDEX idx_column_name ON table_name (column_name);2. 多列索引 (Composite I…

联邦的基础配置

一、联邦的定义 联邦:在AS内部部署全互联的IBGP对等体可以很好解决IBGP路由传递的问题,但是扩展性低,大型网络中会带来沉重负担,针对此问题可以用路由反射器解决,也可以利用联邦解决,联邦也被称为联盟。大…

从Telnet到SSH:提升远程访问的安全性

前言 在计算机网络和远程通信中,Telnet和SSH是两种常用的协议,用于远程访问和管理服务器。然而,它们在安全性和功能方面有显著的区别。本文将详细讲述Telnet和SSH的区别,并探讨SSH在增强远程访问安全性中的重要性。 什么是Telne…

上门按摩SPA系统源码定制,专业搭建开发预约服务平台

在快节奏的现代社会,人们对放松和舒缓压力的需求日益增长。上门按摩SPA服务因其便捷性和私密性,受到了越来越多消费者的青睐。为了满足这一市场需求,专业的上门按摩SPA预约服务平台的搭建显得尤为重要。 我们的团队专注于为按摩SPA行业提供上…

MRTK 2.8.3

1.PC按键控制 移动摄像头:WSADQE、鼠标右键 模拟双手:左手(左Shift)、右手(右Shift) 将模拟的双手保持在视野中:T或Y 旋转模拟手部:按住Ctrl并移动鼠标 捏合手势:左Shift/空格 + 鼠标左键 2.常用脚本 (1)HandInteractionTouch(需搭配NearInteractionTouchableVolum…

python中方法的重写详解

python中对于类的继承的时候调用父类中一些方法的时候,会根据新的功能给方法增加一些新的内容,同时又要保留一些原有的父类里面的一些内容,此时就要对方法进行重写,这里面详细记录自己对于方法重写的心得 重写父类用两种&#xf…