admin 管理员组

文章数量: 887055


2024年1月16日发(作者:spark机器学习)

一:

一个设计良好的通用模式往往是这个工程领域技术成熟的标志。

1、管道过滤模式

1)概述:每个功能模块都有一组输入和输出;功能模块对输入数据流进行增量计算得到输出数据流。

功能模块称作过滤器filter;

功能模块间的连接可看作输入、输出数据流之间的通路,称作管道。

2)特征:过滤器的相对独立性,即过滤器独立完成自身功能,相互之间无需进行状态交互。整个管道过滤网络的最终输出和网络中各过滤器执行操作的顺序无关。

3)优点:

(1)设计者可以将整个系统的输入、输出特性简单的理解为各个过滤器功能的合成;

(2)管道过滤模式支持功能模块的复用;

(3)管道过滤模式的系统具有较强的可维护性和可扩展性;

(4)支持一些特定的分析,如吞吐量计算和死锁检测等;

(5)管道过滤模式具有并发性。

4)不足:

(1)管道过滤模式往往导致系统处理过程的成批操作;

(2)设计者也许不得不花费精力协调两个相对独立但又存在某种关系的数据流;

(3)根据实际设计的要求,设计者也需要对数据传输进行特定的处理,导致过滤器必须对输入、输出管道中的数据流进行解析或反解析,增加了过滤器具体实现的复杂性。

5)管道过滤模式的实例:数字通信系统

2、面向对象模式

1)概述:面向对象模式集数据抽象、类继承为一体,使软件工程公认的模块化、信息隐藏、抽象、重用性等原则在面向对象模式下得以充分体现。

追求问题空间和软件系统空间的一致性。

基于面向对象模式构建系统,首先要确定求解问题中有哪些对象,构造适当的类以反映各种不同的对象,通过对象间传递消息和类的继承机制,协同完成对问题的求解。

2)优点:

(1)高度模块性;

(2)封装功能;

(3)代码共享;

(4)灵活性;

(5)易维护性;

(6)可扩充性。

3)不足:在于如果一个对象需要调用另一个对象,它就必须知道那个对象的标识(对象名或其它标识符),这样就无形之中增强了对象之间的依赖关系。

4)实例

ODS开放式分布系统 Open Distributed System

构件:是一个封装了设计和实现的功能单元,它向外界提供接口,多个构件接口互连可以形成一个完整的系统。

构件的优点在于针对接口设计、提供标准的技术服务框架、实现语言和构件位置透明以及基于属性和事件的良好复合性。

CBA方法(Component-Based Analysis)中3个基本的建模概念:

(1)协作(Collaboration):根据构件所承担的不同角色,协作定义了一组构件之间的动

作:ction集合。

(2)类型(Type):通过描述一个构件的外部可视行为来定义构件在系统中所承担的功能。

(3)细化(Refinement):体现了对同一事务的不同描述之间的关系,抽象Abstraction描述为基础,实现Realization描述可以看作抽象描述的具体的形式。

ODS系统中构件、连接器和配置的模型:

(1)构件(Component):是描述开放分布式系统的基本元素:接口Interface、类型Type、语义Semantics、约束条件Constraint、进化Evolution、非功能性属性Nonfunctional Property。

(2)连接器(Connector):用来分析构件之间的交互模型、定义交互规则。

连接器不一定是开放分布式系统中的一个可编辑单元,可以表现为共享变量、表入口指针、缓冲区、动态数据结构、一系列工程调用、初始化参数、通信协议、管道等多种形式。

对连接器的描述可从5方面展开:接口、类型、语义、约束条件、进化。

(3)配置(Configuration):也称为拓扑(Topology),是构件和连接器交互组成的体系结构图。

配置可用来判断4个问题:构件连接是否合适;接口是否匹配;连接器是否正常;构件连接的语义是否符合设计要求。

配置有8点特征:易理解性、复合性、细化和可描绘性、异构性、可扩充性、进化性、动态性、约束条件。

5)构件的描述方法

UML (Unified Modeling Language)统一建模语言

ADLs(Architecture Description Languages)体系结构描述语言

利用UML和ADLs可以对ODS系统中的构件及其相互之间的通信关系进行描述,利用,GUI体系结构框架自动生成工具,可完成下述几点功能:

(1)生成构件模型,包括构件的属性、接口和实现;

(2)建立连接器模型,包括协议、属性和实现;

(3)体系结构的抽象和封装;

(4)类型和类型检查;

(5)主动规范,提供设计向导;

(6)多视图模式,对不同层次的用户显示不同的内容;

(7)生成实现,如将构件对应为面向对象技术中的类;

(8)将系统的修改动态映射到实现。

6)具有自适应稳定性的连接器模型

包括:

(1)连接器中的通信协议栈;

连接器中的通信协议栈由一组功能各异的通信协议叠加而成,其中每个协议负责构件之间交互信息的一部分功能,这些功能的有机合成就实现了构件之间的可靠通信。

EJB,DCOM和CORBA的构件级复用框架中主要采用了Java/RMI和CORBA/IIOP等通信协议,

Internet采用了TCP/IP协议簇。

ODS系统中的通信协议栈包括以下几个基本协议:构件命名和寻址协议;构件通信传输协议;构件通信传输控制协议;构件通信管理协议。

(2)连接器的自适应稳定算法。

二:章二 软件体系结构的构建模式(2)

三、事件驱动模式

1、事件驱动模式

事件驱动系统的基本观点是一个系统对外部的表现可以从它对事件的处理表征出来。

特点:

(1)系统由若干个子系统或元素所组成的一个整体;

(2)系统有一定的目标,各子系统在某一种消息机制的控制下,为了这个目标而协调行动;

(3)在某一种消息机制的控制下,系统作为一个整体与环境相适应和协调;

(4)在一个系统的若干子系统中,必定有一个子系统起着主导作用,而其它子系统处于从属地位;

(5)任一系统和系统内的任一元素,都有一个事件收集机制和一个事件处理机制,通过这种机制与周围环境发生作用和联系。

在基于事件驱动模式的系统设计中,系统的每个子系统在设计过程中都要考虑其完整性和相对独立性,不绝对依赖于某一子系统,系统之间的协调和管理都是通过消息传递和收集来进行的。

2、事件驱动模式系统的设计原则:

(1)从系统论的角度看待描述的对象,合理分解子系统,保证各个子系统的独立性和社会性;

(2)任何子系统都可按有无子系统这一性质分:管理系统和执行系统;

(3)为达到系统的目标,系统内的各个子系统通过传递消息和执行消息来协同操作;

(4)任何性质的子系统都必须有一个事件处理器,用以处理上级交给的事件;

(5)在一个完整系统中,必须有这样一个子系统,它没有上级,必须收集系统外的事件及下级发出的事件;

(6)管理类型的子系统一般不执行具体操作,它的主要功能是按照自己的只能指挥下级完成任务,功能性操作一般由执行类型的子系统完成;

(7)一般情况,除最高管理子系统外,子系统一般是“有问才答”,即使在必要的情况下需要积极寻找事件时,也必须征得上级系统的许可,保证了系统的控制流不会分散。

3、事件驱动模式的优点:

(1)事件驱动模式非常适合于描述系统族,在属于同一族的任何系统中,系统的高级管理子系统的描述是完全类似的,便于重用;

(2)由于最高管理子系统牢牢的掌握着控制权,又因为各同级子系统一般不直接发生关系,因此容易实现并发处理和多任务操作;

(3)基于事件驱动模式的系统具有良好的可扩展性,设计者只需为某个对象注册一个事件处理接口就可以将该对象引入整个系统,同事并不影响其它的系统对象;

(4)定义了包含执行子系统和管理子系统的类层次结构;

(5)简化客户代码;

(6)使整个系统的设计更具有一般化。

4、事件驱动模式的不足:

(1)构件消弱了自身对系统计算的控制能力;

(2)事件驱动模式中存在的另一个问题是数据共享;

(3)系统中各个对象的逻辑关系变得更加复杂。

5、事件驱动模式和面向对象之间的关系:基于事件驱动模式的系统往往都是面向对象的。

