软件体系结构风格综述_李龙澍
- 格式:pdf
- 大小:148.41 KB
- 文档页数:4
第4期安庆师范学院学报(自然科学版)JournalofAnqingTeachersCollege(NaturalScienceEdition)
收稿日期:2006-07-28基金项目:国家自然科学基金项目(60273043);安徽省自然科学基金(050420204);安徽省学校拔尖人才基金(05025102);安徽省教育厅自然科学研究项目(2006KG098B)。作者简介:李龙澍(1956-),男,安徽亳州人,教授,
博士生导师,
主要从事智能软件的教学和研究工作。2006年11月Nov.2006第12卷第4期Vol.12No.4
随着计算机应用的日益普及,人们对软件的需求量急剧增加。但是,计算机软件开发技术却远远没有跟上硬件技术的发展,使得软件开发的成本逐年剧增。更为严重的是,软件的质量没有可靠的保证。软件开发的速度与计算机普及的速度不相适应,软件的质量与应用的要求不相适应,软件开发技术已经成为影响计算机系统发展的“瓶颈”[15]。20世纪60年代的软件危机使得人们开始重视软件工程的研究。起初,人们把软件设计的重点放在数据结构和算法的选择上,随着软件系统规模越来越大、越来越复杂,整个系统的结构和规格说明显得越来越重要,软件危机的程度日益加剧,现有的软件工程方法对此显得力不从心。对于大规模的复杂软件系统来说,对总体的系统结构设计和规格说明比起对计算的算法和数据结构的选择显得更重要。在此种背景下,人们认识到软件体系结构的重要性,并认为对软件体系结构的研究将会成为提高软件生产率和解决软件维护问题的新的最有希望的途径。[1,4,5]1.软件体系结构的基本概念按照现代软件工程的观点,开发一个软件系统的核心问题是怎样把一个大的系统划分成若干个结构合理的小的子系统,也就是系统怎样被分成许多模块,模块之间怎样相互作用,组合起来有什么样的整体属性,这些问题清楚了,软件就具有了体系结构。软件体系结构是设计抽象的进一步发展,满足了更好地理解软件系统,更方便地开发更大、更复杂的软件系统的需要。最近几年软件体系结构研究已完全独立于软件工程的研究,成为计算机科学的一个最新的研究方向和独立学科分支。许多专家学者从不同角度和不同侧面对软件体系结构进行了刻画,较为典型的定义有:[1-5](1)1992年DewaynePerry和A1exWo1f曾这样定义:软件体系结构是具有一定形式的结构化元素(或称设计元素),包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同构建以不同的形式连接起来。这一定义在其他的有关软件体系结构定义中基本上得到了不同形式的体现。(2)1993年MaryShaw和DavidGarlan认为软件体系结构是软件设计过程中的一个层次,它由元素、连接以及它们之间的约束组成,其抽象程度超越计算过程中的算法设计和数据结构设计。包括总体组织和全局控制、通讯协议、同步、数据存取,以及在各设计方案间进行选择等,如全局组织和全局控制结构、关于通讯、同步与数据存取的协议,设计构件功能定义,物理分布与合成,设计方案的选择、评估与实现,粒度和性能等。(3)HayesRoth在一次特定软件体系结构的报告中认为软件体系结构是一个由功能构件组成的抽象的系统规范,主要包括用其行为来描述的功能构件和构件之间的相互连接、接口和关系。软件体系结构风格综述
李龙澍(安徽大学计算机科学与技术学院,安徽合肥230039)摘要:软件体系结构已经成为软件工程的一个重要研究领域,本文综述了数据流系统、数据抽象和面向对象组织、分层系统、数据中心系统等软件体系结构风格,并且指出了它们的优点和缺点。关键词:软件体系结构;构件;综述中图分类号:TP311文献标识码:A文章编号:1007-4260(2006)04-0001-04
(4)DavidGarlan和DewnePerry于1995年在IEEE软件工程学报上又给出如下的定义:软件体系结构是一个系统各构件的结构、它们之间的相互关系以及进行设计的原则和随时间进化的规范。(5)1997年,Bass等科学家在使用软件体系结构一书中给出如下的定义:一个程序或计算机系统的软件体系结构包括一个或一组软件构件、软件构件的外部的可见特性及其相互关系。其中,“软件外部的可见特性”是指软件构件提供的服务、性能、特性、错误处理、共享资源使用等。软件体系结构的最核心概念有:构件(component)、连接件(connector)、配置(configuration)、端口(port)和角色(role)。构件是具有某种功能可重用的软件基本单元,表示软件系统中主要的计算元素和数据存储单元。构件有两种:复合构件和原子构件,复合构件是由其它复合构件和原子构件以一定的拓扑结构通过连接件构成;原子构件不可再分,底层由实现该构件的类组成。构件可组成一种自嵌套的分层网络结构。连接件表示了构件之间的交互,是构件与构件之间建立和维持行为关联和消息传递的途径,包括实现构件之间的交互机制和管理这些交互的原则(协议)。简单的连接如:pipes,procedurecall,eventbroadcast等,更为复杂的交互如:client-server通信协议,数据库和应用之间的SQL连接等等。配置表示了构件和连接件之间的拓扑结构和逻辑约束,它是构件和连接件的集合。构件和连接件作为一种类型,它们只表示了构件或连接件的属性,并不是它们的实际例子。由构件类型生成构件实例,由连接件类型生成连接实例,严格地说,配置是构件实例和连接实例的集合。在不引起混淆的情况下,仍称构件实例为构件,称连接实例为连接件。构件作为一个封装的实体,只能通过其接口与外部环境交互,构件的接口由一组端口组成,每个端口表示了构件和外部环境的交互点。通过不同的端口类型,一个构件可以提供多个接口。一个端口可以非常简单,如过程调用,也可以表示更为复杂的界面(包含一些约束),如必须以某种顺序调用的一组过程调用。连接件作为软件体系结构的主要实体,同样也有接口,连接的接口由一组角色组成,连接的每一个角色定义了该连接件表示的交互的参与者,二元连接件有两个角色,多元连接件可以有多于两个的角色,如事件广播有一个事件发布者角色和任意多个事件接受者角色。总之,软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅定义了系统的组织结构和拓扑结构,而且表示了系统的需求和构成系统的元素之间的对应关系,提供了设计决策的基本原理和约束条件。2.软件体系结构的风格软件体系结构设计表示计算机系统的基础架构,主要从高层描述各组成部分的关系以及它们的接口,包括系统构件,它们对外可见的性质及它们的关系。通过这种表示可以分析软件需求满足的效力;可以相对容易地进行结构修改;可以减少程序构造的风险。软件体系结构设计的一个核心问题是能否使用重复的体系结构模式,即能否达到体系结构级的软件重用。软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。它反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统。按这种方式理解,软件体系结构风格定义了用于描述系统的术语表和一组指导构件系统的规则。一个优秀的软件,首先要选择合适的软件体系结构风格,可以更好地促进对设计的复用。软件体系结构风格的不变部分使不同的系统可以大粒度地共享同一个实现代码。只要系统是使用常用的、规范的方法来组织,就可使别的设计者很容易地理解系统的体系结构。以下是经典的软件体系结构风格。[1,4,5,11-14]2.1数据流系统最典型的数据流系统(DataflowSystems)风格是管道和过滤器(PipesandFilters),在软件体系结构的数据流风格中,每个构件有一套输入集和一套输出集,构件从输入集中得到输入数据流,并且将计算产生的数据流送给输出集。这种风格的构件称作过滤器(Filters),连接件是输入流和输出流的通道,称作管道(Pipes)。图1是管道和过滤器风格的示意图,其中方框表示过滤器,带箭头的空心线代表管道。管道和过滤器风格的一个重要特性是过滤器之间相互独立,不与其他过滤器共享数据;另一个重要特性是它不必知道与自己连接的过滤器的身份标识,只需要从输入管道接受数据,将计算结果送入输出管道;再一个重要特性是整个系统的结果与系统中过滤器执行的先后顺序无关。由于过滤器的独立性,管道和过滤器风格不适用于交互作用很强的系统;这种风格也有可能导致效率的下降。安庆师范学院学报(自然科学版)2006年2・・第4期
2.2数据抽象和面向对象组织数据抽象和面向对象组织(DataAbstractionandObject-orientedOrganization)风格是以抽象数据类型和面向对象技术为基础的,它的基本构件是对象。数据的结构和它们相应的操作被封装在一个抽象数据类型里,这个抽象数据类型的实例是对象,对象之间通过传递消息发生联系。数据抽象和面向对象组织风格的结构如图2所示。方框表示对象,对象之间的弧表示对象之间传递消息。
面向对象有很多突出的优点。抽象是人类认识问题的最基本手段之一,数据抽象是指对每一类对象进行概括,抽出这类对象的公共性质并用计算机语言加以描述的过程,把具有相同属性和相同操作的一些对象抽象为一个类,这些对象都是这个类的实例。封装是面向对象风格的又一个特点,它是一种信息隐臧技术,在面向对象系统中,通过封装,可以将一部分属性和操作隐藏起来,不让使用者访问,另一部分作为类的外部接口,使用者可以访问,这样可以对属性和操作的访问权限进行合理控制,减少模块之间的相互影响,降低出错的可能性。继承是新建的类从已有的类那里得到已有的特征,已有的类称为基类或父类,由继承基类产生的新建类称为派生类或子类,继承有效地实现了软件的重用,增强了系统的可扩充性。数据抽象和面向对象组织风格也有一定缺点,对象之间的交互必须知道对方的标识,增强了对象之间的依赖关系,降低了独立性。2.3分层系统分层系统(LayeredSystems)将整个软件系统组成一个层次结构,系统的每个中间层既要为上次提供服务,又要调用下层的功能。图3显示了典型的三层分层系统结构。表示层是系统的用户接口部分,由用户界面代码组成,它担负着用户与应用间的对话功能,使用功能层提供的服务,不直接访问后台数据库。它用于检查用户从输入设备发出的输入的数据,并且显示输出的数据。为使用户能直观地进行操作,一般使用图形用户接口,操作简单、易学易用。在变更用户接口时,只需改写显示控制和数据检查程序,而不影响其他两层。检查的内容也只限于数据的形式和取值的范围,不包括有关业务本身的处理逻辑。功能层相当于软件系统的本体,它是将具体的业务处理逻辑编入程序中。对于较大的系统,功能层可以进一步分成若干层。表示层和功能层之间的数据交往要尽可能简洁。数据层就是数据库管理系统,负责管理对数据库数据的读写。数据库管理系统必须能迅速执行大量数据的更新和检索,满足功能的需求。分层风格有效支持了软件设计的逐级抽象,具有较好的可扩展性,支持软件复用,但也要注意降低层次之间的耦合程度。2.4