基于案例的软件构造教程(第2版) 课件 09基于复用的软件构造_第1页
基于案例的软件构造教程(第2版) 课件 09基于复用的软件构造_第2页
基于案例的软件构造教程(第2版) 课件 09基于复用的软件构造_第3页
基于案例的软件构造教程(第2版) 课件 09基于复用的软件构造_第4页
基于案例的软件构造教程(第2版) 课件 09基于复用的软件构造_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

第9章

基于复用的软件构造第9章基于复用的软件构造首先学习软件复用的基本概念、分类及开发方式。然后学习三种复用:程序库、设计模式和框架。通过具体的编程实现学习三种设计模式;通过分析Junit学习框架与应用;通过两个开源软件API、对案例实现基于程序库的复用开发。最后,简介开发案例其他形态软件的相关框架。2016秋数据科学与软件工程学院2第9章基于复用的软件构造故事10(1)把习题转成word格式输出,以便他用;(2)用柱状图、饼图等显示一个人练习多套习题的结果,便于分析;(3)让用户通过浏览器得到习题,在线练习后提交,等待习题返回评分结果;(4)编写可以直接在手机上练习口算的程序。一是在现有程序基础上增添的功能;二需要重新开发软件,更准确地说是更换开发平台、更换软件架构。2016秋数据科学与软件工程学院3第9章基于复用的软件构造9.1软件复用9.2设计模式9.3框架9.4案例分析与实践9.5讨论与提高9.6思考与练习题2016秋数据科学与软件工程学院49.1软件复用软件复用,是指在两次或多次不同的软件开发过程中重复使用相同或相近的软件或软件模块的过程。该软件可以是已经存在的软件,也可以是专门的可复用软件,简称(软)构件。软件复用是在软件开发中避免重复劳动的解决方案,使得应用系统的开发不再采用一切“从零开始”的模式,而是在已有工作基础上,充分利用过去应用系统开发中积累的知识和经验,从而将开发的重点集中于应用的特有构成成分上。2016秋数据科学与软件工程学院59.1软件复用软件复用具有如下优点。(1)提高生产率。(2)减少维护代价。(3)提高互操作性。(4)支持快速原型。2016秋数据科学与软件工程学院69.1软件复用软件复用也面临挑战,主要如下。软构件与应用系统之间的差异。软构件要达到一定的数量,才能支持有效的复用,而建立软构件库要有很高的投入和长期的积累。难以发现合适的软构件。基于复用的软件开发方法和软件过程是一个新的研究实践领域,需要一些新的理论、技术及支持环境,目前这方面的研究成果和实践经验都不够充分。2016秋数据科学与软件工程学院79.1软件复用依据复用的对象,软件复用分为两种。产品复用。指复用已有的软构件,通过构件集成(组装)得到新系统。产品复用是目前复用的主流途径。过程复用。指复用已有的软件开发过程,使用可复用的应用生成器来自动或半自动地生成所需系统。过程复用依赖于软件自动化技术的发展。2016秋数据科学与软件工程学院89.1软件复用9.1.1软件产品复用9.1.2基于复用的软件开发9.1.3程序库2016秋数据科学与软件工程学院99.1.1软件产品复用软件产品的复用包括代码、设计、测试数据和需求规格等。代码复用是最基本、最普通的软件复用形式,包括可执行代码和源代码。可执行代码和源代码称为软构件或构件。人们把一些相关的可复用的程序编译、打包、压缩在一个程序库,方便使用。2016秋数据科学与软件工程学院109.1.1软件产品复用设计文件是设计决策的通用表示,其本质是捕获的设计/解决问题的知识。与代码不同,设计不可执行。与需求规格不同,设计捕获结构信息而非功能信息。设计表示成用不同方式产生具体设计的模式。不像函数或模块,设计不能用其功能特性检索,而是通过设计解决的一组问题的特性来检索。2016秋数据科学与软件工程学院119.1.1软件产品复用设计复用有三种基本途径:第一种途径是从现有系统的设计结果中提取一些可以复用的设计构件,并把它们直接应用到新系统的设计中;第二种途径是把一个现有系统的全部或部分设计结果用新的语言或在新的平台上重新实现;第三种途径是综合现有系统,或者根据需求重新开发一些专门用于复用的设计构件。2016秋数据科学与软件工程学院129.1.1软件产品复用设计构件分为构件级和架构级。软件体系结构定义了作为一组执行数据的构件聚合体的软件系统的结构。构成体系结构的结构元素比程序设计语言的结构元素更加抽象,具有不同的性质。它们规定了信息流、控制流或构件之间的通信协议。体系结构用特殊符号表示,用体系结构特征检索。可复用的软件体系结构通常是显式地复用软件体系结构,并通过集成其他软件体系结构,建立新的更高层次的体系结构。最常用的可复用设计是设计模式和架构模式。2016秋数据科学与软件工程学院139.1.1软件产品复用测试数据和测试代码是典型的可复用件。测试数据的表示直截了当,检索测试数据的方式可以是软件系统输入域的描述,也可以是该系统功能的某个通用特征。测试代码的表示和检索同普通的逻辑代码一样。2016秋数据科学与软件工程学院149.1.1软件产品复用需求规格是提取用户需求、用某种符号记录用户需求的结果。规格书可以用自然语言表示,也可以用形式化符号(一阶逻辑、公理系统、形式化语言)或混合式。规格书可以通过它们俘获的功能特性检索,也可以复用在构建复合规格书。2016秋数据科学与软件工程学院159.1.1软件产品复用可复用件必须组织成复用库,以便方便地使用。要有效地使用复用库,必须清楚地理解库的内容,这样才能决定库能否满足需求。库的内容有不同的组织和定义方式,可以分为三种类型。(1)通用构件。(2)特殊领域构件。(3)特殊应用代码。2016秋数据科学与软件工程学院169.1.2基于复用的软件开发软件复用必须解决三个基本问题:(1)必须有可复用的对象;(2)所复用的对象必须是有用的;(3)复用者要知道如何使用被复用的对象。2016秋数据科学与软件工程学院179.1.2基于复用的软件开发基于复用的软件开发改变了传统的软件开发过程和技术,它包括两个相关的过程:(1)可复用软构件的开发(DevelopmentforReuse)或面向复用的软件开发,是产生软件资产的过程,称为领域工程;(2)基于软构件的应用系统构造(集成和组装)(DevelopmentwithReuse)或基于复用的软件开发,是使用软件资产生产新系统的过程,也称为应用工程。领域工程是应用工程的基础,它的目标是建立可复用的软构件库。2016秋数据科学与软件工程学院189.1.2基于复用的软件开发基于复用的软件开发,首要任务是把用户需求转换成系统规格,特别是要按照可复用构件修改系统规格。系统设计的核心是软件体系结构。设计要依据已有的构件,在系统规格、应用架构和可获得的构件之间做出妥协和平衡。其中关键的一步是根据系统规格、软件架构和系统设计,查找可复用的软构件。最后,把可复用构件及开发的软件部分,按照软件架构组装起来。最常见的方式是使用集成语言(如脚本语言Python、Unixshell、TCL/TK)把构件“粘合”起来或粘合到框架上,最终得到应有软件。2016秋数据科学与软件工程学院199.1.2基于复用的软件开发基于复用的软件开发面临一系列挑战:(1)确认复用任务及其完成这些任务的技术;(2)提供方法学和工具支持完成任务;(3)把复用任务集成到一个软件开发的工作流程。2016秋数据科学与软件工程学院209.1.2基于复用的软件开发复用任务可能是用高级语言(领域语言)说明待开发应用的规格,尽可能地复用已有的构件合成满足一组需求的应用系统。对于目标系统的任何部分,开发者必须:(1)以支持获取可能的、有用的可复用件的方式表达这一部分的需求;(2)理解获取的软构件;(3)如果得到的软构件足够接近需求,并且具有达到足够的质量,就可以采用它。2016秋数据科学与软件工程学院219.1.2基于复用的软件开发在复用过程,理解软构件和程序是一项重要的脑力工作和成本因素。软构件理解意味着三个因素:(1)理解它的功能;(2)理解它的工作方式;(3)理解如何修改它使其以一点不同的方式完成。2016秋数据科学与软件工程学院229.1.3程序库程序库是软件复用最基本、最普通形式。程序库是一些经常使用、经过检验的规范化程序或子程序的集合。程序库中的程序是经常使用的功能。程序库通常是编译后的二进制可执行码或虚拟机可执行码,把它们放到目录中,设置环境变量,在程序中引入后就可以如同普通函数、对象、类等一样编程使用。2016秋数据科学与软件工程学院239.1.3程序库过程式语言(如C)的程序库主要是各种函数。面向对象语言的程序库统称为类库,实质是一个综合性的面向对象的可重用类型集合,包括接口、抽象类和具体类。程序库可以是语言系统内置的,也可以是第三发独立开发的。2016秋数据科学与软件工程学院249.1.3程序库不同语言打包和引用库的形式略有不同。在程序中引用库的关键字有include、using、import、with等。除了可以引用相同语言的库外,现在的编程语言也允许引入其他语言的库,最常见的是C语言的库。使用第三方开发的程序库与使用系统的程序库,本质上没有区别。通常是理解API设计、查阅API使用方式、学习示范代码及不断练习实践。2016秋数据科学与软件工程学院259.1.3程序库程序库不同于软件包。软件包是指具有特定功能,用来完成特定任务的一个或一组程序。软件包由一个基本配置和若干可选部件构成,可以是源代码或目标码形式。软件包本质上就是一个可以运行的软件,可以打包、压缩,便于发布。经过安装、配置,就可以使用软件包提供的功能和服务。一般而言,软件包不作为可复用件而在软件开发中使用、不能集成到开发的软件中。2016秋数据科学与软件工程学院269.2设计模式9.2.1基本概念9.2.2基本设计模式目录9.2.3设计模式举例2016秋数据科学与软件工程学院279.2.1基本概念设计模式(DesignPattern)是对给定环境下反复出现问题的一个通用的、可复用的解决方案。它是可以在很多不同场合用以解决问题的一种描述或样板。模式是程序员在设计一个软件或系统时解决共同问题最佳实践的正式描述。面向对象的设计模式表示类或对象之间的关系与交互,没有说明涉及的最终应用软件的类或对象。一个设计模式不是一个可以直接转换成代码的完成的设计。2016秋数据科学与软件工程学院289.2.1基本概念设计模式涉及的抽象和应用的范围很广。体系结构模式描述了很多可以用结构化方法解决的设计问题。数据模式描述了重现的面向数据的问题及用来解决这些问题的数据建模解决方案。构件模式,即设计模式,涉及与开发子系统和构件相关的问题、它们之间相互通信的方式及它们在一个较大的体系结构中的位置。界面设计模式描述公共用户界面问题及具有影响因素(包括最终用户的具体特征)的解决方案。2016秋数据科学与软件工程学院299.2.1基本概念设计模式有如下优势:设计模式在软件开发中提供了一种公共的词汇和理解;设计模式是软件设计建立文档的一种手段;设计模式通过支持软件的功能属性和质量属性来构造软件;设计模式有助于建立一个复杂的和异构的软件结构;设计模式有助于管理软件的复杂度。2016秋数据科学与软件工程学院309.2.2基本设计模式目录基本的设计模式分为创建型模式、结构型模式和行为型模式三种。2016秋数据科学与软件工程学院319.2.3设计模式举例一个模式描述了一个问题,使用户能够理解问题所处的环境,并列出了影响因素,用来表明在环境中如何解释这个问题,以及如何应用解决方案。描述设计模式的方式不完全一样,基本内容包括模式名称、解决的问题、设计元素及其之间的交互(通常用UML的类图描述类及其关系,用时序图描述交互关系)、应用场景、特点分析、实际例子等。2016秋数据科学与软件工程学院329.2.3设计模式举例1.工厂方法模式问题描述:在一个图形编辑器中,可以绘制直线line、矩形square、圆circle等各种图形shape。不同的图形的绘制draw是不同的,但是画笔对所有图形都统一使用draw。以后可能会修改某个具体图形的绘制方式(编码实现),也可能还要增添不同的图形。为了便于软件的维护和扩展,如何设计?2016秋数据科学与软件工程学院339.2.3设计模式举例解决方案:定义一个用于创建对象的接口或抽象类,让子类根据条件或参数决定实例化哪一个类或调用哪一个方法。工厂方法模式使一个类的实例化延迟到其子类。2016秋数据科学与软件工程学院349.2.3设计模式举例工厂方法模式结构:工厂(Factory)是工厂方法模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。抽象产品(Product)是所创建的所有对象的父类,它负责描述所有实例共有的公共接口。具体产品(ConcreteProduct)是工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。2016秋数据科学与软件工程学院359.2.3设计模式举例2016秋数据科学与软件工程学院369.2.3设计模式举例工厂方法模式的核心思想是:有一个专门的类来负责创建实例的过程。它把产品视为一系列的类的集合,这些类是由某个抽象类或接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。如果工厂方法模式所涉及的具体产品之间没有共同的逻辑,就可以使用接口来扮演抽象产品的角色;如果具体产品之间有共同的逻辑,就必须把这些共同的东西提取出来,放在一个抽象类中,然后让具体产品继承抽象类。2016秋数据科学与软件工程学院379.2.3设计模式举例为实现更好复用的目的,共同的东西总是应该抽象出来的。实现时,工厂方法模式可以参数化;返回对象可以是抽象对象,也可以是具体对象;遵循命名规则有助于开发者识别代码结构。2016秋数据科学与软件工程学院389.2.3设计模式举例使用工厂方法模式的场合及益处是:平行连接类的层次结构;一个类想让其子类说明对象;一个类不预计子类,但必须创建子类;一簇对象需要用不同的接口分隔开;代码要处理接口而不是实现的类;连接子类的方式比直接创建对象更加灵活;对客户隐藏具体的类。2016秋数据科学与软件工程学院399.2.3设计模式举例JDBC是工厂方法模式的一个很好的例子。数据库应用程序不需要知道它将使用哪种数据库,所以它也不知道应该使用什么具体的数据库驱动类。相反,它使用工厂方法来获取连接、语句和其他对象,这使得改变后台数据库变得非常灵活,同时并不会改变应用的数据模型。2016秋数据科学与软件工程学院409.2.3设计模式举例在JDK中使用工厂方法设计模式的例子:valueOf()方法会返回工厂创建的对象,这等同于参数传递的值;getInstance()方法会使用单例模式创建类的实例;java.lang.Class中的方法newInstance()从每次调用工厂方法时创建和返回新实例;java.lang.Object中的方法toString();java.lang.Class中的方法forName()。2016秋数据科学与软件工程学院419.2.3设计模式举例2.适配器模式问题描述:正在运行的程序使用L型号的打印机print文件,现在又购置了H型号的打印机,但是它提供了不同的打印函数disply()。如果不想改变当前程序的编码,想使用新的类、但又不能改变它,如何设计?这个问题的核心是,如何使用既有类的操作,但是它的接口不符合要求。2016秋数据科学与软件工程学院429.2.3设计模式举例解决方案:为接口不符合要求的类创建一个适配器类,使其提供的接口满足使用要求,如图9.2所示。2016秋数据科学与软件工程学院439.2.3设计模式举例适配器模式适用如下场合:想使用一个已经存在的类,而它的接口不符合目前的需求。想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(那些接口可能不一定兼容的类)协同工作。(仅适用于对象Adapter)想使用一些已经存在的子类,但是不可能对每个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。2016秋数据科学与软件工程学院449.2.3设计模式举例3.命令模式2016秋数据科学与软件工程学院459.2.3设计模式举例4.基于模式的设计2016秋数据科学与软件工程学院469.2.3设计模式举例为了使设计者使用模式来思考,可以考虑下面的方法:(1)保证理解全局——将要建立的软件所处的环境。需求模型表达了这一点。(2)检查全局,提取此抽象层上表示的模式。(3)从“全局”模式开始设计,为将来的设计工作建立环境或架构。(4)在更低抽象层寻找有助设计方案的模式。(5)重复(1)到(4),直到完成完整的设计。(6)通过使每个模式适应将要建立的软件细节对设计进行优化。2016秋数据科学与软件工程学院479.3框架9.3.1基本概念9.3.2框架和设计模式9.3.3框架开发9.3.4软件测试框架JUnit2016秋数据科学与软件工程学院489.3.1基本概念框架是整个或部分系统的可复用设计,表现为一组抽象构件及构件实例间交互的方法。框架是可被应用开发者定制的应用骨架。可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类及其实例之间协作的方法,它为构件复用提供了上下文关系。2016秋数据科学与软件工程学院499.3.1基本概念框架方法是构件技术、软件体系结构和应用软件开发三者发展结合的产物。框架通常以构件库的形式出现,但构件库只是框架的一个重要部分,构件库的大规模复用需要框架。框架的关键在于框架内对象间的交互模式和控制流模式。在某种程度上,将构件和框架视为两个不同但彼此协作的技术或许更好。框架为构件提供复用的环境,为构件处理错误、交换数据及激活操作提供了标准的方法。2016秋数据科学与软件工程学院509.3.1基本概念根据软件的层次结构,软件框架分为:基础设施框架。对系统基础功能的接近完整的实现,并留有扩展余地。中间件框架。对一些常用的中间件按需定制或按需扩展而成。例如,可以运行Web程序的Web服务器。应用框架。面向应用领域中应用系统的骨架,但它并不提供完整的应用软件系统的全部。如Web应用框架Struts、Android应用框架。2016秋数据科学与软件工程学院519.3.1基本概念根据应用范围的不同,软件框架分为:技术框架。致力于解决某一技术领域内的通用技术问题,并提供定制和扩展机制。技术框架又称为水平框架。水平,强调的是通用性、使用范围的广泛性。例如,Hibernate就是解决面向对象与关系数据库映射问题的技术框架;Junit是解决单元测试问题的技术框架。业务框架。在特定业务领域内通用的框架。业务框架又称为垂直框架,垂直,就是强调专门化。例如,一个网络管理软件的垂直框架针对网络管理这个专门领域提供了完善的功能。2016秋数据科学与软件工程学院529.3.1基本概念框架在软件开发中具有显著的特点:应用领域内的软件结构一致性好,便于建立更加开放的系统;复用代码大大增加,软件生产效率和质量也得到了提高;软件设计人员要专注于对领域的了解,使需求分析更充分;存储了经验,可以让那些经验丰富的人员去设计框架和领域构件,而不必限于低层编程;2016秋数据科学与软件工程学院539.3.1基本概念框架在软件开发中具有显著的特点:允许采用快速原型技术;有利于在一个项目内多人协同工作;大粒度的复用有助于降低开发和维护费用、加快开发速度、提高软件生产效率、提高产品质量,而参数化框架使得适应性、灵活性增强。2016秋数据科学与软件工程学院549.3.2框架和设计模式构件通常是代码复用,而设计模式是设计复用,框架则介于两者之间,部分代码复用,部分设计复用,有时分析也可复用。在软件生产中有三种级别的复用:内部复用,即在同一应用中能公共使用的抽象块;代码复用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的复用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的复用性。2016秋数据科学与软件工程学院559.3.2框架和设计模式设计模式是对在某种环境中反复出现的问题及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也可以直接执行或复用,而对模式而言,只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。框架是软件,而设计模式是软件的知识。2016秋数据科学与软件工程学院569.3.3框架开发面向对象系统获得的最大的复用方式就是框架。一个大的应用系统可能由多层互相协作的框架组成。一个基于框架开发的应用系统包含一个或多个框架、与框架相关的构件类,以及与应用系统相关的功能扩展。与应用系统相关的扩展包括与应用系统相关的类和对象。应用系统可能仅仅复用了面向对象框架的一部分,或者,它可能需要对框架进行一些适应性修改,以满足系统需求。2016秋数据科学与软件工程学院579.3.3框架开发框架的开发从代码、设计和分析三个层面复用了软件。(1)复用代码,因此从一已有构件库中建立应用变得非常容易,因为构件都采用框架统一定义的接口,从而使构件间的通信简单。(2)复用设计。它提供可复用的抽象算法及高层设计,并能将大系统分解成更小的构件,而且能描述构件间的内部接口。(3)复用分析。所有的人员若按照框架的思想来分析事务,那么就能将它划分为同样的构件,采用相似的解决方法,从而使采用同一框架的分析人员之间能进行沟通。2016秋数据科学与软件工程学院589.3.3框架开发框架的复用周期如下:(1)用能够与得到描述可复用件相匹配的术语说明需求;(2)搜索并获取最相关的复用件;(3)评估它们的复用能力;(4)选择最合适的候选复用件,改编它适合当前的需求;(5)把它集成到当前的应用系统。2016秋数据科学与软件工程学院599.3.3框架开发复用框架的典型的做法是,根据功能的覆盖度、平台支持、文档质量等评估几个框架。所以,步骤(1)和(2)较为简单,评估每个候选框架(步骤(3))会占用一段时间。评估包括阅读文档、决定框架是否合适,以及实际使用框架开发一个应用原型来检测框架的各种属性。2016秋数据科学与软件工程学院609.3.3框架开发按照应用开发需要改编最适合的框架(步骤(4))意味着为每个框架的参与者找到实现,在框架提供的工具中选择具体构件、选择并改编应用特殊的类以便它们能适应在框架中的角色。这个步骤通常需要手工编程,也有运用工具产生程序。2016秋数据科学与软件工程学院619.3.3框架开发最后,在框架环境下集成,实现有效地把应用构件插入框架结构的各种场景。框架随着复用演化。框架的每一次复用实例都会遇到一些识别改进之处的困难,以及能进一步参数化的方面,进一步抽象或分解的参照者等。2016秋数据科学与软件工程学院629.3.4软件测试框架JUnit2016秋数据科学与软件工程学院639.4案例分析与实践9.4.1生成Word格式的习题9.4.2口算习题练习得分的可视化展示9.4.3完整案例的软件构造2016秋数据科学与软件工程学院649.4.1生成Word格式的习题构造任务11:使用FreeMarker生成Word格式的习题。需求:给定50道100以内的加减法口算题,用Word格式输出。分析:文字处理是一项非常复杂的系列操作,包括字体、字形、颜色等的选择,行间距、段落等的设置,还要综合考虑这些因素自动排版。2016秋数据科学与软件工程学院659.4.1生成Word格式的习题从Office2003开始,可以将Office文档转成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像FreeMarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他方案要更为简单。2016秋数据科学与软件工程学院669.4.1生成Word格式的习题1.理解FreeMarkerFreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。设计FreeMarker的主要目的是实际生成HTML的Web页面,特别是为基于servlet的应用按照MVC模式(ModelViewController)生成HTML的Web页面。2016秋数据科学与软件工程学院679.4.1生成Word格式的习题2016秋数据科学与软件工程学院689.4.1生成Word格式的习题使用FreeMarker输出Word文件主要包含两部分:制作模板和完成合并(模板+数据)产生实际输出。制作模板的步骤:用MSWord制作要输出的Word样式,存为XML文件,将XML翻译成FreeMarker模板。FreeMarker编程实现输出模板的步骤:创建配置实例,创建数据模型,获取模板,将模板与数据合并。2016秋数据科学与软件工程学院699.4.1生成Word格式的习题2.制作模板(1)创建Word模板。(2)另存为XML格式、后缀更改为.ftl。(3)用能够高亮显示XML和元素自动配对等功能的工具打开*.ftl文件。2016秋数据科学与软件工程学院709.4.1生成Word格式的习题模板基础知识简介如下。(1)模板的整体结构。直接输出的文本;由${}或#{}来限定、计算值替换输出;ftl标记:FreeMarker用指令编排模板,类似于HTML标记,要成双成对出现,如列表<#list>…<#/list>。为与HTML标记区分,用#开始(有些以@开始);注释:包含在<#--和-->限定,不产生输出。2016秋数据科学与软件工程学院719.4.1生成Word格式的习题(2)指令。三种ftl标记指令的格式:开始:<#directivenameparameters>;结束:</#directivename>;空内容指令:<#directivenameparameters/>。指令有系统预定义(#开始)和用户定义(@替换#)两种。FreeMarker忽略ftl标记中的空白字符。但<、</和指令之间不允许有空白字符。2016秋数据科学与软件工程学院729.4.1生成Word格式的习题(3)取得变量的值。FreeMarker用实际值替换${variable}限定的变量variable。变量名只能是字母、数字、下画线、$、@和#的组合,且不能以数字开头。可以使用${…}或#{…}在文本部分插入表达式的值。2016秋数据科学与软件工程学院739.4.1生成Word格式的习题FreeMarker模板中定义三种类型的变量:能在模板任何地方访问的plain变量;局部变量;循环变量。局部变量隐藏同名的plain变量;循环变量隐藏同名的局部变量和plain变量。2016秋数据科学与软件工程学院749.4.1生成Word格式的习题FreeMarker典型的数据模型是:(1)树形结构,可以任意复杂和深层次;(2)类似于目录的变量Hashes,保存下级变量的唯一的查询名字;(3)类似于文件的变量scalars,保存单值,有两种类型:字符串和数字;对scalars的访问从root开始,各部分用“.”分隔,如animals.mouse.price,案例中的plain.data2。2016秋数据科学与软件工程学院759.4.1生成Word格式的习题要修改的是表格,可以通过<w:tr>查找来定位。一对<w:tr></w:tr>代表一行,也就是5道算式题。然后要用一对<#list></#list>来将其包括,以便后续填充数据。首先,找到<w:tr></w:tr>,在它的前面加入<#listtableasplain>,表示一行;同时在表格结束配对</w:tr>后面加上list的结束配对</#list>。2016秋数据科学与软件工程学院769.4.1生成Word格式的习题list指令是一个迭代输出指令,用于迭代输出数据模型中的集合。其中,squence是一个集合对象,对应Java中的list、数组等非键值对的集合。item是一个任意的变量名,是被迭代输出的集合元素。2016秋数据科学与软件工程学院779.4.1生成Word格式的习题然后,将from、to、data1、data2、data3、data4、data5改为plain变量${plain.from}、${plain.to}、${plain.data1}、${plain.data2}、${plain.data3}、${plain.data4}、${plain.data5}。2016秋数据科学与软件工程学院789.4.1生成Word格式的习题3.合并模板产生输出4.集成到交互界面2016秋数据科学与软件工程学院799.4.2口算习题练习得分的可视化展示1.简介JFreeChartJFreeChart是一组功能强大、灵活易用的Jav

温馨提示

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

评论

0/150

提交评论