⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 200603131358465.html

📁 软件工程的红包书
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<P>  (1)以<a href="200603061756235.html" tppabs="http://www.itisedu.com/phrase/200603061756235.html" target="_new">软件需求</a>完全确定为前提的瀑布模型。<BR>  (2)在软件开发初始阶段只能提供基本需求时采用的渐进式开发模型,如螺旋模型等。<BR>  (3)以形式化开发方法为基础的变换模型。</P>
<P>  所有开发方法都是要解决需求与实现之间的差距。但是,这三种类型的软件开发模型都存在这样或那样的缺陷,不能很好地支持基于软件体系结构的开发过程。因此,研究人员在发展基于体系结构的软件开发模型方面做了一定的工作。例如,为了形象地表示体系结构的生命周期,北京邮电大学的周莹新博士建立了一个软件体系结构的生命周期模型,该模型如图2所示。&nbsp; </P>
<P><IMG src="200631314239333.gif" tppabs="http://www.itisedu.com/manage/Upload/image/200631314239333.gif" border=0></P>
<P>图2 软件体系结构的生命周期模型</P>
<P>5 软件产品线体系结构的研究</P>
<P>  软件体系结构的开发是大型软件系统开发的关键环节。体系结构在软件生产线的开发中具有至关重要的作用,在这种开发生产中,基于同一个软件体系结构,可以创建具有不同功能的多个系统。在软件产品族之间共享体系结构和一组可重用的构件,可以增加软件工程和降低开发和维护成本。<BR>一个产品线代表着一组具有公共的系统需求集的软件系统,它们都是根据基本的用户需求对标准的产品线构架进行定制,将可重用构件与系统独有的部分集成而得到的。采用软件生产线式模式进行软件生产,将产生巨型编程企业。但目前生产的软件产品族大部分是处于同一领域的。</P>
<P><STRONG>五、软件体系结构的影响</STRONG> </P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件体系结构贯穿于软件研发的整个生命周期内,具有重要的影响。这主要从以下三个方面来进行考察:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1) 利益相关人员之间的交流:软件体系结构是一种常见的对系统的抽象,代码级别的系统抽象仅仅可以成为程序员的交流工具,而包括程序员在内的绝大多数系统的利益相关人员都借助软件体系结构来进行彼此理解、协商、达成共识或者相互沟通的基础。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2) 系统设计的前期决策:软件体系结构是我们所开发的软件系统最早期设计决策的体现,而这些早期决策对软件系统的后续开发、部署和维护具有相当重要的影响。这也是能够对所开发系统进行分析的最早时间点。</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3) 可传递的系统级抽象:软件体系结构是关于系统构造以及系统各个元素工作机制的相对较小、却又能够突出反映问题的模型。由于软件系统具有的一些共通特性,这种模型可以在多个系统之间传递,特别是可以应用到具有相似质量属性和功能需求的系统中,并能够促进大规模软件的系统级复用。</P>
<P><BR><STRONG>六、软件体系结构的风格</STRONG> </P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对软件体系结构风格的研究和实践促进了对设计的复用,一些经过实践证实的解决方案也可以可靠地用于解决新的问题。体系结构风格的不变部分使不同的系统可以共享同一个实现代码。只要系统是使用常用的、规范的方法来组织,就可使别的设计者很容易地理解系统的体系结构。例如,如果某人把系统描述为"客户/服务器"模式,则不必给出设计细节,我们立刻就会明白系统是如何组织和工作的。 </P>
<P>  下面是Garlan和Shaw对通用体系结构风格的分类:<BR>  (1)数据流风格:批处理序列;管道/过滤器<BR>  (2)调用/返回风格:主程序/子程序;面向对象风格;层次结构<BR>  (3)独立构件风格:进程通讯;事件系统<BR>  (4)虚拟机风格:解释器;基于规则的系统<BR>  (5)仓库风格:<a href="javascript:if(confirm('http://www.itisedu.com/phrase/200603011056245.html  \n\nThis file was not retrieved by Teleport Pro, because it was unavailable, or its retrieval was aborted, or the project was stopped too soon.  \n\nDo you want to open it from the server?'))window.location='http://www.itisedu.com/phrase/200603011056245.html'" tppabs="http://www.itisedu.com/phrase/200603011056245.html" target="_new">数据库系统</a>;超文本系统;黑板系统<BR>  限于篇幅,在本文中,我们将只介绍几种主要的和经典的体系结构风格和它们的优缺点。有关新出现的软件体系结构风格,将在后续文章中进行介绍。</P>
<P>1、C2风格</P>
<P>  C2体系结构风格可以概括为:通过连接件绑定在一起的按照一组规则运作的并行构件网络。C2风格中的系统组织规则如下:<BR>  (1)系统中的构件和连接件都有一个顶部和一个底部;<BR>  (2)构件的顶部应连接到某连接件的底部,构件的底部则应连接到某连接件的顶部,而构件与构件之间的直接连接是不允许的;<BR>  (3)一个连接件可以和任意数目的其它构件和连接件连接;<BR>  (4)当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部。</P>
<P>  图3是C2风格的示意图。图中构件与连接件之间的连接体现了C2风格中构建系统的规则。 </P>
<P><IMG src="200631314530922.gif" tppabs="http://www.itisedu.com/manage/Upload/image/200631314530922.gif" border=0><BR>&nbsp;<BR>图3 C2风格的体系结构</P>
<P>  C2风格是最常用的一种软件体系结构风格。从C2风格的组织规则和结构图中,我们可以得出,C2风格具有以下特点:<BR>  (1)系统中的构件可实现应用需求,并能将任意复杂度的功能封装在一起;<BR>  (2)所有构件之间的通讯是通过以连接件为中介的异步<a href="200603090938465.html" tppabs="http://www.itisedu.com/phrase/200603090938465.html" target="_new">消息</a>交换机制来实现的;<BR>  (3)构件相对独立,构件之间依赖性较少。系统中不存在某些构件将在同一地址空间内执行,或某些构件共享特定控制<a href="200603091754305.html" tppabs="http://www.itisedu.com/phrase/200603091754305.html" target="_new">线程</a>之类的相关性假设。</P>
<P>2、管道/过滤器风格</P>
<P>  在管道/过滤器风格的软件体系结构中,每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,然后产生输出数据流。这个过程通常通过对输入流的变换及增量计算来完成,所以在输入被完全消费之前,输出便产生了。因此,这里的构件被称为过滤器,这种风格的连接件就象是数据流传输的管道,将一个过滤器的输出传到另一过滤器的输入。此风格特别重要的过滤器必须是独立的实体,它不能与其它的过滤器共享数据,而且一个过滤器不知道它上游和下游的标识。一个管道/过滤器网络输出的正确性并不依赖于过滤器进行增量计算过程的顺序。</P>
<P>  图4是管道/过滤器风格的示意图。一个典型的管道/过滤器体系结构的例子是以Unix shell编写的程序。Unix既提供一种符号,以连接各组成部分(Unix的进程),又提供某种进程运行时机制以实现管道。另一个著名的例子是传统的编译器。传统的编译器一直被认为是一种管道系统,在该系统中,一个阶段(包括词法分析、语法分析、语义分析和代码生成)的输出是另一个阶段的输入。 <BR>&nbsp;</P>
<P><IMG src="20063131465679.gif" tppabs="http://www.itisedu.com/manage/Upload/image/20063131465679.gif" border=0><BR>图4 管道/过滤器风格的体系结构</P>
<P>  管道/过滤器风格的软件体系结构具有许多很好的特点:<BR>  (1)使得软构件具有良好的隐蔽性和高内聚、低耦合的特点;<BR>  (2)允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;<BR>  (3)支持软件重用。重要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来;<BR>  (4)系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;<BR>  (5)允许对一些如吞吐量、死锁等属性的分析;<BR>  (6)支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行。 </P>
<P>  但是,这样的系统也存在着若干不利因素。</P>
<P>  (1)通常导致进程成为批处理的结构。这是因为虽然过滤器可增量式地处理数据,但它们是独立的,所以设计者必须将每个过滤器看成一个完整的从输入到输出的转换。<BR>  (2)不适合处理交互的应用。当需要增量地显示改变时,这个问题尤为严重。<BR>  (3)因为在数据传输上没有通用的标准,每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过滤器的复杂性。</P>
<P>3、数据抽象和面向对象风格</P>
<P>  抽象数据类型概念对软件系统有着重要作用,目前软件界已普遍转向使用面向对象系统。这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。这种风格的构件是对象,或者说是抽象数据类型的实例。对象是一种被称作管理者的构件,因为它负责保持资源的完整性。对象是通过函数和过程的调用来交互的。</P>
<P>  图5是数据抽象和面向对象风格的示意图。 <BR>&nbsp;</P>
<P><IMG src="200631314615386.gif" tppabs="http://www.itisedu.com/manage/Upload/image/200631314615386.gif" border=0><BR>图5 数据抽象和面向对象风格的体系结构</P>
<P>  面向对象的系统有许多的优点,并早已为人所知:</P>
<P>  (1)因为对象对其它对象隐藏它的表示,所以可以改变一个对象的表示,而不影响其它的对象。<BR>  (2)设计者可将一些数据存取操作的问题分解成一些交互的代理程序的集合。</P>
<P>  但是,面向对象的系统也存在着某些问题:</P>
<P>  (1)为了使一个对象和另一个对象通过过程调用等进行交互,必须知道对象的标识。只要一个对象的标识改变了,就必须修改所有其他明确调用它的对象。<BR>  (2)必须修改所有显式调用它的其它对象,并消除由此带来的一些副作用。例如,如果A使用了对象B,C也使用了对象B,那么,C对B的使用所造成的对A的影响可能是料想不到的。</P>
<P>4、基于事件的隐式调用风格</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -