MarShaw和DavidGarlan 中提出的软件体系结构定义为:能够用来具体描述软件系统控制结构和整体组织的一种体系结构,能够表示系统的框架结构,用于从较高的层次上来描述各部分之间的关系和接口。
软件体系结构是对系统的一种高层次的抽象描述。主要是反映拓扑属性,有意忽略细节;
软件体系结构是由构件和构件之间的联系组成,构件又有它自身的体系结构;
构件的描述有3个方面:计算功能、结构特性及其他特性。
从软件体系结构的定义可以看出,软件体系结构主要涉及构件、构件之间的联系与约束、由构件通过相互交互形成的系统架构三个方面的内容。
通过使用软件体系结构,可以有效地分析用户需求、方便系统的修改以及减小程序构造风险。
软件框架设计的核心问题是:能否重用已经成型的体系结构方案。由此,产生了软件体系结构风格的概念。软件体系结构风格包括构件、连接件和一组将它们结合在一起的约束限制,诸如:拓扑限制和语义限制等。
体系结构风格的分类:
数据流风格:批处理序列、管道/过滤器;
仓库风格:数据库系统、超文本系统、黑板系统;
独立构件风格:进程通迅、事件系统;
调用/返回风格:主程序/子程序、面向对象风格、层次结构;
虚拟机构格:解释器、基于规则的系统。
管道/过滤器风格
管道/过滤器架构是典型的数据流软件架构风格。主要包括过滤器和管道两种元素。在这种体系结构中,每个模块都有一组输入和一组输出。每个部件从输入接口中读取数据,经过处理后将结果数据置于输出接口中,这样的部件称为过滤器。
这种模型的连接者将一个过滤器的输出传送到另一个过滤器的输入,这种连接者称为管道。
在管道/过滤器风格中,过滤器必须是相互独立的实体,它们相互之间的状态不可共享。每一个过滤器并不能识别它的数据流上游和下游的过滤器的身份,那么就需要在过滤器的输入输出端口的管道必须来保证输入数据和输出数据类型的衔接的正确性。
传统的编译器是管道/过滤器体系结构风格的另一个著名的例子。
面向对象体系结构风格
对象是通过函数和过程的调用来交互的,面向对象体系结构如图所示
一个对象对其他对象隐藏它的表示,所以可以改变一个对象的表示,而不影响其他的对象;
对象将数据和操作封装在一起,提高了系统内聚性,减小了模块之间的耦合程度,使系统更容易分解为既相互作用又相互独立的对象集合;
继承和封装方法为对象重用提供了技术支持。
分层体系结构风格
分层体系结构风格是调用/返回风格的一个代表。层次风格组织成一个层次结构,通过分解,能够将复杂系统划分为多个独立的层次,每一层都具有高度的内聚性,并要求每一层为上层服务,并作为下层的客户,较高层面向特定应用问题,较低层则更具有一般性。
在分层结构中,层间的连接器通过层间交互的协议来定义的,且上下层之间是单向调用关系,即上层通过下层提供的接口来使用下层的功能,而下层却不能使用上层的功能。
待续