软件体系结构(SoftwareArchitecture)讲义九:软件框架构造技术及案例分析内容1.软件框架概述2.软件框架研究现状3.实例研究——SanFrancisco商业开发平台软件构造技术的发展创造性的活动60年代,汇编语言结构化方法70年代,面向功能,面向数据面向对象方法80年代,软件复用基于构件方法软件复用进一步发展…软件复用成为软件构造技术的研究热点软件复用技术(1/2)•软件复用是提高软件生产力和质量的一种技术,将已有软件的各种有关知识用于构造新的软件,以缩短软件开发和维护的花费代码级复用领域知识、开发经验、体系结构、需求、设计等的复用复用级别软件复用技术(2/2)•依据复用的组织方式–个别的(Ad-hoc)复用复用在个人–系统化的(Systematic)复用定义了复用过程和指南项目级别、特定领域抽象级别较高的产品复用•系统化复用对于提高软件的质量和生产率具有更大的作用,也有较大的风险软件框架概念的出现•Smalltalk-80开发环境中的框架Model-View-Controller(MVC),被认为是第一个得到广泛应用的框架•AppleInc.UserInterfaceFramework•之后出现了一系列框架产品:–Interview,ET++,Firealarmsystem,(Taligent)CommonPoint,(IBM)SanFrancisco等等•许多学者,包括Johnson,Pree,Bosch等对框架,尤其是面向对象框架展开了大量研究,包括框架设计、框架实现、框架描述、框架复用、框架演化等软件框架的概念•软件框架的定义和描述–定义1一个框架由一组协作类组成,阐明了整个设计、类间依赖及成员类的责任分布。[杨芙清,97]–定义2一个框架是有意义的相互协作的类的集合,它能够同时表达针对一个特定领域实现公共的需求和设计所需要的小尺度模式和主要机制。[Firesmith,94]–定义3框架是一种微体系结构,为特定领域内的软件系统提供未完全实现的模板。[Jacobson,Booch,99]–定义4框架是指一个部分完成的软件(子)系统,它将要被进一步实例化。框架定义了一个软件系统族的体系结构,并且提供了基本构造单元。框架同时定义了针对特定的功能,需要在哪里进行调整和修改。[Buschmann,96]–定义5一个框架是一个类的集合,它体现了针对解决相关问题家族的抽象设计。[Jacobson,Foot,88]–定义6一个应用框架,也称为类属应用(Genericapplications),是为特定应用领域提供可复用结构的协作类集合。[Gamma,95]软件框架的概念(续)•框架反映了一个领域内应用的软件体系结构,包括其组成成分、关系以及约束•框架同时定义了针对特定的功能需要在哪里进行调整和修改因此,软件框架•1.提供了创建具体应用的基本构造单元。•2.是一个部分完成的软件(子)系统,它将要被进一步实例化。框架的分类•框架的分类–根据应用范围分类•基础设施框架:GUI框架、语言处理框架…•中间件集成框架:ORB框架、消息中间件…•企业应用框架:SanFrancisco…–根据复用方式分类•白盒框架:MFC…•黑盒框架:Avalon项目…框架的特性——部分实现逐步实现,逐步具体化DSSA框架应用DSSA是框架的高层设计,框架是抽象应用框架的特性—“反向控制”HollywoodPrinciple:Don’tcallus.We’llcallyou.框架的特性—固定点和扩展点固定点用户扩展和定制扩展点对于面向对象框架而言,扩展点是抽象类框架特性相关概念•领域工程–框架体现了特定领域的需求,抽象了特定领域中一组应用系统的共性,因此领域分析是一种得到领域知识的较理想的方法•产品线–应用框架是软件产品线核心资产库的重要组成部分,框架的设计和生产属于产品线核心资产库建设的范畴•构件库–从软件构造的角度来讲,框架是一种大粒度的构件。–框架与构件库的区别•框架不仅仅是类的简单集合,而且定义了一个领域通用的高层设计•构件库的结构建立于构件分类基础之上,而框架则直接反映了问题域的结构相关概念•框架和体系结构–框架决定了应用系统的体系结构–一个框架可以被实例化成为多个应用系统,每个应用系统具有特定的体系结构,因此框架从框架使用的角度来看,框架和体系结构之间存在着1对多(1:N)的关系–从框架开发的角度来看,框架反映了一个领域的体系结构(DSSA),它是DSSA的一个实例,因此,DSSA和框架之间同样存在着1对多(1:N)的关系–从在软件开发过程中所起的作用而言,•体系结构是软件的高层设计抽象,它有助于系统开发团队之间的交流•DSSA是可以视为“参考”体系结构,对于领域内应用系统体系结构的设计具有指导意义•而开发框架最重要的目的则是针对特定领域的设计和代码复用相关概念•应用体系结构、DSSAApplication(N)Architecture(N)DSSA(1)Framework111n实例化领域工程n1n1相关概念•框架和软件开发过程–框架在整个软件开发过程中属于资产库建设的范畴,是领域设计和领域实现的重要制品之一–基于框架的软件开发活动可以分为•框架的设计和开发——框架开发阶段•基于框架定制应用系统——框架使用阶段•框架演化和维护阶段–设计和开发一个框架成本高,但是通过复用带来的效益也更加显著–框架本身是可复用资产,也有助于实现扩展部分的复用相关概念•框架和设计模式–从粒度上看,设计模式要小于框架,一个框架可以包括多个设计模式,但是设计模式不可能包括框架–框架要比设计模式更加特化,框架总是与特定的应用领域相关,而通常设计模式更加普通,可以应用任何的应用领域–框架的设计、实现以及描述利用了设计模式相关概念•框架与变化性控制–框架体现了领域共性–通过扩展点支持变化性应用程序框架构件构件构件构件构件构件构件领域不变部分可变部分内容1.软件框架概念2.软件框架构造技术3.实例研究——SanFrancisco商业开发平台软件框架构造技术•软件框架的开发过程模型•开发过程中的相关技术研究–领域分析–扩展点设计–框架实现和测试–框架的描述•框架的测试和维护•框架的演化–白盒黑盒框架VisualBuilder框架的开发•软件框架的开发过程模型领域分析领域模型,DSSA,标识变化性捕获框架需求识别框架问题域内的扩展点和固定点框架设计框架SA设计,扩展点设计,固定点设计框架实现和测试框架文档化应用分析应用设计应用实现新的需求、需求变化或更好的领域理解框架文档领域分析——共性和变化性•当在某个领域而不是单个系统考虑问题时,就会发现一些特性是领域中所有系统共同具有的,而其它特性只是个别系统具有–所有系统都具有的特性是该领域中系统的本质特性,体现为该领域中系统的共性–只是部分或者个别系统具有的特性则体现为领域中系统的变化性变化性分类•时间上的变化性和空间上的变化性–时间上的变化性:产品随着时间的变化•解决产品的演化问题–空间上的变化性:产品家族中产品间的区别•解决产品的复用问题•问题域的变化性和解空间的变化性–问题域的变化性主要来自于业务领域、客户、用户对领域应用系统需求的变化•业务策略:实现什么功能?–解空间的变化来自于系统设计、实现技术、系统运行环境的变化•实现机制:怎样实现功能?变化性分类(续)•变化性模式–必须的(Mandatory)需求:所有现有系统都具有这类需求–可选的(Optional)需求:部分现有系统具有这类需求,并非全部系统都具有–多选一的(Alternative):只能从多个变化项选择其中一个满足需求,这些变化项存在互斥关系–多选多的(MultipleParallelVariability):这些变化性之间不存在互斥的关系,可以同时存在•变化性维度–组织机构、数据、功能、过程——问题域–实现技术——解空间扩展点(1/3)•为什么需要扩展点–支持应用领域的变化性–提高框架的灵活性–提高框架的可复用性•什么是扩展点–扩展点是软件框架中针对应用需求的、支持适应性变更的的扩展机制–扩展点是定义良好的框架特性,可以通过特例化或者组装等扩展机制来满足特定应用的需求扩展点——OOF•面向对象框架中主要使用以下技术实现扩展功能–继承–组合–委托–参数化扩展点——OOF(续)•模板方法(Templatemethod):–定义不变流程–调用钩子方法–实现共性的领域知识•钩子方法(Hookmethod):–定义变化的部分–实现特定应用的特殊需求–定义为抽象方法扩展点——OOF(续)•元模式THhook1:1ConnectionPatternTHhooks1:NConnectionPatternTHhook1:1RecursiveConnectionPatternTHhooks1:NRecursiveConnectionPatternTHhook1:1RecursiveUnificationPatternTHhook1:NRecursiveUnificationPatternTHUnificationPattern扩展点——CBF•构件接口调用–接口定义和实现的分离-支持构件功能的特定行为、算法和实现–插件-支持特定算法和行为的动态加载和执行–构件的参数化-支持构件对事件和状态变化的响应扩展点——CBFSocketPlugDoMethod1PlugDoMethod2Applicationcomponent构件Framework角色/构件绑定AbstractcomponentParameterbinderTemplateFrameworkComponentParameter插座-插件模板抽象构件外观FacadeFrameworkComputationalComponentComputationalComponent扩展点——CBF•构件组装–参数化组装:运行参数、配置文件、脚本程序–消息机制:消息中间件–代理:桩方式、适配器、容器、WebService机制扩展点——CBFFrameworkComponentApplicationComponentScriptExecuterScriptInterpreterScriptCreatorScript消息的发送和接收MessagebrokerFrameworkcomponentApplicationComponent应用构件部署描述服务器连接管理,安全性事务管理生命周期管理通信管理服务注册器服务接口规约服务实现规约查找服务接口服务请求者生成服务代理服务提供者绑定服务查找交互活动制品注册脚本消息机制WebServices容器小结——OOF和CBF的不同•面向对象框架–机制:面向对象技术的多态和继承机制–复用方式:通过继承框架中的抽象类来完成特定行为的定制,白盒复用–问题:框架的过度增值、脆弱的基类和隐式体系结构•基于构件的框架–机制:构件接口调用、构件组装等–复用方式:通过一些集成机制得到对象或者构件的不同组装,来定义特定行为的,黑盒复用框架描述语言(1/6)•框架文档必须包含的内容–框架的目的•明确框架针对的问题域,以及框架为问题域的哪些问题提供了解决方案–如何使用框架•框架得到正确使用并发挥最优效果的关键所在–应用实例•阅读实例是理解框架主要结构的方法•框架使用者可以从一组实例中看出框架的边界和不足–框架的设计描述•表达框架的整体体系结构和扩展点的设计细节框架描述语言(2/6)•CookBook途径–类似“菜谱”的、一步一步讲述如何使用框架–使用自然语言,举例说明框架的使用,易于理解–对框架设计的描述不充分–MVCCookBook方法、MacAppCookBook方法、ActiveCookBook方法框架描述语言(3/6)•模式途径–主题(Motif)方法•每一个主题描述一个待解决的问题,给出不同的解决方案•适合描述框架如何被使用–面向对象设计模式方法•面向对象设计模式描述了部分的面向对象设计,并不适合表达一个面向对象框架的完整设计框架描述语言(4/6)•结构化语言途径–框架描述语言(FDL)-类似