【软考系统架构设计师】第二章 软件架构风格(知识点必知必会)

本文详细介绍了软件架构风格的概念,包括官方定义、专有名词和其他特征。重点讨论了数据流风格(批处理序列和管道过滤器)、调用返回风格(主程序子程序和面向对象风格)、虚拟机风格(解释器和基于规则的风格)以及独立构件风格(事件驱动和进程通信)。此外,还探讨了仓库风格、闭环控制架构、C2风格等,为系统架构设计师提供了全面的知识指南。

【软考系统架构设计师】第二章 软件架构风格(知识点必知必会)

第二章 软件架构风格(知识点必知必会)

一. 软件架构风格概念

1)什么是软件架构风格
01. 官方定义
  1. 软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式
  2. 架构风格定义了一类架构所共有的特征,主要包括架构定义架构词汇表架构约束
  3. 并指导如何将各个模块和子系统有效地组织成一个完整的系统。
02. 专有名词
  1. 组织方式:描述了系统的组成构件和这些构件的组织方式。
  2. 惯用模式:反映众多系统共有的结构和语义
  3. 词汇表:包含一些构件和连接件类型;
  4. 约束:指出系统是如何将这些构件和连接件组合起来;
03. 其他特征
  1. 架构风格强调对架构设计的重用。
  2. 架构风格定义了用于描述系统的术语表和一组指导构件系统的规则。
  3. 架构风格的使用几乎完全是特定的。
  4. 架构风格反映了领域中众多系统所共有的结构和语义特征,并指导如何将各个模块和子系统有效地组织成一个完整的系统。
2)软件架构风格的作用
  1. 对软件架构风格的研究和实践促进了对设计的重用,一些经过实践证明的解决方案也可以可靠地用于解决新的问题。
  2. 软件架构风格为大粒度的软件重用提供了可能。
  3. 软件系统架构风格的共有部分可以使得不同系统共享同一个实现代码,系统能够按照常用的、规范化的方式来组织,便于不同设计者很容易地理解系统架构。
3)通用的架构风格分类
  1. 数据流风格:管道过滤器,批处理风格;
  2. 调用返回风格:主程序子程序;层次调用风格,面向对象风格;
  3. 虚拟机风格:基于规则的系统,解释器风格;
  4. 独立构件风格:进程通信,事件系统(隐式调用风格)
  5. 仓库风格:数据库系统,黑板系统,超文本系统

二. 数据流风格

1)批处理序列风格
  • 关键字:传递的数据必须完整,前一步结束下一步开始。它更加强调整体
01. 特点
  1. 每一步都是独立的,都是按照顺序执行的,只有当前的一步处理完,后一步处理才能开始
  2. 数据传送在步与步之间作为一个整体,数据必须是完整的,以整体的方式进行传递
02. 典型应用
  • BAT程序,经典数据处理,程序开发
03. 应用场景
  1. 传统的编译器设计中,上述处理过程都以独立功能模块的形式存在,程序源代码作为一个整体,依次在不同模块中进行传递,最终完成编译过程。
04. 优点优势
  1. 使得软件构件有良好的隐蔽性和高内聚,低耦合的特点
  2. 支持软件重用,只要提供合适在两个过滤器之间传送的数据,任何两个过滤器都可以被连接起来。
  3. 系统维护和增强系统性能简单。新的过滤器可以添加到现有的系统中来,旧的过滤器可以被改进后的过滤器替换掉。
  4. 允许对一些如吞肚量,死锁等属性的分析。
  5. 支持并行执行,每个过滤器是作为一个单独的任务完成,因此可与其他任务并行,但是这样的系统存在着若干不利因素。
2)管道过滤器风格
  • 关键字:每个构件都有一组输入输出,递增的转化数据
01. 定义
  1. 每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出的数据流。
  2. 这个过程通常通过对输入流变换及增量计算来完成。
  3. 在输入被完全消费之前,输出便产生了。
  4. 这里的构件被称为过滤器,这种风格的连接件就像是数据流传输的管道。
