软件体系结构风格_第1页
软件体系结构风格_第2页
软件体系结构风格_第3页
软件体系结构风格_第4页
软件体系结构风格_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件体系结构风格软件框架设计的核心问题是:能否复用已经成型的体系结构方案不同系统的设计方案存在着许多共性问题,把这些共性部分抽取出来,就形成了具有代表性的和可广泛接受的体系结构风格什么是软件体系结构风格?软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。软件体系结构风格的作用是什么?1.指导如何将各个模块和子系统有效地组织成一个完整的系统。2.有关风格的使用带来了设计者的交流形式。关于设计元素的词汇促进了设计者理解和交流。3.使用风格能够使代码的重用性得到提高。当用不同的系统时,基本的架构代码风格不需要修改,它能够用于不同的系统中。体系结构风格对于高质量的软件产品而言,首先要为其选择合适的体系结构风格,这样就能够更好地重用已有的设计方案和实现方案体系结构风格最关键的四要素◎提供一个词汇表◎定义一套配置规则◎定义一套语义解释原则◎定义对基于这种风格的系统所进行的分析体系结构的风格有哪些?管道-过滤器风格面向对象风格事件驱动风格分层风格数据共享风格解释器风格反馈控制环风格特点:1.每个构件都有输入输出,构件完成对输入数据的处理产生输出。2.构件之间相对独立,相互之间无交互状态,非邻近过滤器不共享任何信息。3.整个体系结构的最终输出与格构件执行的顺序无关。词汇:过滤器:构件管道:连接管道-过滤器风格优点◎使得软构件具有良好的隐蔽性和高内聚、低耦合的特点;◎允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;◎支持软件重用。只要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来;◎系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;◎允许对一些如吞吐量、死锁等属性的分析;◎支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行。缺点◎通常导致进程成为批处理的结构。这是因为虽然过滤器可增量式地处理数据,但它们是独立的,所以设计者必须将每个过滤器看成一个完整的从输入到输出的转换。◎不适合处理交互的应用。当需要增量地显示改变时,这个问题尤为严重。◎因为在数据传输上没有通用的标准,每个过滤器都增加了解析和合成数据的工作,这样就导致了系统性能下降,并增加了编写过滤器的复杂性。◎难以进行错误处理,管道/过滤器结构的固有特性,决定了很难制定错误处理的一般性策略实例:传统的编译器是管道/过滤器体系结构风格的一个实例这种风格建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。特点:1.对象是构件。2.在对象和对象之间,通过函数调用和过程调用来进行交互。面向对象风格优点◎一个对象对外界隐藏了自己的详细信息,改变一个对象的表示,不会影响系统的其它部分◎继承和封装方法为对象复用提供了技术支持。◎对象将数据和操作封装在一起,提高了系统内聚性,减小了模块之间的耦合程度,使系统更容易分解为既相互作用又相互独立的对象集合缺点:◎如果一个对象要调用另一个对象,则必须知道它的标识和名称◎会产生连锁反应,如果一个对象的标识发生改变,那么必须修改所有显式调用它的其它对象,并消除由此引发的副作用

构件不直接调用一个过程,而是触发或广播一个或多个事件。系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。特点:1.构件是模块,模块可以是过程也可以是事件的集合。2.连接件:往往是以过程之间的隐式调用(ImplicitInvocation)来实现的事件驱动风格例:观察者模式

publicinterfaceSubject

{

publicvoidattach(Observerobserver);

publicvoiddetach(Observerobserver);

voidnotifyObservers();

}

publicclassConcreteSubjectimplementsSubject

{

publicvoidattach(Observerobserver)

{

observersVector.addElement(observer);

}

publicvoiddetach(Observerobserver)

{

observersVector.removeElement(observer);

}

publicvoidnotifyObservers()

{

Enumerationenumeration=observers();

while(enumeration.hasMoreElements())

{

((Observer)enumeration.nextElement()).update();

}

}

publicEnumerationobservers()

{

return((Vector)observersVector.clone()).elements();

}

privateVectorobserversVector=newjava.util.Vector();

}

publicinterfaceObserver

{

voidupdate();

}publicstaticvoidmain(Stringargs[]){ Subjects=newConcreteSubject(); s.attach(newObserver(){publicvoidupdate(){ System.out.println("ok"); } }); s.notifyer(); }优点:◎事件声明者不需要知道哪些构件会响应事件,因此,不能确定构件处理的先后顺序,甚至不能确定事件会引发哪些过程调用◎提高了软件复用能力,只要在系统事件中注册构件的过程,就可以将该构件集成到系统中◎便于系统升级,只要构件名和事件中所注册的过程名保持不变,原有构件就可以被新构件所替代缺点:◎构件放弃了对系统计算的控制。一个构件触发一个事件时,不能确定其它构件是否会响应它。而且即使它知道事件注册了哪些构件的构成,它也不能保证这些过程被调用的顺序。◎数据交换的问题。有时数据可被一个事件传递,但另一些情况下,基于事件的系统必须依靠一个共享的仓库进行交互。在这些情况下,全局性能和资源管理便成了问题实例:1.Debugger2.在用户界面中分离数据和表示特点:分层系统采用多个层次组织,每一层必须起两个作用:(1)使用下层提供的功能。(2)为上层提供服务。分层风格publicinterfaceStudentDAO(){ListselectAll(){}StudentSelect(intid){}voidupdate(Students){}voiddelete(intid){}voidadd(Students){}}publicclassStudentDAOImpl(){}publicclassStudentBusiness{ StudentDaodao; publicStudent(StudentDaodao){ this.dao=dao } publicliststudentChoice(Listids){ Listlist=newArrayList(); for(inti=0;i<ids.size();i++){ intid=list.get(i);Students=dao.select(id); list.add(s); } returnlist;}优点◎支持基于抽象程度递增的系统设计,使设计者可以把一个复杂系统按递增的步骤进行分解;◎支持功能增强,因为每一层至多和相邻的上下层交互,因此功能的改变最多影响相邻的上下层;◎支持重用。只要提供的服务接口定义不变,同一层的不同实现可以交换使用。这样,就可以定义一组标准的接口,而允许各种不同的实现方法。缺点:◎并不是每个系统都可以很容易地划分为分层的模式,甚至即使一个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把一些低级或高级的功能综合起来;◎很难找到一个合适的、正确的层次抽象方法。实例:操作系统、数据库系统、计算机网络协议组数据共享风格也称为仓库风格,有两种不同类型的软件元素:一种是中央数据单元,也称为资源库,用于表示系统的当前状态,另一种是相互依赖的构件组,中央数据单元和构件之间可以进行信息交换,这是数据共享体系结构的技术实现基础数据共享体系结构风格根据所使用的控制策略不同,数据共享体系结构可以分为两种类型:一种是传统的数据库,另一种是黑板如果由输入流中的事件来驱动系统进行信息处理,把执行结果存储到中央数据单元中,则这个系统就是数据库应用系统如果由中央数据单元的当前状态来驱动系统运行,则这个系统就是黑板应用系统一个典型的黑板型数据共享系统包括以下三个部分:知识源:知识源中包含独立的、与应用程序相关的知识,知识源之间不直接进行通讯,它们之间的交互只通过黑板来完成。黑板数据结构:黑板数据是按照与应用程序相关的层次来组织的解决问题的数据,知识源通过不断地改变黑板数据来解决问题。控制:控制完全由黑板的状态驱动,黑板状态的改变决定使用的特定知识。黑板模式对于无确定性求解策略的问题比较有用,在专家系统中,这种模式应用的比较广泛。例:问题:设字符转换规则

A∧B→C A∧C→D B∧C→G B∧E→F D→E

已知:A,B

求:F一、综合数据库

{x},其中x为字符二、规则集

1,IFA∧BTHENC 2,IFA∧CTHEND 3,IFB∧CTHENG 4,IFB∧ETHENF 5,IFDTHENE三、控制策略 顺序排队四、初始条件

{A,B}五、结束条件

F∈{x}综合数据库可触发规则被触发规则A,B(1)(1)A,B,C(2)(3)(2)A,B,C,D(3)(5)(3)A,B,C,D,G(5)(5)A,B,C,D,G,E(4)(4)A,B,C,D,G,E,F1,IFA∧BTHENC 2,IFA∧CTHEND3,IFB∧CTHENG 4,IFB∧ETHENF5,IFDTHENE求解过程例:传教士与野人问题(M-C问题)

问题:

N个传教士,N个野人,一条船,可同时乘坐k个人,要求在任何时刻,在河的两岸及船上,传教士人数不能少于野人的人数。

问:如何过河。 以N=3,k=2为例求解。1.解决问题的多方法性:对于一个专家系统,针对于要解决的问题,如果在其领域中没有独立的方法存在,而且对解空间的完全搜索也是不可行的,在黑板模式中可以用多种不同的算法来进行试验,并且也允许用不同的控制方法。2.具有可更改性和可维护性:因为在黑板模式中每个知识源是独立的,彼此之间的通信通过黑板来完成,所以这使整个系统更具有可更改性和可维护性。优点:3.有可重用的知识源:由于每个知识源在黑板系统中都是独立的,如果知识源和所基于的黑板系统有理解相同的协议和数据,我们就可以重用知识源。4.支持容错性和健壮性:在黑板模式中所有的结果都是假设的,并且只有那些被数据和其它假设强烈支持的才能够生存。这对于噪声数据和不确定的结论有很强的容错性。1.测试困难:由于黑板模式的系统有中央数据构件来描述系统的体现系统的状态,所以系统的执行没有确定的顺序,其结果的可再现性比较差,难于测试。2.不能保证有好的求解方案:一个黑板模式的系统所提供给我们的往往是所解决问题的一个百分比,而不是最佳的解决方案。3.效率低:黑板模式的系统在拒绝错误假设的时候要承受多余的计算开销,所以导致效率比较低。缺点4.开发成本高:绝大部分黑板模式的系统需要用几年的时间来进化,所以开发成本较高。5.缺少对并行机的支持:黑板模式要求黑板上的中心数据同步并发访问,所以缺少对不并行机的支持。数据共享风格实例:专家系统、语音识别等在开发具有人机界面的软件系统时,比较适合使用模型-视图-控制器体系结构在MVC结构中,主要包括模型、视图和控制器:模型,是应用程序的核心,封装了问题的核心数据、逻辑关系和计算功能,提供了处理问题的操作过程视图,是模型的表示,提供了交互界面,为用户显示模型信息控制器,负责处理用户与系统之间的交互,为用户提供操作接口MVC体系结构风格MVC体系结构具有以下优点:多个视图与一个模型相对应,变化-传播机制确保了所有相关视图都能够及时地获取模型变化信息,从而使所有视图和控制器同步,便于维护具有良好的移植性,由于模型独立于视图,因此,可以方便地实现不同部分的移植系统被分割为三个独立的部分,当功能发生变化时,改变其中的一个部分就能够满足要求MVC体系结构风格也存在着一些问题:增加了系统设计和运行复杂性视图与控制器连接过于紧密,妨碍了二者的独立重用视图访问模型的效率比较低packagemypack;importcom.opensymphony.xwork2.ActionSupport;publicclassUserActionextendsActionSupport{ privateStringusername; privateStringuserpass;

publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetUserpass(){ returnuserpass; } publicvoidsetUserpass(Stringuserpass){ this.userpass=userpass; } @Override publicStringexecute()throwsException{ if("Mike".equals(username)&&"123".equals(userpass) ||"张三".equals(username)&&"abc".equals(userpass)) return"success"; else return"error"; }}<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""/dtds/struts-2.0.dtd"><struts><!--定义包管理配置的action继承struts-default.xml中的配置

--> <packagename="actions"extends="struts-default"><!--定义Action(login.action)--> <actionname="login"class="mypack.UserAction"><!--定义转发路径对应的字符串名

--> <resultname="success">/Success.jsp</result> <resultname="error">/Error.jsp</result> </action> </package></struts><!--过滤器类

--><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><!--过滤所有的url请求

--><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%><html>

<body><!--提交到action--> <formaction="login.action"method="post">

用户名:<!--参数名和action中的属性名一样

--> <inputtype=textname=username> <br>

码: <inputtype=passwordname=userpass> <br> <inputtype=submitname=submvalue="提交"> <inputtype=resetname=resetvalue="取消"> </form> </body></html>特征基于解释器风格的系统核心在于虚拟机。一个基于解释器风

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论