事件接口

6、事件驱动模式实例

事件驱动是JavaBean体系结构的核心之一,JavaBean系统通过事件驱动机制将一些组件作为事件源,发出可以被描述环境或其它组件接收的事件。

适配器类是JavaBean事件模型中极其重要的一部分,在一些应用场合,事件从源到监听者之间的传递要通过适配类来“转发”。

适配类成为了事件监听者,事件源实际是把适配类作为监听者注册到监听者队列中,而真正的事件响应者并未在监听者队列中,事件响应者应做的动作由适配类决定。

四、分层模式

1、分层模式特征

一个分层系统采用层次化的组织方式构建,系统中的每一层都要承担两个角色。

首先,它要为结构中的上层提供服务;

其次,它要作为结构中下面层次的客户,调用下层提供的功能函数。

最高层和最低层例外。

核心层-功能层-应用层

2、分层模式的优点:

(1)分层模式支持系统设计过程中的逐级抽象;

(2)分层模式的系统具有较好的可扩展性;

(3)分层模式支持软件复用。

3、分层模式的不足:

并非所有的系统都适合用分层模式来描述的;对于抽象出来的功能具体应该放在哪个层次上也是设计者头疼的问题。

4、实例:

在计算机网络的设计中,采用了分层模式的设计方法。ISO/OSI的七层参考模型。

章二 软件体系结构的构建模式(3)

一、知识库模式

1、知识库模式特征

采用知识库模式构建的系统通常有两个截然不同的功能构件:

(1)中央数据单元构件:代表系统当前的各种状态;

(2)一些相对独立的组件的集合:对中央数据单元进行操作。

这样,中央数据单元和外部组件集合之间的信息交互就成为基于知识库模式的系统中至关重要的问题。

这种信息交互的方式也存在很大差异。

信息交互方式的差异导致了控制策略的不同。主要的控制策略有两种。依据这两种不同的控制策略,基于知识库模式的系统被分成两个子类。

(1)如系统由输入数据流中的事务信息来驱动,则该系统可以称为基于传统

数据库知识库模式的应用系统;

(2)如系统由知识库的当前状态来驱动,则该系统可称为基于黑板型知识库模式的应用系统。

2、一个标准的黑板型知识库模式系统通常包括3个组成部分:

(1)知识源;

(2)中央数据单元:是整个系统的核心部件,它对系统需要解决的问题预先进行了分析和定义,总结出了系统运行过程中将要出现的多种状态,并制定了这些状态下系统的相应对策;

(3)控制单元:其驱动完全是由知识库的状态编号承担的。

3、知识库模式实例:

人工智能领域-->专家系统ES(Expert System)

知识库正是专家系统的基础。

专家系统-->知识工程:知识获取、知识表示、知识推理。

专家系统:把某一领域内专家的知识和人们长期总结出来的经验方法输入其中,模仿人类专家的思维规律和处理模式,按照一定的推理机制和控制策略,利用计算机进行演绎和推理,使专家的经验变成共享资源,从而可克服专家严重短缺的现象。

专家系统的核心内容是知识库和推理机制,主要组成部分是:知识库、推理机、工作数据库、用户界面、解释程序和知识获取程序。

专家系统的结构有:人机接口、知识获取机构、知识库及其管理系统、推理机、数据库及其管理系统、解释机构、ES的通讯方法。

二、解释器模式

1、解释器模式特征:

基于解释器模式的系统核心在于虚拟机。

一个基于解释器模式的系统通常包括正在被解释执行的伪码和解释引擎。

伪码由需要被解释执行的源代码和解释引擎分析所得的中间代码组成;

解释引擎包括语法解释器和解释器当前的运行状态。

一个解释器模式中就有4个基本的构成部分:

(1)完成解释工作的解释引擎;

(2)包含伪码的数据存储区;

(3)记录引擎当前工作状态的数据结构;

(4)记录源代码被解释执行的进度的数据结构。

2、解释器模式实例

解释器模式在模式匹配系统和语言编译器等方面的应用已经非常成熟了。

(1)布尔表达式求值系统