02. 特点
  1. 此风格特别重要的是过滤器必须是独立的实体,它不能与其他过滤器共享数据,而且一个过滤器不知道它上游和下游的标识。
  2. 一个管道过滤器网络输出的正确性并不依赖于过滤器进行增量计算过程的顺序。
03. 适用场景
  1. 适合分阶段数据处理的场景使用。
  2. 早期的编译器釆用管道-过滤器架构风格,并且大多数编译器在词法分析时创造独立的符号表,在其后的阶段会不断修改符号表,因此符号表并不是程序数据的一部分。
04. ★与仓库风格比对
  1. 它的数据结构是流式数据(数据流),是数据驱动的
  2. 通过接口适配来实现功能扩展。
  3. 与数据仓库对比其优势在于支持并发调用,性能提高
  4. 劣势在于需数据格式转换
  5. 交互性不如仓库风格
05. ★与主程序子程序比对
  1. 它的特点有数据和处理是紧耦合的,通过接口适配的方式才可以扩展。
  2. 在性能上不如主程序子程序(直接显示调用),但在算法功能变更方面优于主程序子程序。
  3. 通过引入过滤器的数据并发处理可以有效提高系统性能。
3)批处理序列和管道过滤器风格的区别与联系
01. 共同点
  • 把任务分成一系列固定顺序单元(组件),组件间只通过数据传递交互。
02. 区别
  1. 批处理是全部的,高潜伏性的,输入时可随机存取,无合作性无交互性。
  2. 管道过滤器是递增的,数据结果延迟小,输入时处理局部化,有反馈,有交互。
  3. 批处理强调步与步之间传递数据是作为一个整体的,而管道过滤器无此要求。

三. 调用返回风格

1)主程序子程序风格
  • 关键字:单线程控制,若干步骤,过程调用是连接件。
01. 定义
  1. 它是结构化开发时期的软件架构风格,一般采用单线程控制,把问题划分为若干处理步骤,构件即为主程序和子程序。
  2. 各个子程序通常可以合成为模块。过程调用即充当连接件。
  3. 调用关系具有层次性,其语义逻辑表示为子程序的正确性。取决于它调用的子程序的正确性。
  4. 所有的计算构件作为子程序协作工作,并由一个主程序顺序地调用这些子程序
  5. 构件通过共享存储区交换数据
02. ★与管道过滤器风格比对
  1. 该风格在性能上优于管道过滤器,因为是显式调用
  2. 但在算法变更,功能变更方面不及管道过滤器
2)面向对象风格
  • 关键字:对象是构件,对象之间的交互关系是连接件。
01. 定义
  1. 这种架构风格建立在数据抽象和面向对象的基础上。数据的表示方法和它们相应的操作封装在一个抽象数据类型或对象中。
  2. 在这种风格当中构件是对象,对象是一种被称为管理者的构件。
  3. 对象是通过过程和函数调用来交互的。
02. 优势优点

1)可以改变一个对象的表示,而不影响其他的对象。
2)设计者将一些数据的存储操作的问题分解成一些交互的代理程序集合。

03. 劣势缺点

1)为了使一个对象和另一个对象通过过程调用进行交互,必须要知道对象的标识。只要一个对象的标识改变了,就必须修改所有其他明确调用它的对象。
2)必须修改所有显示调用它的其他对象,并消除由此带来的一些副作用。如果对象A使用了对象B,对象C也使用了对象B,那么C对B的使用对A所造成的影响可能是意料不到的。

04. 提高性能
  1. 可以通过减少功能调用层次提高系统性能。
  2. 引入对象管理层不但不能提高性能,反而会降低系统性能,这个道理与分层模型中增加层次是一样的
05. 特征
  1. 面向对象架构风格的特征是将数据表示和基本操作封装在对象中。
  2. 这种模式的构件是对象,对象维护自身表示的完整性,对象之间通过消息机制进行通信
  3. 对象交互时需要知道彼此的标识,通过对象之间的协作完成计算过程;
06. ★与基于规则的风格相比
  1. 灵活性较差,它需要将规则信息封装成对象,在启动系统的时候加载
  2. 可扩展性也较差,修改规则之后需要增加对象,并重新启动后方可生效
  3. 但在性能方面还是有一定的优势,可直接运行,性能较好。
3)层次架构风格
  • 分层结构的特点是通过引入抽象层,在较低层次不确定的实现细节在较高层次会变得确定,并能够组织层间构件的协作,系统结构更加清晰
  • 关键字:只影响上下两个层次,下层服务上层,上层必须知道下层,隐藏复杂度
01. 定义
  1. 每一层都为上一层提供服务,并作为下层客户,内部的层只对相邻的层可见。
  2. 一般每一层提供一个抽象的功能。
  3. 构件在一些层实现了虚拟机,连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层之间约束的交互。
  4. 它允许将一个复杂的问题分解成一个增量步骤序列的实现。
  5. 由于每一层最多只能够影响其上下的两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。
  6. 不管是分层架构风格还是主程序子程序风格,它们都有一种分而治之的策略思想在里面。
  7. 将一个复杂的大系统分解成为一些子系统,以便降低负载度,提高可修改性。
02. 优势优点
  1. 支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解
  2. 支持功能增强,因为每一层至多和相邻的上下层进行交互,因此功能的改变最多影响相邻的上下层。
  3. 支持重用
    只要提供的服务接口定义不变,同一层的不同实现可以交换使用。
03. 劣势缺点
  1. 很难找到一个合适的正确的抽象方式
  2. 并不是每个系统都可以合适的划分为层次架构模式。

四. 独立构件风格

1)事件驱动风格(隐式调用)
  • 关键字:广播一个或多个事件。优点是构件维护演化方便,缺点放弃了对系统计算的控制。
01. 定义
  1. 构件不直接调用一个过程,而是触发或广播一个或多个事件。
  2. 当一个事件被触发,系统自动调用在这个事件中注册的所有过程。
  3. 这样一个事件的触发就导致了另一模块中的过程的调用。
02. 特点
  1. 事件的触发者并不知道哪些构件会被这个事件的影响。
  2. 这样也说明不能假定构件的处理顺序,甚至都不知道哪些过程会被调用。
  3. 将固定的动作以映射表的形式定义出来。
  4. 能够提高系统的灵活性,但会降低系统的性能。
03. 优势优点
  1. 为软件重用提供了强大的支持
  2. 为改进系统带来了方便
04. 劣势缺陷
  1. 构件放弃了对系统计算的控制
    不能确定其他构件一定会响应构件发出的消息。
  2. 数据交换的问题
    依靠一个共享的仓库进行交互,在这样的情况下,全局性能和资源管理便成了问题。
  3. 过程的语义必须依赖于被触发事件的上下文约束。关于正确性的推理存在问题。
05. 适用场景
  1. 机器人接受任务后,需要根据自身状态和外界环境进行动态调整,最终自动完成任务。
  2. 用户会注册自己的兴趣,然后系统也会把新闻按兴趣分类,如果某个新闻事件发生,可以通过事件来触发推送动作,将新闻推送给对其感兴趣的用户。
  3. 当程序执行到断点位置时,会触发并调用该事件监听函数,监听函数负责进行自动卷屏、刷新变量数值等动作。
  4. IDE强调交互式编程,用户在修改程序代码后,会同时触发语法高亮显示、语法错误提示、程序结构更新等多种功能的调用与结果呈现,这一需求的核心在于根据事件进行动作响应,采用隐式调用的架构风格最为合适。
  5. Windows操作系统在图形用户界面处理方式。
06. 性能改进
  • 可以通过处理函数的并发调用提高系统处理性能。
