软件复用计算机与信息学院Copyright2015硕士研究生课程计算机与信息学院2015.11软件构件技术软件复用计算机与信息学院Copyright2015硕士研究生课程一、软件构件二、软件构件模型三、基于构件的软件开发方法主要内容软件复用计算机与信息学院Copyright2015硕士研究生课程一、软件构件互联网时代,软件规模上升,给软件开发带来了许多的问题:⊿技术和需求的变化的问题⊿软件难以维护问题⊿重复不必要的工作问题⊿软件质量和成本有效性问题⊿应用集成的问题……软件开发中的问题而构件技术为解决以上问题的提供了有效途径。可复用的构件,特别是满足大问题空间的可复用构件,在捕获软件变化性、提高软件的可理解性和维护性、增强软件质量属性同时,可大大提高生产率。软件复用计算机与信息学院Copyright2015硕士研究生课程在可执行代码上的复用可以减少影响源代码的量,进而提高可维护性CBD软件开发复用的益处当需求变化时,CBD有助于定位需求的改进部分构件对系统的划分使得重构变得容易一些CBD有助于逐渐的增量式的应用集成有利于构件成分替换式的软件升级更有利于应用构架(软件体系结构)的良好迁移系统的开发模式:从程序编制变为构件组装软件复用计算机与信息学院Copyright2015硕士研究生课程在一个整体的概念和框架下,而不是在随意的方式下定义一个构件,以便增大复用的机会构件设计的上下文无关:构件在新的环境中被使用时,无须将使用它的构件一起牵制过来变化影响局部化:变化影响代码局限在一个小的范围内构件应符合高内聚、低偶合服务目标定义要单一:为了减少调用的次数,最好不要定义一个服务来处理附加的服务让服务的接口保持最小服务的命名能清晰地表达它要做的事:即“宾语+动词”的命名形式更有利于人们找到相关的服务。软件复用的原则软件复用计算机与信息学院Copyright2015硕士研究生课程一、软件构件软件危机软件工程工业化生产软件复用软件构件Component复用的核心概念和基本单元软件复用计算机与信息学院Copyright2015硕士研究生课程什么是软件构件?一、软件构件构件概念的演化Microsoft的MFCBorland的VCLSun的Java类库C++的STL1968年NATO会议上Mcllroy首次提出软件构件的概念发表论文“Mass-ProducedSoftwareComponents”借鉴自传统行业基于标准零组部件组装的生产模式“Component”一词的翻译:“构件”与“组件”代码件:可复用的程序代码片断子程序:程序语言、编译器、用户开发的过程或函数模块、程序包:将逻辑相关的实体组成一个集合类:开发工具、用户开发的类代码模板:参数化数据类型,对函数或类的更高的抽象软件复用计算机与信息学院Copyright2015硕士研究生课程P1-1、软件构件的概念构件概念的演化可复用软件构件(RSC):可以被复用的软件实体,它可以是设计、代码或软件开发过程中的其它产品(广义理解),有时也被称为软件资产。分析件和设计件的基本形态:设计模式:对经常出现的问题的一类通用解决方案,是经验的总结框架:可复用设计,由一组抽象类及其实例间协作关系组成软件体系结构:描述构件、外部可见属性和构件之间的关系复用分为:直接复用和间接复用代码件倾向于直接复用,分析件、设计件侧重间接复用对复用的理解更广,出现了:分析件、设计件、测试件等软件复用计算机与信息学院Copyright2015硕士研究生课程P1-1、软件构件的概念构件概念的演化软件构件:是一个具有规范接口和确定的上下文依赖的组装单元,它能够被独立部署和被第三方组装1996ECOOP(EuropeanConferenceonObject-OrientedProgramming)的定义软件构件是可单独生产、获取、部署的二进制单元,它们之间可以互相作用构成一个功能系统Szyperski的定义构件:①是一个不透明的功能实现;②能够被第三方组装;③符合一个构件模型CMU/SEI的定义出现常见的三大构件标准——CORBA、COM、EJB定义软件复用计算机与信息学院Copyright2015硕士研究生课程一、软件构件1、构件的概念定义1:一个软件构件是一个可独立交付的软件单元,封装了设计和实现的内容,并向外提供接口,通过接口与其它构件组装成更大的整体;定义2:一个软件构件是一个仅通过契约化的接口和显式的语境依赖进行组装的单元,能够被独立地部署和由第三方组装;定义3:一个构件是体现一个目标问题域的语义,并独立于复杂的实现技术;定义4:一个构件代表一个自包含(Self-Contained)的实体,能够向其环境输出功能并可通过定义明确的开放的接口从环境输入功能;定义5:一个构件由一个动态变化的对象集组成,这些对象既可以在构件的内部也可能是其接口的一部分。构件间既可以直接交互,也可以通过独立的对象进行胶合。这是从对象实现技术的角度给出的构件定义;定义6:一个通过接口向外提供服务的软件包。这是Microsoft的技术文档给出的定义。软件复用计算机与信息学院Copyright2015硕士研究生课程上述定义的共同要素是:软件构件是可以独立交付、发布的二进制功能单元,符合构件模型(或具有规范接口),不同构件开发机构开发的构件能够按应用的需要进行组装。构件具有多种形态类、类树、框架、构架等构件具有多种层次分析件、设计件、代码件、运行件等构件需要多方面描述名称、属性、对外接口、所需接口等软件复用计算机与信息学院Copyright2015硕士研究生课程对软件构件概念的理解狭义的构件–软件系统中具有相对独立功能、可以明确辨识、接口由契约指定、和语境有明显依赖关系、可独立部署、且多由第三方提供的可组装软件实体。–既包括以EJB,COM/DCOM,ActiveX,WebServices等形式存在的可运行二进制程序,也包括经过封装的源代码程序。广义的构件–随着对软件复用理解的不断深入,软件构件概念的外延也在扩展。–从构件实体到需求规约、系统构架、设计文档、测试案例等各种具有复用价值的软件资源都可称为构件。软件复用计算机与信息学院Copyright2015硕士研究生课程构件的理解实现定义了对象怎样工作,同一类对象共享同一个实现对象封装了数据和操作的实体标识每个对象都有一个唯一标记,通过它来访问这个对象可替换性对象的使用者只关心接口,不关心实现,客户代码可以和具有相同接口而具有不同实现的对象一起工作接口定义了对象的功能,很多对象可以共享同一个接口,一个对象可以提供很多接口对象接口接口实现实现对象对象对象软件复用计算机与信息学院Copyright2015硕士研究生课程构件环境构件接口构件的理解构件构件可认为是包装对象实现的简便方法,可以使它们组装成更大的软件系统。构件和对象接口接口实现对象对象接口实现对象软件复用计算机与信息学院Copyright2015硕士研究生课程构件的理解构件的五要素规格说明:构件提供服务的抽象描述,用作服务的客户方和提供方之间的契约for(inti=0;i10;i++){trans.addElem();}实现:必须符合规格说明,各自实现受约束的构件标准:符合某种构件模型部署方法:构件可以部署多个实例包装方法:按不同的方式分组来提供一套可以替换的服务(包),可在构件支持环境中注册软件复用计算机与信息学院Copyright2015硕士研究生课程•软件构件是一个可以独立开发与交付的软件单位,符合构件模型(或具有规范接口),向外界(如应用框架、其他构件或最终用户)提供服务。不同的构件开发机构开发的构件能够按需要进行组装。•构件应该具有以下属性:有用性、可用性、质量、适应性、可移植性。•构件应该具备以下几个特征:自描述可定制可集成连接机制构件必须能够识别其属性、存取方法和事件,这些信息可以使开发环境将第三方软件构件无缝地结合起来提供一个典型的图形方式环境,软件构件的属性只能通过控制面板来设置构件必须可以被编程语言直接控制。构件也可以和脚本语言连接或者与从代码级访问构件的环境连接构件必须能产生事件或者具有让程序员从语义上实现相互连接的其他机制软件复用计算机与信息学院Copyright2015硕士研究生课程构件的表现(1)打包角度(Packaging):将构件作为发布、提交的单位。强调构件是一组单元,可以作为整体被复用;(2)服务角度(Service):将构件作为功能的提供者,看成向消费者提供服务的软件实体。同时强调了提供者和消费者之间的协议概念。(3)完整性角度(Integrity):将构件看成一组软件共同维护它所操作数据的完整性,独立于其它构件的执行。这一标准是构件易于更新的必要条件。这里强调的是软件替换的概念包装包装构件模型元素服务构件独立构件构件规格说明接口**服务完整性***1软件复用计算机与信息学院Copyright2015硕士研究生课程实例•包装部分是:excel.exe•提供服务的构件:如应用程序、图表、表格。每一个都是独立的构件,提供了一个包装界限.每个都可独立替换。•构件之中还有子构件.如表格构件包括“范围”和“单元”构件,但它们在实现和数据上存在共享,因而不能独立替换软件复用计算机与信息学院Copyright2015硕士研究生课程构件的分类(1/2)包装服务完整性文件、文档、目录源代码文件类库模板、表可执行文件动态链接库数据库服务操作系统服务函数库系统实用工具单独的API函数COM类数据库操作系统框架ActiveX控件JavaApplet应用程序完整的API函数软件复用计算机与信息学院Copyright2015硕士研究生课程构件的分类(2/2)•纯计算构件:具有简单的输入/输出关系,无运行状态的变化。如数值计算、过滤器、转换器等•存储构件:存放共享的、永久性的数据。如数据库、文件、符号表、超文本等•管理构件:执行的操作与运行状态紧密耦合。如抽象数据类型、服务器、对象•控制构件:管理其他构件运行的时间、时机及次序。如调度、同步器等•链接构件:在实体之间传递信息。如通信机制、用户界面等软件复用计算机与信息学院Copyright2015硕士研究生课程软件复用计算机与信息学院Copyright2015硕士研究生课程软件复用计算机与信息学院Copyright2015硕士研究生课程2.软件构件及性质构件是一个可独立开发和交付的软件单位,其设计和实现封装在一起,通过接口向外界(应用框架、其它构件或最终用户)提供服务。(1)复用(Reusability),复用是构件存在的意义,也是研究构件技术的目的和发展驱动力;(2)封装(Capsulizability),构件是一个自包含的实体,封装了设计和实现细节,仅通过接口与外界交互;(3)定制(Customizabiltiy),构件可按照不同的应用需求进行定制,定制是构件组装必不可少的步骤。(4)组装(Compositability),构件通过组装可以形成更大的整体(应用系统),组装是实施复用的手段。软件复用计算机与信息学院Copyright2015硕士研究生课程3、构件的获取构件的获取方式从构件库中获取从市场上购买获取(商业构件,即COTS构件)从遗留系统中获取重新开发获取直接获取(构件库中或购买来直接使用)适应性获取(对构件库或购买来的构件做适应性修改以便满足要求,包括基于遗留系统的构件提取)重新制作软件复用计算机与信息学院Copyright2015硕士研究生课程构件的获取步骤获取构件一般要经历构件的筛选、评估符合程度并确定改动之处、最终获取构件四个阶段。软件复用计算机与信息学院Copyright2015硕士研究生课程P1-2、面向构件构件的获取步骤寻找构件:从构件库/市场/因特网等渠道,确定一定数量的构件。去掉一些候选者,使候选构件的数量清单缩短到可管理的范围。初步评估:根据构件信息(供应商提供的、或构件库提供的等),在非正式的基础上,采用相应的机制进行评估。评估机制可自己确定,如采用“是/否”的评分表机制、权重评估机制等听取