软考笔记--软件架构风格

软件体系结构设计的一个核心目标是重复的体系结构模式,即达到体系结构级的软件重用。也就是说,在不同的软件系统中,使用统一体系结构。基于这个目标,主要任务就是研究和实践体系结构风格和类型问题。

一.软件架构风格概述

软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义了一个系统家族,即一个体系结构定义一个词汇表和一组约束。体系结构风格反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效组织成一个完整的系统。对软件体系结构风格的研究和实践促进对设计的重用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。

二.数据流体系结构风格

数据流体系结构是一种计算机体系结构,数据流体系结构没有概念上的程序计数器,指令的可执行和执行仅指令输入参数的可用性来确定,因此,指令执行的顺序是不可预测的,行为不确定的。数据流体系结构风格主要包括批处理风格和管道过滤器风格。

1.批处理体系结构风格

在批处理风格的软件体系结构中,每个处理步骤是一个单独的程序,每一步必须在前一步结束后才能开始,并且数据必须是完整的,以整体的方式传递。它的基本构件是独立的应用程序,连接件是某种类型的媒介。连接件定义了相应的数据流图,表达拓扑结构。

2.管道-过滤体系结构风格

当数据源源不断地产生,系统就需要对这些数据进行若干处理。现有的解决方案是把系统分解为几个处理步骤,这些步骤之间通过数据流连接,一个步骤的输出是另一个步骤的输入,每一个处理步骤由一个过滤器实现,处理步骤之间的数据传输由管道负责。每个处理步骤(过滤器)都有一组输入和输出,过滤器从管道中读取输入的数据流,经过内部处理,然后产生输出数据流并写入管道中。

三.调用/返回体系结构风格

调用/返回体系结构风格是指在系统中采用了调用与返回机制。利用调用返回实际上是一种分而治之的策略,其主要思想是将一个复杂的大系统分解为若干个子系统,以便降低复杂度,并且增加可修改性。调用/返回体系结构风格主要包括主程序/子程序风格,面向对象风格,层次型风格以及客户端/服务器风格。

1.主程序/子程序风格

主程序/子程序风格一般采用单线程控制,把问题划分为若干个处理步骤,构件即为主程序和子程序、子程序通常可合成为模块。过程调用作为交互机制,即充当连接件。

2.面向对象系统结构风格

抽象数据类型概念对软件系统有着重要作用,这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的响应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者是抽象数据类型的实例。

3.层次型体系结构风格

层次系统组成一个层次结构,每一层为上层提供服务,并作为下层的客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。

4.客户端/服务端体系结构风格

两层 C/S 体系结构有3个主要组成部分:数据库服务器、客户应用程序和网络。服务器(后台)负责数据管理,客户机(前台)完成与用户的交互任务,称为“胖客户机,瘦服务器”。

三层C/S结构增加了一个应用服务器。整个应用逻辑驻留在应用服务器上,只有表示层存在于客户机上,故称为“瘦客户机”。应用功能分为表示层、功能层和数据层三层。表示层是应用的用户接口部分,通常使用图形用户界面;功能层是应用的主体,实现具体的业务处理逻辑;数据层是数据库管理系统。以上三层逻辑上独立。

四.以数据为中心的体系结构风格

以数据为中心的体系结构风格主要包括仓库体系结构风格和黑板体系结构风格。

1.仓库体系结构风格

仓库是存储和维护数据的中心场所。在仓库风格中,有两种不同的构件:中央数据结构说明当前数据的状态以及一组对中央数据结构进行操作的独立构件,仓库与独立构件间的相互作用在系统中会有大的变化。这种风格的连接件即为仓库与独立构件之间的交互。

2.黑板体系结构风格

黑板体系结构风格适用于解决复杂的非结构化的问题,能子求解过程中综合运用多种不同知识源使得问题的表达,组织和求解变得比较容易。黑板系统是一种问题求解模型,是组织推理步骤、控制状态数据集和问题求解领域知识的概念框架。它将问题的解空间组织成一个或多个应用的分级结构,分级结构的每一层信息有一个唯一的词汇来描述,它代码了问题的部分解。

五.虚拟机体系结构风格

虚拟机体系结构风格的基本思想是人为构造一个运行环境,在这个环境之上,可以解析与运行自定义的一些语言,这样来增加结构的灵活性。虚拟机体系结构风格主要包括解释器风格和规则系统风格。

1.解释器体系结构风格

一个解释器通常包括完成解释工作的解释引擎,一个包含将被解释的代码的存储区,一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行进度的数据结构。解释器通常被用来建立一种虚拟机以弥合程序语义与硬件语义之间的差异。其缺点是执行效率较低。典型的例子是专家系统。

2.规则系统体系结构风格

基于规则的系统包括规则集、规则解释器、规则/数据选择器及工作内存。

六.独立构件体系结构风格

独立构件风格主要强调系统中的每个构件都是相对独立的个体,它们之间不直接通信,以降低耦合度,提升灵活性。独立构件风格主要包括进程通信和事件系统风格。

1.进程通信体系结构风格

在进程通信体系结构风格中,构件是独立的过程,连接件是消息传递。这种风格的特点是构件通常是命名过程,消息传递的方式可以是点到点、异步或同步方式及远程调用等。

2.事件系统体系结构风格

事件系统体系结构风格基于事件的隐式调用风格的思想是构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其他构件中的过程在一个或多个事件中注册,当一个事件触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一个模块中的过程调用。从架构上说,这种风格的构件是一些模块,这些模块既可以是一些过程,又可以是一些事件的集合。过程可以用通用的方式调用,也可以在系统事件中注册一些过程,当发生这些事件时,过程被调用。

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

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

相关文章

centos7 部署kibana

先决条件参考 虚拟机部署elasticsearch集群-CSDN博客 这里使用elk101服务器安装kibana 下载rpm包(这里添加了-c参数用到wget的断点续传功能) #下载kibana-rpm包以及校验文件 wget -c https://artifacts.elastic.co/downloads/kibana/kibana-7.17.18-x86_64.rpm wget -c htt…

continue、break 和 return 的区别是什么?

continue、break和return同样是用于控制程序流程的关键字,它们有不同的作用和用法。 continue: 在Java中,continue语句同样通常用于循环结构(如for循环、while循环)。当程序执行到continue时,会立刻跳过当前循环中剩…

02_Git

文章目录 GitGit的核心流程Git的命令clone指令status指令add指令commit指令push指令pull指令log指令 Git中处理冲突协同合作Git中回退的措施忽略文件 Git git的特点: 分布式 比如说:同事A、同事B、同事C都能对远程仓库进行操作,就是分布式 …

微服务分布式中为什么要分库分表呢?

什么是分库分表? 概念: 分库分表是一种数据库水平扩展的方法,通过将数据分散存储在多个数据库实例或多张表中,以提高系统的性能和扩展性。在Java应用中,可以使用一些数据库中间件或框架来实现分库分表。 为什么要分…

Oracle常用语句语法

1 第一章Oracle命令 转载至 Oracle常用语句语法汇总 https://www.modb.pro/db/1759752946170548224 a) 系统管理员连接 conn */* as sysdba b) 查询当前用户 show user c) 创建新用户 create user 用户名 identified by 密码(密码不能以数字开头)。例如…

pytorch什么是梯度

目录 1.导数、偏微分、梯度1.1 导数1.2 偏微分1.3 梯度 2. 通过梯度求极小值3. learning rate 1.导数、偏微分、梯度 1.1 导数 对于yx 2 2 2 的导数,描述了y随x值变化的一个变化趋势,导数是个标量反应的是变化的程度,标量的长度反应变化率的…

【嵌入式——QT】QTableWidget

表格小部件为应用程序提供标准的表格显示功能。QTableWidget中的项由QTableWidgetItem提供。 如果你想要一个使用你自己的数据模型的表,你应该使用QTableView而不是这个类。 常用函数 cellWidget(int row, int column) const:返回显示在给定行和列的单…

python中怎样把*.ts文件拼接为一个视频文件?

要将*.ts文件拼接成一个视频文件,可以使用ffmpeg这个强大的多媒体处理工具。ffmepg可以在命令行中执行,或者通过Python的subprocess模块调用。 以下是通过Python的subprocess模块调用ffmpeg进行拼接的示例代码: import subprocessdef conca…

【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗?

【Flutter 面试题】main()和runApp()函数在Flutter的作用分别是什么?有什么关系吗? 文章目录 写在前面解答补充说明 写在前面 关于我 ,小雨青年 👉 CSDN博客专家,GitChat专栏作者,阿里云社区专家博主&…

论文研读_多目标部署优化:无人机在能源高效无线覆盖中的应用(ImMOGWO)精简版

此篇文章为Multi-objective Deployment Optimization of UAVs for Energy-Efficient Wireless Coverage的论文学习笔记,只供学习使用,不作商业用途,侵权删除。并且本人学术功底有限如果有思路不正确的地方欢迎批评指正! 创新点 RD算法 混合…

第十三届蓝桥杯嵌入式省赛程序设计详细题解

第十三届蓝桥杯嵌入式省赛题目相对于第十二届较为简单,没有那么多串口的数据处理以及判断! 第十三届省赛主要是制作一个可由串口设置密码的密码锁。本实验中,我们将用到LED模块、按键模块、串口模块、定时器的PWM模块以及官方会提供源码的LC…

【HTML】HTML基础7.3(自定义列表)

目录 标签 效果 代码 注意 标签 <dl> <dt>自定义标题</dt><dd>内容1</dd><dd>内容2</dd><dd>内容3</dd> 。。。。。。 </dl> 效果 代码 <dl><dt>蜘蛛侠系列</dt><dd>蜘蛛侠1</dd…

LSTM实战:基于PyTorch的新冠疫情确诊人数预测

目录 引言 一、探索数据集 1、导入相关库文件 2、导入每日确诊人数数据集 3、清洗每日确诊人数数据集 4、每日累计确诊的人数及其数据集可视化 5、每日撤消累计后的确诊人数及其数据集可视化 6、查看总共有多少数据量 二、数据预处理 1、训练和测试数据集 2、数据放…

STM32用标准库做定时器定时1秒更新OLED的计数值(Proteus仿真)

首先新建proteus工程&#xff0c;绘制电路图&#xff1a; 然后赋值我之前文章中提到的文件夹OLED屏幕显示&#xff1a;&#xff08;没有的自己去那篇文章下载去&#xff09; 然后进入文件夹&#xff1a; 新建两个文件在Mycode文件夹中&#xff1a; 文件关系如下&#xff1a; 新…

React Native 中给第三方库打补丁

有时使用了某个第三方库&#xff0c;可是它有些问题&#xff0c;我们不得不修改它的源码。 我们可能不方便给原作者提 Pull Request&#xff0c;因为他们可能不愿意接受我们的更改。又或者原作者无法及时发布新版本。 种种原因&#xff0c;我们只有去修改 node_modules 目录下…

CogCaliperTool卡尺工具

CogCaliperTool(卡尺工具) CogCaliperTool&#xff08;卡尺工具&#xff09;是一种用于测量直线特征的工具。该工具通常用于检测图像中的边缘、轮廓或其他直线特征&#xff0c;并提供精确的测量数据&#xff0c;如长度、角度和位置信息。 比如说我们需要测量下图工具的边缘对…

自研cloud框架专题–mybatis-puls模块(一)

文章目录 项目特点一:框架集成1.引入核心依赖2.使用Mybatis-plus-join能力 二:使用示例三:typeHandler1.加密2.","连接格式3.json4.默认值忽略 开源地址: https://github.com/2892824942/ty-cloud/blob/main/ty-framework/ty-framework-mybatis-plus 项目特点 自动集…

【深度学习笔记】计算机视觉——FCN(全卷积网络

全卷积网络 sec_fcn 如 :numref:sec_semantic_segmentation中所介绍的那样&#xff0c;语义分割是对图像中的每个像素分类。 全卷积网络&#xff08;fully convolutional network&#xff0c;FCN&#xff09;采用卷积神经网络实现了从图像像素到像素类别的变换 :cite:Long.Sh…

校招中的“熟悉linux操作系统”一般是指达到什么程度?

校招中的“熟悉linux操作系统”一般是指达到什么程度&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&am…

归并排序总结

1.归并排序 归并排序的步骤如下&#xff1a; ①枚举中点&#xff0c;将区间分为左右两段&#xff1b; ②对左右两段区间分别排序&#xff1b; 这个过程以递归的方式进行。 ③合并两段区间。 是一个模拟的过程。用两个指针分别指向左右区间&#xff0c;判断当前哪个数小&…