2)进程通信风格
  • 关键字:消息传递是连接件,独立的进程是构件。
01. 定义
  1. 进程通信架构风格属于独立构件风格的一种,它强调每个构件都是相对独立的个体,它们之间不直接进行通信。
  2. 进程通信架构中构件是独立的过程,连接件是消息传递。
  3. 构件通常是命名过程,消息传递的方式是点对点,异步或者同步方式,以及远程过程调用。
02. 特点
  1. 构件通常是命名过程
  2. 消息传递的方式可以是点对点、异步和同步方式、以及远过程调用等

五. 虚拟机风格

1)解释器风格
  • 关键字:包括解释引擎,存储区,数据结构。特点仿真硬件执行,但执行效率低
01. 定义
  1. 具有解释器风格的软件具有一个虚拟机,可以仿真硬件的执行过程和一些关键应用。
  2. 对于采用解释器架构风格的系统,可以通过部分解释代码预先编译的方式提高系统性能
  3. 特别强调用户定义系统中对象的关系和行为这一特性。
02. 解释引擎包含内容
  1. 一个包含将被解释的代码的存储区
  2. 一个记录解释引擎当前工作状态的数据结构
  3. 一个源代码被解释执行进度的数据结构。
03. 优势优点
  • 增加了架构的灵活性,可以解析与运行一些自定义的语言
04. 劣势缺陷
  • 解释器风格的缺点是执行效率较低。
05. 适用场景
  1. Java语言宣传的“一次编写,到处运行”
  2. 模拟新操作系统的运行模式通常会采用虚拟机架构风格。
  3. 系统特别强调用户定义系统中对象的关系和行为这一特性,这需要在软件架构层面提供一种运行时的系统行为定义与改变的能力。
  4. 将现有的业务功能进行Web服务的多种组合,形成新的业务功能。其实是通过某种语言对业务流程进行描述。
  5. 解释器可针对不同的硬件平台实现一个虚拟机,将高抽象层次的程序翻译为低抽象层次所能理解的指令,以消除在程序语言与硬件之间存在的语义差异。
06. 架构风格的运用
  1. 解释器已经被广泛应用在从系统软件到应用软件的各个层面,包括各类语言环境、Internet浏览器、数据分析与转换等
  2. LISP,Prolog、JavaScript、VBScript、HTML、Matlab、数据库系统(SQL解释器)、各种通信协议等。
2)基于规则为中心的架构风格
01. 包括内容
  • 规则集,规则解释器,规则/数据选择器,工作内存组成。
02. 适用场景
  1. 规则系统比较适合根据外部事件,以自身状态为基础自动进行处理和动作的场景。
  2. 机器人的控制者首先定义清洁任务和任务之间的关系,机器人接受任务后,需要响应外界环境中触发的一些突发事件,根据自身状态进行动态调整,最终自动完成任务。
  3. 它是一个使用模式匹配搜索来寻找规则并在正确的时候应用正确的逻辑知识的虚拟机,其支持把频繁变化的业务逻辑抽取出来,形成独立的规则库。
03. ★与面向对象风格比对
  1. 在灵活性方面,优于面向对象风格,将用户规则等描述为可以动态改变的规则数据;
  2. 在可扩展性方面,优于面向对象风格,加入新的用户规则时只需要定义新的规则,解释规则即可进行扩展;
  3. 在性能方面较差,不如面向对象风格,因为需要对用户规则进行实时解释。

六. 仓库风格

0)共通
01. 两种组成构件
  1. 中央数据结构说明当前的状态
  2. 独立构件在中央数据存储之上进行
02. 适用场景
  1. 集成开发环境(IDE)需要面对不同的数据结构,不同的数据类型与形态,在这种以数据为核心的系统中,采用数据共享机制显然是最为合适的。
  2. 现代的编译器采用以数据共享为中心的架构风格,主要关心编译过程中程序的中间表示。
  3. 现代的编译器采用以数据共享为中心的架构风格,分析树是在语法分析阶段结束后才产生作为语义分析的输入,分析树是数据中心中重要的共享数据,为后续的语义分析提供了帮助。
03. 特点
  1. 数据仓库风格的交互方式为星型(工具之间通过中心结点进行交互)
  2. 它是文件或模型的数据结构,在控制上以业务功能为驱动
  3. 扩展方法是进行模型适配。
04. 与管道过滤器比对
  1. 模型驱动,处理流程事先不确定,交互性强;
  2. 数据与处理解耦合,可动态添加或删除组件
  3. 知识源之间不直接通讯,他们之间的交互只能通过黑板完成,性能较低;
  4. 更容易处理任务之间的协作,系统更加灵活,性能好
1)黑板系统
  • 这三种架构风格中,最复杂的是黑板系统。
  • 关键字:解决问题但没有确定性算法,基于先验知识的条件判断。
01. 组成部分
  • 组成黑板系统的三个部分分别是:黑板数据结构,知识源和控制。
1)知识源
  • 独立的,与应用系统相关的知识,知识源直接不直接进行通信,它们之间的交互只是通过黑板来完成。
2)黑板数据结构
  • 解决问题的数据
  • 知识源通过不断的改变黑板数据来解决问题。
3)控制
  • 完全由黑板的状态启动,黑板状态的改变决定使用的特定知识
02. 适用场景
  1. 黑板系统适合于复杂的非结构化的问题,能在求解过程中综合运用多种不同的知识源,使得问题的表达组织和求解变得非常容易。
  2. 语音识别系统是一个十分典型的专家系统,其特点是求解的正确结果不止一个,求解过程比较复杂,需要通过专家知识和反馈逐步得到正确结果。
  3. 因为语音识别具有不确定性,需要人工智能技术的支持和专家意见的汇总和决策, 并且需要支持识别过程中的推理和决策。
  4. 对于语音识别、知识推理等问题复杂、解空间很大、求解过程不确定的这一类软件系统,通常会采用黑板架构风格,以知识为中心进行分析与推理。
  5. 每个过程都需要进行基于先验知识的条件判断并进行相应的识别动作。
2)数据库系统
  • 数据库是仓库风格中最为常见的应用。
  • 关键字:由中央共享数据源和独立处理元素构成。
3)超文本系统
  • 典型代表就是早期的静态网页

七. 闭环控制架构

1)定义
  1. 软件和硬件可以粗略地表示为一个反馈循环,这些反馈循环通过接受一定的输入,确定一系列的输出,最终使环境达到一个新的状态。适合于嵌入式系统,涉及连续的动作与状态。
  2. 控制环路架构风格是将过程输出的指定属性维护在一个特定的参考值(设定点)
  3. 控制环路风格包括过程变量、被控变量、输入变量、操纵变量和设定点等构件,通过收集实际和理想的过程状态信息,并能调整过程变量使得实际状态趋于理想状态。
2)特点
  1. 通常由几个协作构件共同构成,且其中的主要构件彼此分开,能够进行替换与重用,但闭环结构通常适用于处理简单任务(如机器装配等),并不适用于复杂任务
3)适用场景
  1. 调温器需要实时获取外界的温度信息,与用户定义的温度进行比较并做出动作。它是闭环控制风格的一个很好的应用。
  2. 轿车巡航定速系统是一个十分典型的控制系统,其特点是不断采集系统当前状态,与系统中的设定状态进行对比,并通过将当前状态与设定状态进行对比从而进行控制。

八. C2风格

1)C2体系结构组成

通过连接件绑定在一起的按照一组规则运作的并行构件网络。

2)系统组织规则
  1. 系统中的构件和连接件都有一个顶部和一个底部;
  2. 构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;
  3. 一个连接件可以和任意数目的其他构件和连接件连接;
  4. 当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值