软件体系结构与模式 - Edward Li

时间:2024-03-09 20:53:24

软件体系结构与模式

软件体系结构与模式

  计算机软件与理论            

 

一,体系结构与模式

体系结构的概念存在于社会生活的许多方面。如桥梁设计中,有拱形、板式支撑、吊索、斜拉索等;在计算机硬件体系的设计中,有单处理器、多处理器、并行计算、网络计算等等。对于软件的体系结构,目前可供选择的各种结构形态也很多,如客户/服务器、分布式、层次、交互式、解释器等等。软件工程专家从这些结构中总结和抽象出一些规律性的知识,这就是软件的模式。在软件应用开发过程中,如果能够有意识的遵循这些模式将使我们能够更有效而出色地解决设计问题。

模式的概念可大可小,广义的模式应该涵括软件体系结构的模式,类之间的设计模式和各种语言的惯用法。可以说,模式覆盖软件的方方面面。在【1】的译者序中,指出:“模式总结在软件开发中现存的、被证明良好的经验,在用来促进好的设计实践。每个模式处理一个软件系统的设计或实现中的一种特定类型的重复出现的问题。模式可以用来构建具有特定属性的软件体系结构”;“模式是软件体系结构文档化的一种方式”。事实上,在哲学层面,模式不过是对软件内部各个层次的结构、组织、逻辑、关系、功能、约束等等方面的总结和抽象概括。由于软件不过是近半个世纪的新生物,软件的很多思想都源自人类其他行业的知识。人们对模式的*追求,正从另一个侧面反映了人类对规律的向往和崇拜。人们往往从具体的现象出发,总结出抽象的规律,然后又将规律应用到现实中去,指导实践。软件行业也同样具有这样的规律性,因此,研究软件的模式是十分有必要和有意义的。

然而,我们距离那个彼岸世界的规律还很遥远。目前也不过是对现有软件的一些表面的,比较明显的现象,关系加以总结和概括。将这些规律用于实践也才刚刚起步不久。【1】提出了希望能够建立一整套模式的统一的体系,这个体系能够解决目前的所有问题。一些组织也正尝试建议一套模式工具,它能够应用合适的模式解决现实的问题。另外,描述模式的语言也越来越吸引学者们的研究。所有这些还都只是开始。

 

二,面向模式的软件体系结构

1】将软件的模式分为三大类,即体系结构模式(Architecture Patterns)、设计模式(Design Patterns)和惯用法(Idioms),从三个不同的粒度层次来阐述模式。

1,体系结构

体系结构模式代表了模式系统中最高等级模式,主要包括:Layers, Pipes and Filters, Blackboard, Broker, Model-View-Controller, Presentation-Abstraction-Control, Microkernel, Reflection等。一个特定的软件体系结构可能包含多个模式的应用,它们为软件系统提供了一个结构化的框架,具体的细化和实现工作还需要设计模式以及惯用法的支持。

2,设计模式

2】是有关设计模式的最经典的文献之一。它总结了目前最经典的23种设计模式,并将它们分类为创建型模式,结构型模式和行为模式。创建型模式包括:Abstract Factory, Builder, Factory Method, Prototype, Singleton。结构型模式包括:Adapter, Bridge, Composite, Decorator, Façade, Flyweight, Proxy。行为模式包括:Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, VisitorGrandy Booch(Rational软件公司的首席科学家)在序言中写到:“所有结构良好的面向对象软件体系结构中都包含了许多模式。……。在系统开发阶段强调这种机制(模式的应用)的优势在于,它能使所生成的体系结构更加精巧、简洁和易于理解,其程度远远超过了未使用模式的体系结构。”确实,体系结构的好坏直接决定了软件系统的命运。而模式的应用可以帮助建立有效的,出色的体系结构。【3】可以说是【2】的Java版本,Java语言的简洁性有助于快速掌握设计模式的原理。

3,惯用法

惯用法是特定程序设计语言种的低层模式。它主要描述如何在特定语言中解决具体的实现问题。如计数指针在不同语言中的实现问题。一些基本的数据结构也可以认为是一种最底层的模式,如堆栈和队列的实现等等。

 

三,体系结构的层次

一个系统的设计是由许多层次构成的。层次结构实际上是一种“分而治之(Divide and Conquer)”的思想,即将一个粒度由小到大连续的空间分为不同粒度范围类的层次空间。以操作系统为例,最底层的应该是硬件层,依次向上有驱动层,内核层,系统调用层,应用软件层等。硬件层还可以按粒度大小继续分为,配件层(主板,硬盘,网卡,……),芯片层(集成电路),硅工业层(二极管,三极管,……)。

软件的设计同样是层次性的。可分为:结构级,代码级和执行级。结构级主要包括软件的整体体系结构,在结构级之上,可能还有更大的“领域级”,即对领域的应用加以说明。代码级可以包括设计模式,惯用法,数据结构等等方面。执行级则关心软件是如何被计算机执行的,如寄存器的分配,内存的映射等等。

4】从软件体系结构的层次性概念出发,将软件体系结构划分为五个大的层次:软件的硬件层、基础控制描述层、资源级管理调度层、系统结构模式层和领域应用层。

 

四,体系结构与软件工程

体系结构的最终目标是服务于软件工程,因此,如何对体系结构进行描述,并提供必要的CASE工具支持是实现这一目标的前提,否则体系结构的意义只是概念上的。

目前,使用最多的体系结构描述语言(Architecture Description Language, ADL)是统一建模语言(UML)。当然也有一些其他的描述语言,如xADL是一种基于XML的体系结构描述语言,这些语言大部分尚处于研究阶段,而且缺少必要的工具支持。而UML作为一个建模语言标准,又具有许多开发工具的支持,在许多方面都有出色的应用。这也客观上造成了UML几乎一统天下的局面。

造成目前现状的原因,突出反映了对体系结构重要性的认识和软件体系结构研究所能提供的支持之间的差距。一方面,软件工程需要体系结构的支持;另一方面,体系结构的研究尚不能提供统一的和有效的描述规范和支持工具。【4

软件工程的最终目标是实现软件的大规模,自动化的生产。这就需要能从体系结构能够自动化地生成可运行组件或代码。甚至能够在软件的需求和体系结构之间能够建立某种关联,由需求能够映射到体系结构,从而映射到组件和代码。笔者曾经做过这方面的研究工作,通过将软件的需求表示成XML的形式,建立需求和用例图等UML模型之间的关联,从而更有效的支持需求工程,增强了软件的可维护性,并保证软件设计模型和软件需求的一致性。

笔者认为,XML作为一个信息描述的中间语言,能够实现不同信息的数据交换,因此XML也必将在软件的需求,体系结构,实现,部署等各方面起到巨大的作用。从这一点讲,xADL将具有十分广阔的前景。

 

作为一个开放的充满发展潜力的研究和应用方向,体系结构将成为软件理论和技术的下一个重要的突破点。如何拉近体系结构理论和工程实践的距离,是实现突破的关键。离开了工业界的认可,任何理论要么胎死腹中,要么被束之高阁。但是,我们有理由相信软件模式和体系结构的未来是美好的。

 

参考文献

 

1Frank Buschmann, Regine Meunier, Hans Rohnert, PeterSommerlad面向模式的软件体系结构机械工程出版社2003

2Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides著,设计模式:可复用面向对象软件的基础,2000

3James W. Cooper著,Java设计模式,中国电力出版社,2003

4】万建成 卢雷编著,软件体系结构的原理、组成与应用,科学出版社,2002