软件体系结构课程设计Word文档格式.docx
《软件体系结构课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《软件体系结构课程设计Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
![软件体系结构课程设计Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/7/25259d9e-d600-4cc2-8156-1a2a02de8a30/25259d9e-d600-4cc2-8156-1a2a02de8a301.gif)
功能模块称作过滤器(filters);
功能模块间的连接可以看作输入、输出数据流之间的通路,所以称作管道(pipes)。
管道-过滤器风格的特性之一在于过滤器的相对独立性,即过滤器独立完成自身功能,相互之间无需进行状态交互。
过滤器是独立运行的构件,非临近的过滤器之间不共享状态,过滤器自身无状态
过滤器对其处理上下连接的过滤器“无知”,对相邻的过滤器不施加任何限制
结果的正确性不依赖于各个过滤器运行的先后次序,各过滤器在输入具备后完成
自己的计算,完整的计算包含在过滤器的拓扑结构中。
一个管道-过滤器风格的示意图如下图所示:
一个采用了嵌套的管道过滤器的系统示例:
管道-过滤器风格优点:
设计者可以将整个系统的输入、输出特性简单的理解为各个过滤器功能的合成。
设计人员将整个系统的输入输出行为理解为单个过滤器行为的叠加与组合。
这样可以将问题分解,化繁为简。
将系统抽象成一个“黑箱”,其输入是系统中第一个过滤器的输入管道,输出是系统中最后一个过滤器的输出管道,而其内部各功能模块的具体实现对用户完全透明。
管道-过滤器风格支持功能模块的复用任何两个过滤器,只要它们之间传送的数据遵守共同的规约,就可以相连接。
每个过滤器都有自己独立的输入输出接口,如果过滤器间传输的数据遵守其规约,只要用管道将它们连接就可以正常工作。
基于管道-过滤器风格的系统具有较强的可维护性和可扩展性。
旧的过滤器可以被替代,新的过滤器可以添加到已有的系统上。
软件的易于维护和升级是衡量软件系统质量的重要指标之一,在管道-过滤器模型中,只要遵守输入输出数据规约,任何一个过滤器都可以被另一个新的过滤器代替,同时为增强程序功能,可以添加新的过滤器。
这样,系统的可维护性和可升级性得到了保证。
支持一些特定的分析,如吞吐量计算和死锁检测等。
利用管道-过滤器风格的视图,可以很容易的得到系统的资源使用和请求的状态图。
然后,根据操作系统原理等相关理论中的死锁检测方法就可以分析出系统目前所处的状态,是否存在死锁可能及如何消除死锁等问题。
管道-过滤器风格具有并发性每个过滤器作为一个单独的执行任务,可以与其它过滤器并发执行。
过滤器的执行是独立的,不依赖于其它过滤器的。
在实际运行时,可以将存在并发可能的多个过滤器看作多个并发的任务并行执行,从而大大提高系统的整体效率,加快处理速度
管道-过滤器风格不足:
交互式处理能力弱。
管道-过滤器模型适于数据流的处理和变换,不适合为与用户交互频繁的系统建模。
在这种模型中,每个过滤器都有自己的数据,这些数据或者是从磁盘存储器中读取来,或者是由另一个过滤器的输出导入进来,整个系统没有一个共享的数据区。
这样,当用户要操作某一项数据时,要涉及到多个过滤器对相应数据的操作,其实现较为复杂。
由以上的缺点,可以对每个过滤器增加相应的用户控制接口,使得外部可以对过滤器的执行进行控制。
管道-过滤器风格往往导致系统处理过程的成批操作。
设计者也许不得不花费精力协调两个相对独立但又存在某种关系的数据流之间的关系,例如多过滤器并发执行时数据流之间的同步问题等。
根据实际设计的需要,设计者也需要对数据传输进行特定的处理(如为了防止数据泄漏而采取加密等手段),导致过滤器必须对输入、输出管道中的数据流进行解析或反解析,增加了过滤器具体实现的复杂性
②面向对象风格特征
概述
面相对象模式集数据抽象、抽象数据类型、类继承为一体,使软件工程公认的模块化、信息隐藏、抽象、重用性等原则在面向对象风格下得以充分实现。
应用场合
面向对象的体系结构模式适用于数据和功能分离的系统中,同样也适合于问题域模型比较明显,或需要人机交互界面的系统。
大多数应用事件驱动风格的系统也常常应用了面向对象风格。
面向对象风格的体系结构图
面向对象风格优点:
高度模块性,封装功能,代码共享,灵活性,易维护性,可扩充性
面向对象风格不足:
面向对象风格最大的不足在于如果一个对象需要调用另一个对象,它就必须知道那个对象的标识(对象名或对象引用),这样就无形之中增强了对象之间的依赖关系。
如果一个对象改变了自己的标识,就必须通知系统中所有和它有调用关系的对象,否则系统就无法正常运行。
③层次系统风格
层次系统组织成一个层次结构,每一层为上层服务,并作为下层客户。
在一些层次系统中,除了一些精心挑选的输出函数外,内部的层只对相邻的层可见。
这样的系统中构件在一些层实现了虚拟机(在另一些层次系统中层是部分不透明的)。
连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。
这种风格支持基于可增加抽象层的设计。
这样,允许将一个复杂问题分解成一个增量步骤序列的实现。
由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。
一个概念上的分层模型如下图所示:
分层风格具有一些系统设计者无法抗拒的优势:
分层风格支持系统设计过程中的逐级抽象,基于分层风格的系统具有较好的可扩展性,分层风格支持软件复用
分层风格不足:
并不是所有的系统都适合用分层风格来描述的,对于抽象出来的功能具体应该放在哪个层次上也是设计者头疼的一个问题
④解释器风格
基于解释器风格的系统核心在于虚拟机。
一个基于解释器风格的系统通常包括:
正在被解释执行的伪码和解释引擎;
伪码:
由需要被解释执行的源代码和解释引擎分析所得的中间代码组成;
解释引擎包括:
语法解释器和解释器当前的运行状态
解释器风格示意图如下图所示:
解释器风格优点:
在文法规则比较简单的情况下,解释器风格工作的很好;
易于改变和扩展文法。
因为解释器风格使用类来表示文法规则,用户可以使用继承来改变和扩展文法。
已有的表达式可以采用增量的方式逐渐扩充,而新的表达式可以定义为旧表达式的变体;
易于实现文法。
可以用多种操作来“解释”一个句子。
解释器风格缺点:
无法解释复杂的文法规则:
对于比较简单的文法规则,解释器风格工作的很好,而对于复杂的文法规则,则由于文法层次的庞大而难于管理;
应用范围比较狭窄;
在文法规则比较复杂,则文法的层次变得无法管理,系统中需要包含许多表示文法规则的类。
⑤反馈控制环风格
控制工程是一个十分强调方法论的专业领域,因此控制工程方法完全是独立于各种应用领域的。
为了将过程控制方法从单纯的控制领域中抽象出来,我们引入了动态系统的概念。
动态系统表示信号处理和传输的一个功能单元(例如:
信号可以是能量、材料、信息、资金及其他形式),其中系统的起因和由此引起的时间上的效果分别作为系统的输入量和输出量来考虑。
如此定义的系统具有共同的特征,即在其中一定存在有目标的作用、信息处理、闭环和开环控制过程,正如N.Wiener所提出的,以上概念可以用控制论这个更高级的概念来总结。
控制论也可以应用于软件体系结构的创建。
根据上述的动态系统的定义,在系统中必然存在信号的处理和传输。
这时系统也可描述为传输环节或传输系统。
传输环节具有唯一的作用方向,这由输入、输出信号的箭头方向给出。
单变量系统如下图所示:
多变量系统如下图所示:
除了用方框图来表达动态系统以外,还可以用信号流图,如下图所示:
一般的动态系统描述框图可以分为开环控制和闭环控制系统,但在实际应用中这两种不同的动态系统往往很容易混淆在一起,对它们之间的区别强调的不够。
现在通过一个市内暖气系统来指出这两者之间的不同和相同之处。
开环控制图如下图所示:
闭环控制图如下图所示:
开环控制和闭环控制的差别:
闭环控制:
表示一个闭合的作用过程,(控制回环);
根据闭环作用原理可增加抗干扰性(负反馈);
可能不稳定,也即被控量不再衰减,而是增长到无穷大(理论上)。
开环控制
表示一个开放的作用过程(控制序列);
只能对抗指定由其处理的干扰,对于其他一些干扰因素无法消除;
只要被控制对象自己保持稳定,整个开环控制系统也就保持稳定。
反馈控制环风格基本结构
以闭环控制系统为例分析过程控制环的基本结构;
一个自动控制系统包括如下4个主要组成部分:
被控对象、测量环节、调节器和执行环节,如下图所示:
反馈控制环风格-自适应反馈控制环
直接法模型如下图所示:
间接法模型如下图所示:
⑥仓库风格
在仓库风格中,有两种不同的构件:
中央数据结构说明当前状态,独立构件在中央数据存贮上执行,仓库与外构件间的相互作用在系统中会有大的变化。
控制原则的选取产生两个主要的子类。
若输入流中某类时间触发进程执行的选择,则仓库是一传统型数据库;
另一方面,若中央数据结构的当前状态触发进程执行的选择,则仓库是一黑板系统。
黑板系统的组成:
(1)知识源。
知识源中包含独立的、与应用程序相关的知识,知识源之间不直接进行通讯,它们之间的交互只通过黑板来完成。
(2)黑板数据结构。
黑板数据是按照与应用程序相关的层次来组织的解决问题的数据,知识源通过不断地改变黑板数据来解决问题。
(3)控制。
控制完全由黑板的状态驱动,黑板状态的改变决定使用的特定知识。
三.总结
软件体系结构风格为大粒度的软件重用提供了可能。
然而,对于应用体系结构风格来说,由于视点的不同,系统设计师有很大的选择空间。
要为系统选择或设计某一个体系结构风格,必须根据特定项目的具体特点,进行分析比较后再确定,体系结构风格的使用几乎完全是特化的。
在本文中,我们只讲述了“纯”的体系结构。
但是,从上面的介绍中,我们知道,不同的结构有不同的处理能力的强项和弱点,一个系统的体系结构应该根据实际需要进行选择,以解决实际问题。
第二部分
分层风格实例:
计算机网络的设计
网络协议设计者将计算机网络中的各个部分按其功能划分为若干个层次(Layer),其中的每一个层次都可以看成是一个相对独立的黑箱、一个封闭的系统。
用户只关心每一层的外部特性,只需要定义每一层的输入、数据处理和输出等外部特性。
ISO/OSI网络体系结构
ISO/OSI采用了7层体系结构,从高到低分别是:
应用层、表示层、会话层、传输层、网络层、数据链路层和物理层,如图所示。
其最高层为第7层应用层,用于同应用服务之间交换数据;
最低层为第1层物理层,用于连接物理传输介质实现真正的数据通信。
层与层之间的联系是通过各层之间的接口来实现的,上层通过接口向下层提出服务请求,而下层通过接口向上层提供服务。
两台计算机通过网络进行通信时,只有两物理层之间能够通过媒体进行真正的数据通信,其余各对等层之间均不存在直接的通信关系,各对等层之间只能通过各对等层的协议来进行虚拟通信。
第1层是物理层(PhysicalLayer),它负责在物理信道上传输原始的数据bit流。
它应该提供为建立、维护和拆除物理链路连接所需的机械的、电气的、功能和规程的特性,
第2层是数据链路层(DataLinkLayer),它的主要功能是纠错和流量控制,负责在可能出现差错的物理线路中实现无差错的数据传送。
它应该在物理层的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)的无差错传输,并进行数据流量控制。
第3层是网络层(NetworkLayer),它的主要功能是路由控制(找路)、拥塞控制和数据打包。
它应该为其上一层传输层的数据传输提供建立、维护和终止网络连接的手段,把上层传来的数据分割成一个一个的数据包(Packet,也叫报文分组)在结点之间进行交换传送,并且负责路由控制和拥塞控制。
第4层是传输层(TransportLayer),它的主要功能是在上层和下层之间起到一种接口的功能。
它应该为上层提供端到端(最终用户到最终用户)、的透明的、可靠的数据传输服务。
所谓透明的传输是指在通信过程中上层可以将下面各层看作是一个封闭的黑箱系统,传输层对上层屏蔽了传输系统的具体细节。
第5层是会话层(SessionLayer),它的主要功能是负责收发数据的交接工作、并组织和管理数据。
它应该为表示层提供建立、维护和结束会话连接的功能,并提供会话管理服务。
第6层是表示层(PresentationLayer),它的主要功能是为数据提供收发、存放的具体格式和规范。
它应该为应用层提供信息表示方式的服务,如数据格式的变换、文本压缩、加密技术等。
第7层是应用层(ApplicationLayer),它的主要功能是为数据提供各种可行的收发方式。
它应该为网络用户或应用程序提供各种应用服务,如文件传输、电子邮件(E-mail)、分布式数据库、网络管理等。
ISO/OSI层次分组关系:
有两种分组方法
I第一种可以从数据处理分工的角度,将ISO/OSI七个层次分为三组:
第1、2层解决有关网络信道问题;
第3、4层解决传输服务问题;
第5、6、7层则处理对应用进程的访问。
从数据传输控制的角度,将ISO/OSI七个层次分为三组:
下三层(1、2、3层)可以看作是传输控制组,负责通信子网的工作,解决网络中的通信问题;
上三层(5、6、7层)为应用控制组,负责有关资源子网的工作,解决应用进程之间的信息转换问题;
中间层(4层)则为通信子网和资源子网的接口,起到连接传输和应用的作用。
.Net平台也是一个明显的分层系统: