3.3调用/返回体系结构风格•Garlan和Shaw经典体系结构风格的分类•Mainprogramandsubroutine主程序-子过程风格•OOsystems面向对象的风格•LayeredSystems层次结构风格调用/返回体系结构风格主程序-子过程风格EvolutionofProgramDesign1950s-1960s1970s-1980s1990’s-“simple”programmodelsZenithofstructuredprogramming-especiallyPascal.Firstobject-orientedlanguages(espC++)traditionallanguages“converted”toOOPCOBOL,Algol,BASICPascal,C,Fortran,PerlAda,C++,JAVA,SmallTalkVisualBasic,Delphi(ObjectPascal),Perl5,(e.g.BioPerl)Examples主程序-子过程风格•Unstructuredprogramming•Alltheprogramcodewritteninasinglecontinuousmainprogram(所有的程序代码均包含在一个主程序文件中).•Disadvantagesforlargeprograms(缺陷):•difficulttofollowlogic(逻辑不清)•ifsomethingneedstobedonemorethanoncemustbere-typed(无法复用)•hardtoincorporateothercode(难以与其他代码合并)•noteasilymodified(难于修改)•difficulttotestparticularportionsofthecode(难以测试特定部分的代码)非结构化的程序•任务分解结构化程序:自上而下的设计ProblemTask1Task2Task3high-levelsubtasksmoreprimitivesubtasksindividualstatements主程序过程1过程2过程n•Thesystemisdesignedfromafunctionalviewpoint,startingwithahigh-levelviewandprogressivelyrefiningthisintoamoredetaileddesign(从功能的观点设计系统)•ThismethodologyisexemplifiedbyStructuredDesignandstep-wiserefinement(结构化设计与逐步细化是这种风格的典型实例)•Hierarchicaldecomposition(逐层分解):•Basedondefinition-userelationship(基于“定义—使用”关系)•Usesprocedurecallasinteractionmechanism(用过程调用作为交互机制)•Correctnessofasubroutinedependonthecorrectnessofthesubroutinesitcalls(主程序的正确性依赖于它所调用的子程序的正确性)结构化程序:逐层分解•Mainprogramandsubroutine主程序-子过程风格•基本构成•Component(构件:主程序、子程序)•Mainprogramandsubroutines,hierarchicallydecomposingaprogram•Connector(连接器:调用-返回机制)•Call-returnmechanism,eachcomponentgetcontrolanddatafromitsparentandpassittochildren.•Topology(拓扑结构:层次化结构)•Hierarchicalstructure•本质:将大系统分解为若干模块(模块化),主程序调用这些模块实现完整的系统功能。主程序-子过程风格•特点•基于定义-使用关系•用过程调用作为交互机制•主程序的正确性依赖于它所调用的子程序的正确性•实例:RPC(如JavaRMI)•系统被分解成若干部分,分别运行于通过网络连接的各台计算机上•目标是要通过将运算分布到多台计算机上来充分利用多台处理器,最终达到提高系统性能的目的主程序-子过程风格•优点与缺点•Advantage:•Thishasprovedtobeahighlysuccessfuldesignmethodology.Ithasallowedthedevelopmentoflargeprograms(100,000linesormoreofsourcecode).(已被证明是成功的设计方法,可以被用于较大程序)•Disadvantages:•However,asprogramsizeincreasesbeyondthispoint(100,000lines),theapproachperformspoorly.(程序超过10万行,表现不好)•Weobservethatcodedevelopmentbecomestooslowandthatitbecomesincreasinglydifficulttotestthesoftwareandguaranteeitsreliability.(程序太大,开发太慢,测试越来越困难)主程序-子过程风格面向对象风格•概述•面向对象风格集数据抽象、抽象数据类型、类继承为一体,使软件工程公认的模块化、信息隐藏、抽象、重用性等原则在面向对象风格下得以充分实现。•应用场合•面向对象的体系结构模式适用于数据和功能分离的系统中,同样也适合于问题域模型比较明显,或需要人机交互界面的系统。大多数应用事件驱动风格的系统也常常应用了面向对象风格面向对象风格•Thesystemisviewedasacollectionofobjectsratherthanasfunctionswithmessagespassedfromobjecttoobject.(系统被看作对象的集合)•Eachobjecthasitsownsetofassociatedoperations(每个对象都有一个它自己的功能集合。数据及作用在数据上的操作被封装成抽象数据类型——对象)•Objectisalsocalledabstractdatatype(ADT).•数据抽象风格(ADT)是特殊的面向对象风格,ADT只有封装特点,而没有继承和多态特点面向对象风格•将逻辑上的实体映射为对象,实体之间的关系映射为对象之间的应用关系。•对象利用应用关系来访问对方公开的接口,完成某个特定任务;一组对象之间相互协作,完成总体目标。面向对象风格设计MainProgram/SubroutineVS.OO存款取款利息结算账户余额账户余额存款取款利息结算银行账户对象外部消息Informationhidding(信息隐藏)encapsulationbasedonhidingofdesign“secrets”(内部的设计决策被封装起来)在面向对象风格中,信息和内部的设计决策都被封装•Component:classesandobjects(OO风格的构件是:类和对象)•Connectors:objectsinteractthroughfunctionandprocedureinvocations.(连接件:对象之间通过功能与函数调用实现交互)OO基本构成类的内部结构:属性和操作•属性(Attribute):描述对象静态特性的数据项;•操作(Operation):描述对象动态特性的一个动作;类的内部结构:属性和操作规格说明层次分析层次设计层次类名属性操作OO的特点•Interaction:Viaprocedurecallsorsimilarprotocol(交互:通过过程调用或类似的协议)•Encapsulation:Restrictaccesstocertaininformation(封装:限制对某些信息的访问)•Inheritance:Keeponedefinitionofsharedfunctionality(继承:对共享的功能保持唯一的接口)•Dynamicbinding:Determineactualoperationtocallatruntime(动态绑定:运行时决定实际调用的操作)•Polymorphism:Choosethemethodatrun-time(多态:在运行时选择具体的操作)•Reuseandmaintenance:Exploitcapsulationandlocality(复用和维护)•对象抽象使组件和组件之间的操作以黑箱方式进行•封装性使细节内容对外部环境得以良好的隐藏。对象之间的访问是通过方法调用来实现的•考虑操作和属性的关联性,封装完成了相关功能和属性的包装,并由对象进行管理•使用某个对象提供的服务并不需要知道服务内部如何实现OO的特点面向对象风格优点•高度模块性•数据与其相关操作被组织为对象,成为模块组织的基本单位•封装功能•一组功能和其实现细节被封装在一个对象中,具有功能的接口被暴露出来•代码共享•对象的相对独立性可被反复重用,通过拼装形成不同的软件系统•灵活性•对象在组织过程中,相互关系可以任意变化,只要接口兼容•易维护性•对象接近于人对问题和解决方案模型的思维方式,易于理解和修改面向对象风格不足面向对象风格最大的不足在于如果一个对象需要调用另一个对象,它就必须知道那个对象的标识(对象名或对象引用),这样就无形之中增强了对象之间的依赖关系。如果一个对象改变了自己的标识,就必须通知系统中所有和它有调用关系的对象,否则系统就无法正常运行。?DisadvantagesofOO•Managementofmanyobjects:Needstructureonlargesetofdefinitions(管理大量的对象:怎样确立大量对象的结构)•Inorderforoneobjecttointeractwithanother(viaprocedurecall)itmustknowtheidentityofthatobject.(必须知道对象的身份)•对比:在管道-过滤器系统中,一个过滤器无需知道其他过滤器的任何信息•Inheritanceintroducescomplexityandthisisundesirable,especiallyincriticalsystems(继承引起复杂度,关键系统中慎用)分层风格层次结构•层次化早已经成为一种复杂系统设计的普遍性原则;•分层模式在现实生活中很常见:•社会;•公司;核心层中间层应用层各种构件过程调用LayeredSystem•Alayeredsystemisasysteminwhich•componentsaregrouped,i.e.,layered,inahierarchicalarrangement(在层次系统中,系统被组织成若干个层次,每个层次由一系列构件组成)•lowerlayersprovidefunctionsandservicesthatsupportthefunctionsandservicesofhigherlayers(下层构件向上层构件提供服务)•higherlayersservesasaclienttothelayerbelow(上层构件被看作是下层构件的客户)LayeredSystem•LayeringPrinciples(分层原则)•Separationofconcerns(分离关注),Breakyourapplicationintodistinctfeaturesthatoverlapinfunctionalityaslittleaspossible.•Abstraction(抽象),Concentratingontheessential,forceouttheirrelevant.•Hiding(隐藏),Restr