【UML用户指南】-30-对体系结构建模-模式和框架

目录

1、机制

2、框架

3、常用建模技术

3.1、对设计模式建模

3.2、对体系结构模式建模


 

用模式来详述形成系统体系结构的机制和框架。通过清晰地标识模式的槽、标签、按钮和刻度盘

在UML中,

设计模式(也叫做机制)建模,将它们表示为协作。

将体系结构模式建模为框架,将它们表示为衍型化的包。


8afcae74c7b24a73b0702b0dd281887f.png

模式 (pattern)是对给定语境中共同问题的通用解决方案。

机制(mechanism)是应用于类群体的设计模式。

框架 (framework)是为领域中的应用系统提供可扩充模板的体系结构模式。
 

例如,如果正在建立一个用户密集型系统,一种经过考验的组织抽象的方法是使用模型——视图——控制器模式,用这种模式将对象(模型)和它们的表示(视图)以及协调二者同步工作的代理(控制器)清楚地分离开来。与此类似,如果是在建立一个破解密码的系统,一种经过考验的组织系统的方法是使用黑板体系结构,它很适合以机会主义的方式来解决难处理的问题。
 

1、机制

机制只是应用于类群体的设计模式的一个别名。

 

1)第一种方式:一个机制仅仅是为一组共同工作来完成一些共同而有意义的行为的抽象指定一个名称。因为它只是对类的群体命名,所以可将它建模为简单的协作。展开这个协作,可以看到它的结构方面(通常用类图表示)和行为方面(通常用交互图表示)。像这样的协作将交叉引用系统中的个体抽象;一个给定的类可能成为多个协作的成员。
689a271373e742c39b198dc04d3a5af2.png

2)第二种方式:一个机制是给一组共同工作来完成公共而有意义的行为的抽象指定一个模板的名称。可以将这种机制建模为参数化协作,它在UML中的画法与模板类的画法相似。展开协作,可以看到它的结构方面和行为方面。

压缩协作,可以看到模式是如何将协作的模板部件和系统中存在的抽象绑定在一起而应用于系统的。将机制建模为参数化协作时,要标识一些选项,如槽、标签、按钮和刻度盘等,利用这些选项通过模板的参数来调整模式。像这样的协作可以绑定到不同的抽象集而在系统中反复出现。在这个例子中,模式的Subject 和Observer类分别与具体类CallQueue和SliderBar绑定。
 

606d9ff327364524bda9b4eeafb5a504.png

 

2、框架

框架是为一个领域中的应用系统提供可扩充模板的体系结构模式。

例如,在实时系统中一种常见的体系结构模式是循环执行模式,它将时间划分为一些帧和子帧,其间的处理要在严格的期限内发生。

框架比机制的规模大。

在UML中,把框架建模为衍型化的包。展开包,看到存在于系统体系结构的各个视图中的机制。

下图描述了一个名为CyclicExecutive的框架。此框架有一个包含一组事件类的协作(CommonEvents)和一个以循环的方式处理这些事件的机制(EventHandler)。在这个框架上进行构造的客户(如Pacemaker),可以通过建立子类而使用CommonEvents中的抽象,并且也能应用EventHandler机制的实例。
 

952e2c05a2fb4845b157fe890638b25b.png

3、常用建模技术

3.1、对设计模式建模

        从外部看,设计模式被表示成一个参数化协作。作为协作,模式提供了一组抽象,其结构和行为共同工作,以完成一些有用的功能。协作的参数命名了该模式的用户必须绑定的元素。这使得设计模式成为一个模板,通过提供与模板参数相匹配的元素来将它用于特定的语境。

        从内部看,设计模式只是一个协作,用它的结构部分和行为部分表示。通常可以用一组类图(结构方面)和一组交互图(行为方面)对这种协作的内部建模。协作的参数命名了其中一些结构元素,当设计模式被绑定到具体语境中时,就被来自该语境的抽象实例化。

下图表示命令模式“将请求封装成对象,从而可以用不同的请求(队列或日志请求)将客户参数化,并支持可以取消的操作”。

在每种情况下必须

把参数 AbstractCommand 绑定到同一个抽象超类。

在不同的绑定中,把参数 ConcreteCommand 绑定到不同的特殊类;

把参数 Receiver 绑定到该命令作用于其上的类。

类Command可以由模式创建,但是把它作为一个允许创建多个命令层次的参数。
 

e93c716273b9491dab86125a935f3ffe.png

下图表示该设计模式的类图。使用被命名为模式参数的类。

9ec6aba46fb649c694c4ecb0b870d54a.png

下图表示命令模式的顺序图

246a9c7dd538471d92fa95af878f2a99.png

3.2、对体系结构模式建模

框架实际上就是对体系结构的描述,尽管它是不完整的而且可能是参数化的。

下图给出了Blackboard(黑板)体系结构模式的规约,这个模式“解决了那些从原始数据转换为高层数据结构时没有可行的确定性的解决方案的问题”。

这个体系结构的核心是Blackboard(黑板)设计模式,它规定了KnowledgeSources(知识源)、Blackboard(黑板)和Controller(控制器)如何协作。

这个框架中还包含设计模式Reasoning engine(推理引擎),它描述了每个KnowledgeSource如何被驱动。

最后,这个框架还显示了一个用况,即Apply newknowledge sources(应用新知识源),它解释客户如何去调整框架本身。
 

a1d0ad28ec61489bbe02b119055440aa.png

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端技术(三)—— javasctipt 介绍:jQuery方法和点击事件介绍(补充)

6. 常用方法 ● addClass() 为jQuery对象添加一个或多个class <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&…

Efficient Contrastive Learning for Fast and Accurate Inference on Graphs

发表于:ICML24 推荐指数: #paper/⭐⭐⭐ 创新点一颗星,证明三颗星(证明的不错,值得借鉴,但是思路只能说还行吧) 如图, 本文采取的创新点就是MLP用原始节点,GCN用邻居节点的对比学习.这样,可以加快运算速度 L E C L − 1 ∣ V ∣ ∑ v ∈ V 1 ∣ N ( v ) ∣ ∑ u ∈ N ( v )…

汇聚荣拼多多电商的技巧有哪些?

在电商平台上&#xff0c;汇聚荣拼多多以其独特的商业模式和创新的营销策略吸引了大量消费者。那么&#xff0c;如何在这样一个竞争激烈的平台上脱颖而出&#xff0c;成为销售佼佼者呢?本文将深入探讨汇聚荣拼多多电商的成功技巧。 一、精准定位目标客户群体 首先&#xff0c;…

Android增量更新----java版

一、背景 开发过程中&#xff0c;随着apk包越来越大&#xff0c;全量更新会使得耗时&#xff0c;同时浪费流量&#xff0c;为了节省时间&#xff0c;使用增量更新解决。网上很多文章都不是很清楚&#xff0c;没有手把手教学&#xff0c;使得很多初学者&#xff0c;摸不着头脑&a…

【Threejs进阶教程-优化篇】4.Vue/React与threejs如何解决冲突和卡顿(续)

Vue/React与threejs如何解决冲突和卡顿-续 使用说明核心思路环境搭建(vuethree)vue运行机制分析业务分离使用threejs做背景 3D模块封装使用ES6的Class来让逻辑性更强Threejs尽量按需引入创建一个类扩展写法本次代码执行顺序 扩展内容添加orbitControls和辅助线解决事件覆盖 与V…

MUX VLAN实现二层流量的弹性管控

一、模拟场景&#xff0c;企业有一台服务器&#xff0c;部门A&#xff0c;部门B&#xff0c;访客 二、要求&#xff1a;三者都可以访问服务器&#xff0c;部门A和B可以进行部门内部通信&#xff0c;A和B不可以通信&#xff0c;访客只能访问服务器 三、拓扑如下图 四、配置流程…

UE5 05-利用 timeline 插值运动

理解成 unity Dotween DoMove 插值运动即可 AddTimeLine 节点 物体插值运动 物体插值缩放 一个timeline 可以K多个动画帧

【js基础巩固】深入理解作用域与作用域链

作用域链 先看一段代码&#xff0c;下面代码输出的结果是什么&#xff1f; function bar() {console.log(myName) } function foo() {var myName "极客邦"bar() } var myName "极客时间" foo()当执行到 console.log(myName) 这句代码的时候&#xff0c…

25_嵌入式系统总线接口

目录 串行接口基本原理 串行通信 串行数据传送模式 串行通信方式 RS-232串行接口 RS-422串行接口 RS-485串行接口 RS串行总线总结 RapidIO高速串行总线 ARINC429总线 并行接口基本原理 并行通信 IEEE488总线 SCSI总线 MXI总线 PCI接口基本原理 PCI总线原理 PC…