以语法搜索匹配作为布尔表达式求值的理论基础,从语法匹配的角度来分析和解决布尔表达式求值问题。

如果一个特定语法的匹配问题发生的频率足够高,那么就有必要将该语法的各个实例表述为一种语言的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决该语法的匹配问题。

正则表达式是描述字符串模式的标准语言,与其为每一个模式都构造一个特定的算法,不如用一种通用的搜索算法来解释执行一个正则表达式,该正则表达式定义了待匹配字符串的集合。

正则表达式的解释执行结果就是布尔表达式的最终计算值。

本实例的内容可概括为如何为正则表达式定义一个布尔表达式,如何表示一个特定的布尔正则表达式,以及如何解释这个正则表达式,得出布尔表达式的结果。

由如下文法定义布尔正则表达式:

BooleanExpression::=VariableExpression | Constant | OrExpression |

AndExpression | NotExpression | '('BooleanExpression ')'

AndExpression::=BooleanExpression 'and' BooleanExpression

OrExpression::=BooleanExpression 'or BooleanExpression

NotExpression::='not' BooleanExpression

Constant::= 'true' | 'false'

VariableExpression::='A'|'B'...'Y'|'Z'

(2)布尔表达式求值系统的优缺点:

在文法规则比较简单的情况下,解释器模式工作得很好,但如果文法规则复杂,则文法的层次变得庞大而无法管理,系统中需要包含许多表示文法规则的类。

最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。例如:正则表达式通常被转换为状态机。

易于改变和扩展文法。因为解释器模式使用类来表示文法规则,用户可以使用继承来改变或扩展文法。

易于实现文法。定义抽象语法树中各个节点的类的实现大体类似,易于直接编写,通常它们也可以用一个编译器或语法分析程序生成器自动生成。

(3)布尔表达式求值系统中的角色

BooleanExpression 抽象布尔表达式

TerminalExpression 终结符表达式

NonterminalExpression 非终结符表达式

Context 上下文

Client 客户

描 述:Client构建一个布尔表达式,它是TerminalExpression和NonterminalExpression的实例的一个抽象语法树, 然后初始化上下文并调用解释操作;每一个NonterminalExpression节点定义相应字表达式的求值操作,而各表达式的求值操作构成了递归求 值的基础;每一个节点的求值操作用上下文来存储和访问解释器系统的状态。

(4)布尔表达式求值系统的实现

创建抽象语法树;定义求值操作;共享终结符。

BooleanExpression的实现:

public interface BooleanExpression{

BooleanExpresion();

boolean evaluate(Context aContext);

BooleanExpression replace(String str, BooleanExpression de);

BooleanExpression copy();

}

Context的实现:

class Context{

public boolean lookup(String str);

public void assign(VariableExpression ve, boolean bool);

}

VariableExpression的实现:

class VariableExpression implements BooleanExpression{

private String _name;

VariableExpression(String str){

_name=str;

}

boolean evaluate(Context aContext){

return (_name);

}

BooleanExpression replace(String str, BooleanExpression be){

if((_name)){

return ();

}

else{

return new VariableExpression(str);

}

}

BooleanExpression copy(){

return new VariableExpression(_name);

}

}

AndExpression的实现:

class AndExpression implements BooleanExpression{

private BooleanExpression _operand1, _operand2;

public AndExpression(BooleanExpression be1, BooleanExpression be2){

_operand1=be1;

_operand2=be2;

}

public boolean evaluate(Context aContext){

return (_te(aContext)&&_te(aContext));

}

public BooleanExpression replace(String str, BooleanExpression be){

return new AndExpression(_e(),

_e(str,be));

}

public BooleanExpression copy(){

return new AndExpression(_(), _());

}

}

Client的实现:

class Client{

public static void main(String[] args){

public BooleanExpression expression;

public Context context;

VariableExpression x=new VariableExpression("X");

VariableExpression y=new VariableExpression("Y");

expression=new OrExpression(new AndExpression(new

Constant(true),x),new AndExpression(Y, new NotExpression(x)));

(x,false);

(y,true);

boolean result=te(context);

n(result);

}

}


本文标签: 系统 模式 构件