Qt | QPen 类(画笔)

01、画笔基础 1、需要使用到的 QPainter 类中的函数原型如下: void setPen(const QPen &pen); //设置画笔,void setPen(const QColor &color); //设置画笔,该笔样式为 Qt::SolidLine、宽度为 1,颜色由 color 指定void setPen(Qt::PenStyle style); //设置画笔,该…

【问题解决】 pyocd 报错 No USB backend found 的解决方法

pyocd 报错 No USB backend found 的解决方法 本文记录了我在Windows 10系统上遇到的pyocd命令执行报错——No USB backend found 的分析过程和解决方法。遇到类似问题的朋友可以直接参考最后的解决方法&#xff0c;向了解问题发送原因的可以查看原因分析部分。 文章目录 pyoc…

90元搭建渗透/攻防利器盒子!【硬件篇】

前言 以下内容请自行思考后进行实践。 使用场景 在某些情况下开软件进行IP代理很麻烦&#xff0c;并不能实现真正全局&#xff0c;而且还老容易忘记&#xff0c;那么为了在实景工作中&#xff0c;防止蓝队猴子封IP&#xff0c;此文正现。 正文 先说一下实验效果&#xff1…

Java 应用启动时出现编译错误进程会退出吗?

背景 开发的尽头是啥呢&#xff1f;超超级熟练工&#xff01; 总结最近遇到的一些简单问题&#xff1a; Java 应用的某个线程&#xff0c;如果运行时依赖的 jar 不满足&#xff0c;线程是否会退出&#xff1f;进程是否会退出&#xff1f;Netty 实现 TCP 功能时&#xff0c;换…

STL复习-序列式容器和容器适配器部分

STL复习 1. 常见的容器 如何介绍这些容器&#xff0c;分别从常见接口&#xff0c;迭代器类型&#xff0c;底层实现 序列式容器 string string严格来说不属于stl&#xff0c;它是属于C标准库 **底层实现&#xff1a;**string本质是char类型的顺序表&#xff0c;因为不同编译…

CC2530寄存器编程学习笔记_点灯

下面是我的CC2530的学习笔记之点灯部分。 第一步&#xff1a;分析原理图 找到需要对应操作的硬件 图 1 通过这个图1我们可以找到LED1和LED2连接的引脚&#xff0c;分别是P1_0和P1_1。 第二步 分析原理图 图 2 通过图2 确认P1_0和P1_1引脚连接到LED&#xff0c;并且这些引…

项目/代码规范与Apifox介绍使用

目录 目录 一、项目规范&#xff1a; &#xff08;一&#xff09;项目结构&#xff1a; &#xff08;二&#xff09;传送的数据对象体 二、代码规范&#xff1a; &#xff08;一&#xff09;数据库命名规范&#xff1a; &#xff08;二&#xff09;注释规范&#xff1a; …

【0基础学爬虫】爬虫框架之 feapder 的使用

前言 大数据时代&#xff0c;各行各业对数据采集的需求日益增多&#xff0c;网络爬虫的运用也更为广泛&#xff0c;越来越多的人开始学习网络爬虫这项技术&#xff0c;K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章&#xff0c;为实现从易到难全方位覆盖&#xff0c;特设【0…

mac|Mysql WorkBench 或终端 导入 .sql文件

选择Open SQL Script导入文件 在第一行加入use 你的schema名字&#xff0c;相当于选择了这个schema 点击运行即可将sql文件导入database 看到下面成功了即可 这时候可以看看左侧的目标database中有没有成功导入table&#xff0c;如果没有看到的话&#xff0c;可以点一下右上角的…

Bert入门-使用BERT(transformers库)对推特灾难文本二分类

Kaggle入门竞赛-对推特灾难文本二分类 这个是二月份学习的&#xff0c;最近整理资料所以上传到博客备份一下 数据在这里&#xff1a;https://www.kaggle.com/competitions/nlp-getting-started/data github&#xff08;jupyter notebook&#xff09;&#xff1a;https://gith…

【JavaEE】多线程进阶

&#x1f921;&#x1f921;&#x1f921;个人主页&#x1f921;&#x1f921;&#x1f921; &#x1f921;&#x1f921;&#x1f921;JavaEE专栏&#x1f921;&#x1f921;&#x1f921; 文章目录 1.锁策略1.1悲观锁和乐观锁1.2重量级锁和轻量级锁1.3自旋锁和挂起等待锁1.4可…