代码生成

关键词: 软件 应用

代码生成(精选十篇)

代码生成 篇1

关键词:SQL解析,动态SQL构造,代码生成

1 现有生成分析

一般常用的代码生成器是基于数据库表的代码生成, 通过读取数据库的元数据 (metadata) 信息, 然后根据这些信息放入生成器的模板, 再根据模板生成基本的增删改查代码。这种生成器一般只能生成基本的增删改查代码, 后面须通过手工修改代码的方式来满足业务需要。生成流程如图1所示。

本生成器要解决的问题是, 为后面的业务SQL也生成相关代码, 然后在此基础上进行修改, 辅助软件开发, 提升开发效率。

2 系统设计

因为jdbc驱动基本上所有数据库都支持, 所以我们的实现语言是采用Java实现。在动态SQL构造方面, ibatis是一个良好的动态SQL构造工具, 并且SQL是写在xml文件中, 便于统一管理。在详细介绍前, 定义一张示例使用的表:

2.1 SQL智能解析

我们需要根据SQL生成代码, 必须的3要素:参数列表 (包含参数类型) 、返回列 (select查询的返回值) 、SQL类型 (insert, update, select, delete) 。通过参数列表, 可以生成一个页面的输入元素, 通过得到SQL的返回列, 我们可以生成这条SQL语句需要展现什么元素。识别是insert、update、select, delete语句, 可以用于控制我们生成的页面是怎样的效果。

我们有一条SQL:

对于以上的SQL, 我们SQL解析如何得到输入参数及返回结果呢?

2.1.1 Ibatis动态构造SQL处理

前面的是ibatis动态构造SQL语句的语法, 如上面的示例, 如果userId不为空 (isNotEmpty) , 那么则条件生效。prepend属性是在条件生效后增加的前缀。dynamic节点则可以为我们动态删除AND, 如where and user id=#userId#变成where user id=#user id#, 如果我们只有一个userId的条件生效, 那么最终生成的SQL语句是:

转换为正常的SQL语句。

我们需要将上面的动态构造SQL语句转变成一条最大化的SQL语句 (就是动态条件全部生效, 构造出一条完整的SQL语句) , 这样可以更好的检查语法。通过一个正则表达式, 找到所有匹配xml tag的动态条件, 删除这些xml tag, 并将如prepend等前缀附加在动态SQL前面, 这样就可以得到一条完整的SQL。

2.1.2 参数名称解析

有两类参数名称我们需要解析:①age>#minAge#;②sex=?

完成以上两个解析通过正则表达式即可完成。

2.1.3 推导参数类型

如前面步骤, 我们已经得到参数名称了, 如sex=?表达式的sex参数, 是包含在我们数据库表user_info中的正常列, 我们可以查找数据库表user_info表的元数据, 得到user_info表的相关列信息。然后推导出sex的类型为Integer, age>#min Age#则同步。我们得到左边的age的名称, 然后在数据库中查找列类型, 推导出类型是Integer。以下为得到表的元数据的接口:

2.1.4 自动填充参数随机值

在数据库中执行的SQL必须为参数设置值, 对于这个问题, 我们已经得到了参数的类型, 只要为各个参数生成一个随机值就行。而随机值的长度范围也可以在参数列对应的数据库列类型中得到。

2.1.5 忽略数据库完整性异常

我们生成的随机值如果是insert及update语句, 由于数据库的完整性结束, 如外键、唯一性约束, 会导致我们执行SQL时失败, 此时我们应该检查SQLException的errorCode, 并且忽略掉数据完整性异常。因为对于insert、update语句, 我们只需要知道语法没有错误就行了, 而且随机值肯定保障不了生成的值符合外键约束, 所以忽略掉这种类型的异常。

2.1.6 获取返回结果列

将我们最终构造出来的SQL放在数据库执行, jdbc驱动本身提供接口让我们读取返回列的元数据信息。以下为元数据查询接口:

2.1.7 语法检查

因为我们的SQL是在数据库执行的, 如果编写的SQL有语法异常, 那么可以直接检查出来。避免还要编写相关单元测试, 检查如SQL是否合法的问题。

2.1.8 完整SQL解析/生成流程图

SQL解析/生成流程图如图2所示。

2.1.9 SQL解析结果

通过SQL解析, 我们可以得到如下几个输入参数:

通过读取数据库的元数据, 得到select查询返回的Result列表:

根据以上解析得到输入参数及输出参数。

2.2 生成器引擎

现在的生成器都需要采用模板语言来生成代码, 本生成器引擎选择的是freemarker。主要由于freemarker的模板与输出的模式比较一致。对于整个生成器引擎, 也有一些创新的设计。

2.2.1 模板路径可以引用相关变量

一般的生成器没有将存放模板的目录名称及文件名称利用起来, 导致还需配置每个模板文件生成的文件名及目录结构, 而本引擎可以引模板的文件路径引用相关变量。甚至在文件路径中写一段程序都是可以的。

示例:

根据该变量生成输出文件, 如果我们的变量值为:

那么生成的完整路径为:

2.2.2 生成代码

通过freemarker, 只要调用其API, 编写好模板, 并为模板设置好数据, 即可以生成代码。Freemarker模板生成的基本原理如图3所示。

API示例使用:

使用如上API, 配合我们解析出来的数据模型, 就可以生成代码。

3 结束语

充分利用数据库现有的特性, 配合对SQL语句的解析, 并结合ibatis本身对动态构造SQL的支持, 为代码生成增加了一种新的应用方式。并且可以基于此做二次开发, 如开发一套Eclipse插件这样的GUI工具, 为基于信息管理的企业应用开发加速。

参考文献

[1]霍斯特曼.JAVA2核心技术[M].北京:机械工业出版社, 2006.

构建生成课堂 促进动态生成 篇2

一、联系生活——会生成

学生在生活中积累了大量的生活经验,把学生的个人知识、直接经验作为数学教学的重要资源,从生活中提炼出有趣的、有意义的、探索性的数学问题,从而促进知识的生成。

如六年级教材中有一道按比例分配的应用题:“学校栽280棵树,按照六年级三个班的人数,分配给各班。一班有47人,二班有45人,三班有48人,三个班各应栽多少棵?”现在植树活动与学生的生活不那么贴近,难以激起学习数学的热情。我班去年刚好有许多从产油奈乡镇转入的学生,且学习较差兴趣又不浓。我把题目改为与他们生活联系很紧密的合运油奈上城收购,然后分摊车费的题目:“炜锋、秀秀、春梅(转学生名字)三家共同包车运油奈上城收购,油奈重量分别为炜锋家2000千克,秀秀家800千克,春梅家1200千克,共付车费80元,他们如何分摊车费才合理?”学生(特别是插班生)感受到数学就是自身经历的事,很兴奋,热情很高。教师接着问:①三户平均分摊车费合理吗?②要根据什么分摊车费?学生明白这两个问题之后,很容易掌握按比例分配的应用题。这样把学生亲身经历的实际问题抽象成数学模型并解释和应用,使学习的过程成了知识生成的过程。

二、精心预设——促生成

在一线上的老师,可能都有这样的体会:上课时老是要按事先设计的教案,有序地进行教学,学生要是“越轨”了,总会不知不觉地、情不自禁地把它“牵”回来。由此有的教师可能会产生误解,现在追求生成式课堂教学,那好了,可以不写教案,不必预设,这样既有利于摆脱教案的束缚,又有益于课堂的动态生成。其实不然,“凡事预则立,不预则废。”叶澜教授也指出:“在教学过程中强调课堂的动态生成,但并不主张教师和学生在课堂上信马由僵式地展开学习,而是要求教师有教学方案的设计,并在教学方案设计中预先为学生的主动参与留出时间与空间,为教学过程的动态生成创设条件。”所以我们在关注教学生成的同时,更要关注预设。必须认识到,新课程改革对预设不是降低,而是提高,备课时要考虑不同学生有哪些不同的思考方法,可能会出现哪些解决问题的方案,从而设计不同的教学策略。教学要通过“预设”去促生成,通过“生成”完成“预设”目标。

如在制定“圆柱的体积”一课时,教师应考虑到学生可能已经知道了圆柱体的体积计算公式。这时,教师起码要预设两种教学方案:一是学生对圆柱体的体积计算公式未知,教师该如何引导学生对未知进行自主探索;二是学生对圆柱体的体积计算公式已知,又将如何引导学生进一步确认追溯公式的来源。同样,当学生把圆柱转换为近似长方体后,由于各人的视角不同,推导的过程也会有所不同。学生可能将其视作“底面积πrr(圆面积)、高为h的长方体”;也可能视作“底πrh(侧面积的一半),高为r的长方体”;还可能视作“底为hr(纵截面的一半),高为πr(圆周长的一半)的长方体”。教师只有尽可能地预设各种可能,才能做到心中有数、临阵不乱。

三、激励评价——拓生成

课堂要动态生成,少不了学生要将所想的、所要说的说出来,否则生成则成无源之水。然而学生所想,有时是一种独特且富有创造性的精彩见解,有时则是一种错误理解或是一种暂时难辨真伪的模糊表征。教师首先要承认学生思路的合理性,激励学生将这些思路展示出来,让学生感到成功的喜悦,拓展学生生成的空间,为学生今后生成打下基础。对后者,学生错误或模糊的思路,正是反映了他们当前认知上的冲突,或知识迁移上的障碍所在,教师可以将其作为洞察、开发学生发展潜能的有效手段,找出某些错误的“合理性”,以满腔热情、殷切期望,及时给予肯定,让学生在由冲突走向和谐的过程中,获得认知上的飞跃,情感上的体验。

1.差异性评价。班级授课制形式中,我们面对的学生是有差异的。我们不可以用同一尺度去衡量,我们应尊重差异,对不同学生的不同发现,尽可能以肯定与激励的态度去评价。如有些学习上的后进生,课上尽量让其回答力所能及的问题,即使回答错了或不全面,也要肯定其积极参与的态度。又如计算教学倡导多样化,教师尽量让学生自主尝试发现不同的算法,并给予充分的展示交流,并让学生积极展开相互之间的评价,让学生在自主选择中内化计算的原理与方法。这样既有利于全体学生的主动参与,也能促使不同层次的学生都能体验成功。

代码生成 篇3

随着网络的迅速发展,在实际生活中Web应用得到了更广泛的应用,越来越多的人把目光投放到Web应用系统开发上。随之而来软件开发的便捷高效性受到软件开发人员的高度重视,软件代码的自动生成更吸引了业界越来越多的注意力,越来越成为开发者努力发展的目标。通过像软件复用以及软件构件等相关技术,已经将已有的设计成果在很大程度上利用起来[1]。在软件工程的发展过程中,为了方便软件开发,进而减少代码的重复编写,开发者致力于代码自动生成工具的研究。

Eclipse提供的插件机制为开发者提供了可以任意展示的平台,开发者可以根据需要在平台上集成所需的功能插件,然而Eclipse的这种特点就需要它能够随时的发现平台中已经集成的插件,这也是Eclipse扩展功能的核心[2]。Eclipse平台本身只处理后台的基本工作,所以插件只需要关注自身所需要实现的功能,而不用担心怎么被Eclipse发现以及调用。与此同时Eclipse不仅为开发Java应用程序提供了开发工具,而且还支持C/C++的开发。因此,为了支持不同应用的不同需求,Eclipse可以通过插件集成机制扩展许多功能[3]。

1 相关技术介绍

1.1 富客户端平台RCP

Eclipse平台的核心是插件,而位于Eclipse中的一项核心功能便是富客户端平台RCP(Rich Client Platform)[4]。基于Eclipse平台,开发Web应用比较容易,众所周知,如果开发桌面应用程序就比较困难,因为Eclipse平台缺少图形化的开发界面,富客户端平台RCP的插件机制解决了Eclipse开发桌面应用程序的瓶颈,它为构建桌面应用程序提供了基本的框架,进而解决了Eclipse转向桌面应用开发的难题,而且基于RCP工程,可以做到比较简单的就实现设计架构而且还拥有专业化的设计效果。富客户端平台RCP以OSGi为基础,它在工程中应用了扩展点的设计思想,所以RCP可以比较完善的开发基于插件的应用系统。同时在RCP中很好地体现了扩展点的表现形式,从它友好地支持桌面应用开发就能看出来[5]。RCP工程中首先依据对象的思路将界面进行切分,在分解的时候按照功能不同便形成了不同的插件,逐渐展现出扩展点,最终展现了跟树相似的架构。插件结构图如图1所示。

下面简单介绍Eclipse RCP的体系结构,一个Eclipse RCP可分为如下5个部分:

(1)工作台(Wrokbench)。提供了Eclipse的用户界面。是运用SWT和API(JFace)来构建的;

(2)工作区(Workspace)。它是一个插件,主要负责管理用户的资源。如果资源信息该改变,它还负责通知其他插件,例如:文件的创建、更新等;

(3)帮助系统(Help)。它能够提供一个附加的导航结构,当用户需要添加文档时,可以让工具应用XML文件的形式添加;

(4)支持系统(Team)。该组件主要负责支持版本控制和配置管理。它会根据应用的需要添加视图;

(5)运行平台(Platform Runtime)。平台运行库是整个Eclipse的内核,启动时会自动检测已经安装了的插件,并在注册表中创建相关的信息。

1.2 EMF和GEF技术

图形编辑框架GEF和建模框架EMF分别是Eclipse中的两个子项目,GEF是Eclipse平台中提供的图形编辑框架,它可以为用户提供图形化编辑模型[1]。而EMF是Eclipse提供的模型驱动应用程序开发框架,它是可以用来产生代码的框架[6]。

建模框架EMF(Eclipse Modeling Framework)可以采用模型驱动的方式设计实现Web应用程序,它是Eclipse平台中又一个非常重要的子项目,开发人员可以全身心的投入应用系统模型的设计上,因为建模框架集成了代码智能自动生成工具,从而使开发者不用担心内部代码的具体设计编写规范。而上文所说的模型就是EMF内部设计的元模型(名为Ecore),它包含了属性、方法等基本的内容。所谓的EMF代码自动生成就是要依据上面所说的模型,根据Ecore模型智能生成复合Eclipse中规范的Java代码[7,8]。这种方法的优点是第一显而易见提高了开发的效率。第二能够保持代码与模型的一致性,当模型发生变化后只需要重新根据模型生成代码即可,减少了手动开发中所存在的不必要的失误。

通过以上对EMF的分析可以看出应用程序在EMF的基础上来构造只需要两步:构造模型和生成代码。EMF中支持的模型定义方式非常的广泛,像UML类图、Java接口等均可以。模型编辑完成后,就可以根据模型智能生成代码了,在代码生成阶段光生成与模型有关的代码或者也生成与编辑器有关的代码都是可以的。而要想得到复合要求应用只求要对编辑器做一些修改就可[9]。

2 智能代码生成框架的设计

随着开发实践工作的不断深入,目前代码生成工具的发展已经越来越成熟。本文设计研究的智能代码生成工具是基于Eclipse平台的智能自动XML代码生成工具。本身是以插件的形式安装,使用所见即所得的图形界面编辑Web应用系统的视图界面,能够实时预览,浏览调试信息,并可以导出XML代码及最终部署配置所需要的文件。

2.1 框架的总体架构

智能代码生成工具的基本框架如图2所示,它可以划分为不同的功能模块,下面分别介绍每一部分的特点。UI层主要接受用户的操作请求并且进行响应,然后把不同的操作转化为各种不同的请求,发给Model层或者Engine层,在这个过程中需要经过Template层进行分配。Template层主要负责为各种不同种类的界面提供个性化的设计。Model层是代码工具整体架构的基础。它为代码生成工具定义了不同的数据模型,将需要产生的代码划分为元素,进行更高层的抽象。

Engine层主要负责代码的自动生成,将Model层的数据结构模型自动转换为实际的代码[10]。

2.2 框架的主要特点

通过对智能代码生成工具总体架构的分析,可以看出它的主要特点,首先它是一个集成的开发平台,拥有比较高的自动化程度,并且提供了友好的可视化的编辑界面,从而降低了开发人员对技术的要求[10]。所谓的集成的开发平台可以进行Web应用的设计、预览以及代码编辑,同时可以随时浏览调试信息,因而程序员可以只关心系统的架构以及模型的设计,而无需关注底层代码的设计生成;自动化程度主要表现在平台中很多的操作都已经实现了自动完成,很大程度地提高了程序员的开发效率;在开发工具中提供了友好的可视化编辑界面,可以通过简单的可视化配置来设计模型从而完成平代码的自动生成,无需对XML代码进行功能程序的修改;由于代码生成工具的灵活度很高,很多操作可以通过配置操作就可以简单的完成,也可以直接编写代码,以前用文本工具能做到的在代码工具中都可以完成。

举例来说,在开发平台中创建可访问资源。通过可视化的配置就可以形成系统可访问的菜单。如图3所示。

在可视化窗口配置完成后,在相应的文件中代码就会自动生成,如图4所示,在相应的模型视图中配置好可访问资源的菜单及相应的子菜单模型后,相应的可访问资源配置文件中的代码也会自动生成。

2.3 框架的实现

工具的实现首先需要配置好开发环境,代码工具主体程序是一个RCP工程并且基于Eclipse平台,而设计实现所需的主要的功能插件有编辑模型框架GEF,建模框架EMF,图形化建模框架GMF以及SWT,Draw2D等。

代码生成工具的设计是基于RCP工程,在工程中包含两个配置文件Plugin.xml和build.properties。Plugin.xml文件列出了Eclipse的扩展点,而这个文件便是用来使用和定义Eclipse扩展点的。关联Eclipse插件的基本方式是扩展点。build.properties文件是在集成插件的时候指定了要build的内容及相关资源的路径。如果向工具新增一些资源,如图标文件等需要把它们添加到build.properties文件中的bin.include一节。

整个代码生成框架的核心是模型,并且整个模型几乎都是为用户界面的生成服务,这符合了系统的宗旨。而建模框架EMF为模型设计提供了基础,模型是基于EMF的Ecore模型,它是关于应用的类和数据的简单模型。当建立Ecore后,代码生成工具采用实现与接口相分离的设计,将模型中的每个类自动生成一个接口和一个实现类。它从表达用户需求信息的功能模型出发到最终生成工程的源代码。

从图5中可以看出代码生成的过程可以分为4个阶段。

第一为需求分析阶段,它是整个代码生成过程的基础。主要负责将用户提出的需求以模型的方式表示出来;

第二个是构件的创建阶段,根据上一个阶段确定好的用户需求来创建Web应用,这个阶段的主要任务就是确定Web应用的类型以及所包含的资源的基本逻辑属性等;

第三是模型的创建阶段,定义Web应用所用到的可访问资源、业务模式及页面控件,通过可视化的配置到应用中,进而确定系统包含的基本菜单及内部对数据的基本操作、用户权限分配等;第四是智能代码生成阶段,上一个阶段配置好模型的基本属性内容以后代码会在创建的应用中相应的文件中智能生成代码。

3 结语

智能代码自动生成工具的研究,是在改变以往的软件开发方式,进而可以简化Web应用的开发过程,提高开发效率。本文主要研究与实现了智能代码生成工具[11]将智能代码生成工具引入在Web应用开发,可以很大程度上改善传统软件开发方式中存在的缺陷。代码生成工具在项目开发中的广泛应用,使系统设计模型可以自动转换成所需要的代码,避免了直接去手工编写代码进而进行大量的重复性工作,为开发人员减轻了工作量和工作负担,提高了工作效率,从而使开发人员在开发不同的Web应用时能够快速构建系统架构,进而快速完成系统的设计。

摘要:Eclipse是一个基于Java的可扩展开发平台,它本身是由一个框架和一组服务组成,用于通过插件组件的形式构建开发环境。富客户端平台RCP是位于Eclipse平台核心的功能,它可以视为基于OSGi构建插件系统的最佳实践指导,同时可重用Eclipse中已存在的方法和编码模式。图形化的模型框架GMF是一个Eclipse建模项目的子项目,其目标是为Eclipse建模框架EMF和图形化编辑框架GEF提供一个统一的桥梁,从而为代码工具的生成奠定了良好的基础。而EMF是Eclipse MDA的一个重要组成部分,通过它可以将模型转换成高效正确和易于定制的Java代码。在此结合Eclipse平台、RCP工程及、等相关技术,研究分析了智能代码生成框架的设计过程。

关键词:Eclipse,RCP,EMF,智能代码生成框架

参考文献

[1]施洪洁.GEF图形编辑器自动生成的研究[D].长春:长春工业大学,2011.

[2]AGRAWAL R,IMIELINSKI T,SWAMI A.Mining association rules between sets of items in large databases[C]//Proceedings of ACM SIGMOD Conference on Management of Data.Washington,DC:ACM,2008:207-216.

[3]赵丽娜.试谈安装Eclipse插件的方法[J].电脑编程技巧与维护,2011(16):112-113.

[4]詹鹏飞.基于GMF的Web快速开发工具的研究与实现[D].广州:华南理工大学,2010.

[5]袁赟.Eclipse RCP框架分析和应用研究[D].上海:同济大学,2008.

[6]常浩浩,覃征.基于EMF和OCL的MDA软件工程方法研究[J].计算机科学,2007(1):268-271.

[7]PARK J S,CHEN M S,YU P S.An effective hash-based algo rithm for mining association rules[C]//Proceedings of ACM-SIGMOD International Conference on Management of Da ta.San Jose,CA:ACM,1995:175-186.

[8]刘强.设计模式的形式化研究及其EMF实现[D].上海:华东师范大学,2011.

[9]管太阳.基于模板的自动代码生成技术的研究[D].成都:电子科技大学,2007.

[10]何亮.代码自动生成工具在软件开发中的应用[J].信息与电脑:理论版,2011(10):109-110.

[11]CHEUNG D W.Maintenance of discovered association rules in large databases:an incremental updating technique[C]//Proceedings of the 12th International Conference on Data En gineering.New Orleans,Louisana:ICDE,1996:106-114.

代码生成 篇4

我们知道,PHP读取MYSQL动态显示,在访问量大的情况下,会有很多性能问题,如果租用别人的虚拟主机,则会因为CPU消耗过多而被限制CPU,导致网页无法访问。我这里给出一个PHP动态生成HTML的方法,可以极大降低服务器CPU负荷。

首先设置.htaccess文件,将动态调用的参数转换为静态的HTML的URL地址,例如将在post目录下的文件,转发到根目录的wp-post.php文件中,加入的语句类似:

RewriteRule ^post/([a-z0-9-]+.html)$ wp-post.php?$1$2

然后修改wp-post.php文件,在文件的开头加入以下PHP代码:

ob_start();

$qstring = isset($_SERVER[”QUERY_STRING“]) ? $_SERVER[”QUERY_STRING“] : ”“;

define(”HTML_FILE“, $_SERVER[”DOCUMENT_ROOT“].”/post/“.$qstring);

if (file_exists(HTML_FILE))

{

$lcft = filemtime(HTML_FILE);

if (($lcft + 3600) >time()) //判断上次生成HTML文件是否超过1小时,若没有才直接输出文件内容

{

echo(file_get_contents(HTML_FILE));

exit(0);

}

}

之后是现有的PHP的代码,然后在当前代码的最后面加上如下的PHP代码:

define(”HTMLMETA“,”“);

$buffer = ob_get_flush();

$fp = fopen(HTML_FILE, ”w");

if ($fp)

{

fwrite($fp, $buffer.HTMLMETA);

fclose($fp);

}

好了,然后查看你的静态HTML页面,如果页面尾部出现了注释行,说明已经成功的创建了静态HTML文件,

这个方法的一个应用就是我先前写的那个“WordPress年度博客统计插件”,这个统计插件由于查询十多次数据库,很多人访问的时候会有很大性能问题,使用我介绍的这种动态生成HTML技术后,一天就查询一次,生成一次统计排行,完美解决了查询数据库的性能问题。

代码生成 篇5

[关键词]预设 生成 水到渠成 增光添彩

[中图分类号] G623.5 [文献标识码] A [文章编号] 1007-9068(2015)17-041

叶澜教授曾指出:“要从生命的高度,用动态生成的观点看待课堂教学。”可见,课堂教学是一个个鲜活生命在特定情境中的交流与对话,是弹性预设与灵动生成的辩证统一。教师对课堂教学的预设不是为了限制生成,而是为了使生成更具方向感,更富有成效。因此,课堂教学中,教师要善于捕捉各种生成并迅速作出判断,妥善处理好预设与生成之间的关系,让生成为预设增光添彩。

一、精心预设,使生成水到渠成

预设是指教师在备课或实施教学活动前对教学过程的一种引领,即通过设计有利于学生活动的问题情境,设想在课堂中会引起哪些因素变化、会生成哪些新的资源等。因此,教师在进行教学预设时,应从突出教法(如何通过教师的讲解突显教学的重点,突破教学的难点;怎样讲解才能使学生听得懂、记得住;设计哪些问题让学生思考,学生可能会怎样回答,如何引导学生按照教学的趋势来回答;学生可能会出现哪些错误,如何避免这些错误;学生应当完成哪些作业等)向凸显学法(如何帮助学生从实际生活中发现问题、提炼问题;学生可能会发现哪些问题,会提出哪些问题,哪些是有价值的问题,哪些是要重点研究的问题;在研究过程中可能会有哪几种不同的结果,可能会遇到哪些困难,需要教师提供哪些帮助及如何引导、启发和点拨;怎样才能使学生的探究有意义、有价值,最终会获得哪些有价值的、精彩的生成等)转变。只有这样,才能使课堂中的生成水到渠成,让学生获得发展。

例如,教学“圆锥的体积”时,教师预设在台上用圆锥和圆柱演示倒沙子的实验让学生观察,同时预设了一些问题和学生可能的回答。如下:

问题1:圆锥的体积受哪些条件影响?

生:圆锥的高增加了;圆锥的底面积增大了;圆锥的体积受高和底面积的影响;高增加,体积增大;底面积增大,体积增大……

问题2:大家发现了圆锥的体积与它的底面积、高有关,那么怎样计算它的体积?大家相互讨论讨论。

问题3:在以前的学习中,我们是怎样获取求一个新图形、新形体的面积或体积的?比如,三角形、圆形的面积和圆柱的体积是怎样推导出计算公式的?

生:将三角形转化为长方形;将圆形转化为长方形;将圆柱转化为长方体;将新图形转化为已经学过的图形,求出它的面积……

问题4:我们已经学过哪些形体的体积计算?那么,怎样求圆锥的体积呢?

生:已经学习了长方体、正方体、圆柱等形体的体积计算;求圆锥的体积,要先将圆锥转化为圆柱。

……

课堂上,教师先演示实验,引导学生观察沙的变化,知道圆锥的体积与它的底面积和高有关;再让学生回顾已学面积、体积计算方法的推导,使学生发现可以用转化的方法求圆锥的体积。这样的预设,既关注学生知识的结构状态,将新知的学习和旧知建立联系,巩固了旧知,又学习了新知,并渗透转化的策略,使学生的生成更富有成效。

二、灵动生成,为预设增光添彩

生成是指教师与学生、学生与学生在合作、交流、互动的课堂中,现时生成的超出教师预设之外的新问题、新情况或新资源。学生在课堂中的生成,与他们已有的知识储备、认知水平、生活经验和认知规律、个性差异等因素是分不开的,因为生成是灵动的、出乎意料的。因此,教师在课堂中要及时抓住学生的意外生成,或巧引妙导,让预设生机盎然;或随机应变,为预设增光添彩。

1.巧引妙导,让预设生机盎然

学生的认知规律和个体差异,决定了他们在讨论问题的过程中会产生发散性、创新性的见解或者发生意见分歧。这时教师不能放任自流,而应充分发挥自身的主导作用,给学生有效的价值引导,使生成闪现智慧与灵动的火花,让预设充满生机与活力。

例如,在一节有关行程问题的数学复习课上,教师出示这样一道具有代表性的相遇题:“两个城市相距280千米,甲车每小时行36千米,乙车每小时行48千米,两车同时从两个城市相对开出,经过3小时相遇了没有?为什么?”学生看题后不由自主地讨论起来,得出第一种判断方法:(36+48)×3=252(千米),252<280,说明280千米的路程还未走完,所以没有相遇。接着学生情绪高涨,又提出第二种和第三种判断方法:280÷(36+48)=3(小时),说明两车相遇要用3 小时,所以经过3小时还没有相遇;280÷3-36≈57(千米),说明两车如果相遇,乙车每小时要约行57千米,因为48<57,所以还没有相遇。这时教师看到学生兴趣正浓,于是灵机一动,巧妙地进行了改动,让学生继续探讨:“如果要使两车经过3小时相遇,两车的速度要调整为多少?”“相遇后两车继续行驶1.5小时,两车相距多少千米?”这样的一题多变、一题多用,使学生对相遇(相背)问题融会贯通。听了这堂课,我认为教师的课前预设是很有必要的。而且,教师可以根据课堂生成调整教学,既使调整符合学生的认知规律和实际情况,又使课堂教学沿着预设的轨道前行。当学生的探究兴致犹存,当学生处于“愤悱”状态,对知识的渴求特别强烈、探索兴趣特别浓厚时,一些“枝”(生成)虽然生于“节”(预设)外,但它却是蓬蓬勃勃、富有生机的。此时,教师应运用教学机智顺势而导,充分挖掘学生的潜能,使原有的预设生机盎然。

2.随机应变,让预设增光添彩

小学生的想象力丰富,思维活跃,所以教师难以预设他们回答问题的种种可能。因此,课堂中教师不应拘泥于预设的教学程序,而应独具慧眼,将弹性灵活的成分、始料未及的信息等生成性资源及时捕捉并理智地纳入教学之中,随机应变,使学生学得生动活泼,为预设增光添彩。

例如,在一次“圆的周长”的观摩课上,教师出示这样一道拓展题:“地面上躺着一个底面半径为0.5米的圆柱形油桶。如果要将这个油桶滚过6.78米,要滚动几圈?”学生基本上都会应用圆周长的知识,求出油桶要滚动6.78÷(2×3.14×0.5)≈2.16(圈)。这时,有个学生发出了不一样的声音:“我们平时常常要把油桶滚到墙角。”教师及时捕捉到这一生活信息,引导学生思考:“如果这个油桶离墙角的距离是6.78米,滚到墙角要滚几圈?”有的学生认为有墙与没墙的结果一样,有的学生则陷入了沉思。教师抓住这个契机,引导学生画出图示(如下),通过画图使学生直观地看出,如果有墙挡着,最后一个半径的距离不用滚,滚动的圈数是(6.78-0.5)÷(2×3.14×0.5)=2(圈)。教师的这一随机应变,可能出于课前的预设之外,却让学生有了意外的收获,既拓展了学生的知识领域,又拓宽了学生解题的思路,培养了学生根据实际情况创造性地解决问题的能力,这是多么有价值的应变啊!

总之,精心的预设是为了促进有效的生成,灵动的生成离不开精心的预设,且能为预设增光添彩。课堂教学中,如果教师能正确处理好预设与生成之间的关系,寻求预设与生成的和谐统一,必定会使课堂教学更加精彩。

代码生成 篇6

关键词:自动代码生成,CCS,DM642EVM,边缘检测

0 引言

随着电子技术和计算机技术的进步,尤其是数字信号处理器芯片速度的提高,数字信号处理技术在控制、音频处理、图像处理等领域中的应用己越来越广泛和深入。传统的DSP代码开发方法需要编写汇编或C语言代码,编写过程过于复杂因而开发效率不高。然而在整个软件生命周期中,所有工作的核心都是围绕着编码而展开的[1],因此,快速代码生成方法尤其是自动代码生成方法成为DSP代码开发的研究重点。

近年来TI公司和Mathworks公司联合推出的开发环境Embedded Target for TI′s C2000/C5000/C6000DSP Platform[2,3](ETTIC2000/5000/6000,文中使用ETTIC6000)和接口工具Matlab Link for CCS Development Tools[4](CCSLink)使得自动代码生成方法成为了可能。本文对自动代码生成方法进行了研究,并用边缘检测实验对该方法的有效性进行了验证。

1 基于DM642的自动代码生成技术

1.1 自动代码生成技术

近几十年来DSP被广泛地应用于各个领域,与此同时,DSP程序设计方法也在不断地发展和改进,其中最主要的3种方法及特点如表1所示。为了充分发挥Matlab软件开发周期短和汇编代码执行效率高的优势,同时降低DSP程序开发难度并标准化生成的DSP程序,Texas Instruments携手Mathworks公司推出了一个开发环境ETTIC2000/5000/6000和接口工具CCSLink。

ETTIC6000可以使用Real-Time-Workshop从Simulink模型生成标准的ANSI C程序代码,然后通过CCSLink调用CCS开发工具编译链接这些C代码,生成指定目标板(C64xx或C64xx Simulator)的可执行代码,并把生成的可执行代码加载到目标板中进行算法实时性评估,自动代码生成过程如图1所示。ET-TIC6000还可以利用CCSLink对DSP实时应用程序进行交互式调试和测试[5]。

1.2 DM642EVM开发板的性能

本文采用TI公司的DM642EVM开发板。该评估板的核心为TMS320DM642数字多媒体处理芯片。TMS320DM642是TI公司推出的功能比较强大的TMS320C6x系列之一,是目前定点DSP领域里性能较高的一款[6]。芯片的内核为C64xDSP核,时钟频率为600MHz,指令执行速度高达4 800 MIPS,具有6个并行的算术逻辑单元与2个并行的硬件乘法器,利用先进的超长指令字结构,DM642可以完成复杂的数字图像处理运算[7]。为了提高处理器的存取速度,C64x还提供了一些特别适用于数字图像处理的指令。该评估板除了包括TMS320DM642数字多媒体处理芯片外、还有4 MB的FLASH,32 MB SDRAM和32 KB的E2PROM;它还拥有丰富的外部接口,如3个可以配置的视频端口,一个多通道串行音频接口,一个以太网接口以及PCI口等。因此还适用于做视频监控、视频、音频编解码、网络流媒体等多种用途。实验中采用TDS560USB PLUS仿真器。仿真器的一端通过JTAG插头连接到DM642EVM板,另一端通过USB线缆与PC机的USB口相连。

2 边缘检测模型及其自动代码生成

2.1 边缘检测模型的建立

边缘检测的实质是采用某种算法来提取出图像中对象与背景线的交界线[8],在图像处理过程中具有重要的意义。经典的边缘检测方法是构造对像素灰度级阶跃变化敏感的一阶微分算子,如Sobel算子、Prewitt算子[9]和Roberts算子,它们对噪声较为敏感,检测出的边缘比较粗,定位精度比较低,容易损失如角点这样的细节信息。最优算子Canny算子[10,11]对边缘的定位比较准确,但对噪声过于敏感,容易检测出伪边缘;高、低阈值修补不连续轮廓需要人为设定高、低阈值,没有顾及梯度图像中的信息特征,不具有自适应能力,一方面无法消除局部噪声干扰;另一方面会丢失灰度值变化缓慢的弱边缘,导致目标物体的轮廓边缘不连续,实验效果不是很好。

此外,传统的边缘检测大多以灰度图像作为处理对象,而彩色图片的灰度图像并不能表现原图的所有边缘特征,在处理过程中容易丢失部分边缘。鉴于此,本文先采用直方图均衡化模块对图像的R,G,B图像进行处理,提高图像的对比度;之后采用Canny算子和Sobel算子的优化组合进行边缘检测;最后再进行融合得到最终的边缘检测结果。模型结构图如图2所示。

2.2 自动代码生成

模型搭建完成后需要设置模块参数和Configuration Parameters参数,要特别注意Real-Time-Workshop页面中System target file下.tlc文件的选择,所选文件的文件名因Matlab版本不同而有差别(可能为ti_c6000.tlc,idelink_ert.tlc,详见各版本的Matlab用户说明)。其他需要设置的参数如下:

Stop time:inf

Type:Fixed-step

Solver:discrete(no continuous states)

Fixed-step size(fundamental sample time):auto

Configuration Parameters中的其他参数为默认设置即可。单击Real-Time-Workshop页面的Build按钮,ETTIC6000,Matlab,CCSLINK和CCS将按1.1节所述的原理协同合作,自动在CCS中生成工程和标准的C语言代码,最终CCS自动对代码文件进行编译链接并将生成的.out文件下载到DM642EVM板中运行。Matlab的Command Window会显示整个过程的进度。

3 实验结果和对比分析

本文以一幅512×512图像为例进行边缘检测验证。可执行代码自动运行后先通过CCS界面的View→Watch Window的Watch 1窗口查看变量值,再根据查得的变量值设置View→Graph→Image的Graph Property Dialog对话框,点击OK按钮后CCS便会显示出该变量值对应的图像。原图像、经典算子的边缘检测结果、Canny算子的边缘检测结果和本文基于DM642的边缘检测结果分别如图3~图6所示。

图4中WNR表示Canny算法中弱边缘和无边缘像素近似百分比。可以看出,经典梯度算子检测出的边缘图中弱边缘缺失比较严重(各图的左半部分较明显),且检测出的边缘都较粗,检测效果不理想。图5表明,Canny算子取低阈值时可以检测出图像的所有边缘,但是伪边缘太多,使得真实边缘难以辨认;取高阈值时又会造成弱边缘的缺失。很难找到一个最佳阈值,因此实用性不强。图6表明,使用文中的边缘检测方法,Canny模块阈值的选取对检测结果几乎没有影响,且得到的边缘检测结果都是非常清晰、全面的细化边缘。大量实验表明,只要模型中Canny模块的阈值不大于90就可以得到非常清晰、全面的细化边缘。

4 结语

针对传统DSP代码生成方法效率低,难度大等缺点,重点介绍了自动代码生成技术的原理及实现方法,充分利用了Matlab简单易用及DSP处理器执行效率高的优势,快速生成了标准化的C语言代码和DSP可执行文件,极大地缩短了代码的开发时间。实验结果表明,自动生成的代码运行良好,可以检测出更加全面、清晰的细化边缘,充分体现了该自动代码生成方法的可行性和实用性。运用该代码生成方法,DSP程序设计人员可以专注于整体框架的设计和模型性能的完善,从而最大限度地提高代码生成效率和代码质量。

参考文献

[1]林成文,吴成富.机载软件图形化设计与自动代码生成研究[D].西安:西北工业大学,2007.

[2]The MathWorks,Inc.Embedded IDE LinkTM4user's guide[R].Natic,MA:The MathWorks,Inc.,2010.

[3]The MathWorks,Inc.Target support packageTM 4user'sguide[R].Natic,MA:The MathWorks,Inc.,2010.

[4]The MathWorks,Inc.Link for code composer studio devel-opment tools[EB/OL].[2006-07-28].http://www.ic72.com/news/15891.html.

[5]李真芳,苏涛,黄小宇.DSP程序开发:Matlab调试及直接目标代码生成[M].西安:西安电子科技大学出版社,2003.

[6]谢红梅,俞卞章.基于小波变换数据融合的图像边缘检测算法[J].电路与系统学报,2004,9(2):118-121.

[7]Texas Instruments.Evaluation module(EVM)for theTMS320DM642quick start installation guide[R].US:Texas Instruments,2003.

[8]杨帆.数字图像处理与分析[M].北京:北京航空航天大学出版社,2007.

[9]BOSE T.数字信号与图像处理[M].吴镇扬,周琳,译.北京:高等教育出版社,2006.

[10]李弼程,彭天强,彭波,等.智能图像处理技术[M].北京:电子工业出版社,2004.

代码生成 篇7

在软件开发中使用代码生成工具是一种可行的解决方案。用代码生成工具生成代码能够保证代码风格的一致,提高代码可读性;统一开发架构,提高信息系统架构的健壮性;减少手工编码量,提高软件开发速度,缩短开发周期。目前已经有了一些关于代码生成的研究,但目前已有的代码生成工具或无法将系统概念设计与软件实现技术分离[2],或无法满足由可视化设计直接生成完整功能代码的要求。本文给出了一个基于业务模型和界面模型的代码生成工具的设计与实现方案。该方案在对大量企业信息系统的业务逻辑和操作界面进行分析的基础上,抽象定义了企业信息系统的业务模型和界面模型,代码生成工具基于上述模型生成基于特定平台的代码,使得开发人员几乎不用编写代码即可实现完整的业务功能。业务模型和界面模型与具体的平台技术无关,实现了系统设计与软件技术的分离。

1 企业信息系统分析

1.1 业务逻辑分析

企业信息系统的业务逻辑可理解为对业务数据进行某种业务操作[3,4]。

对于业务数据,企业信息系统中业务数据的存储方式主要是关系型数据库[5]。在业务实体模型中,业务逻辑由实体间一对一、一对多、多对多这三种关系来表示,在软件设计时,一个实体映射成一个数据库表,业务实体之间的关系转化成数据库表之间的外键关系。

对于业务操作,企业信息系统中的业务操作主要是对业务实体的增删改查,复杂的业务逻辑操作也是对多个业务实体的上述四种操作的组合。

由上述分析可知,企业信息系统的业务逻辑可归结为对数据库中单表或关联表的增删改查操作。由于操作的规律性,会导致重复编写大量具有相似结构的代码,因此可以将代码中共性的地方抽取出来作为模板,将非共性的地方通过参数定义,由代码生成工具批量生成代码。

1.2 操作界面特征分析

企业信息系统的界面以实用、易操作为主,界面简洁。操作界面一般可划分为操作按钮区、查询条件区、数据展示区三个部分,数据区一般采用图、表格或树的方式展示数据。

通过对企业信息系统的操作界面进行提炼和归类,划分界面结构,提取界面元素,形成了基础的界面模型模板库。模板库内置常用的界面模型。用户可以对基础界面模型进行调整,并可以定制生成新的界面模型加入模板库。典型的界面模型见表1。

通过界面模型模板库内置的模板和用户自定义模板,可以涵盖企业信息系统90%以上的操作页面,通过代码生成工具完成页面的生成将大大减少开发工作量,提高开发效率。

本代码生成工具通过上述两种模型的定义,实现代码自动生成的功能。下面将给出代码生成工具的具体设计。

2 代码生成工具设计

2.1 总体设计

2.1.1 总体架构设计

界面模型定义系统界面的组成、布局和样式,业务模型定义界面要展示的数据,通过界面模型和业务模型可以完整定义一个业务功能。本代码生成工具对于界面模型库中的界面模型,可以直接匹配不同的业务模型实现业务数据的增删改查功能,开发人员无需编写任何代码。对于个性化的、复杂的界面可先进行分解,再应用本代码生成工具进行辅助开发。

代码生成工具的总体架构如图1 所示。

代码生成工具由模型编辑器、模型验证组件、模型解析引擎、代码生成引擎、界面配置向导、模板库等6部分组成。

(1)模型编辑器,提供可视化的操作界面,通过拖曳方式完成业务模型和界面模型的创建和修改。

(2)模型验证组件用于对模型进行合规性校验。

(3)模型解析引擎实现模型的解析功能。

(4)代码生成引擎根据界面模型和业务模型生成前后端可执行代码。

(5)页面配置向导用于界面模型的数据源配置和界面模型参数配置,实现了界面模型和业务模型的绑定。

(6)模板库包含了界面模型模板、控件代码模板和后端代码模板,模板包含可变部分和不变部分。其中界面模型模板用于生成界面描述文件,和使用的平台技术无关;控件代码模板和后端代码模板用于生成最终的前后端代码,模板文件的定义格式和采用的模板技术(如Velocity、Freemarker[6])相关,模板文件中的代码片段与选择的开发平台(如J2EE、.NET等)有关。

2.1.2 代码生成流程

使用代码生成工具生成代码的流程主要包括4 个步骤:

(1)对业务功能进行抽象,提取出业务模型,完成业务模型的创建;

(2)代码生成工具对业务模型进行验证、解析,根据后端代码模板生成基于特定平台的后端代码;

(3)打开界面配置向导,选择界面模型并为模型配置业务模型实体作为数据源生成完整的界面模型文件,界面模型文件生成之后可通过界面模型编辑器进一步修改;

(4)代码生成工具对界面模型文件进行解析,根据界面控件代码模板生成前端代码。

生成的前后端代码无需修改,可以作为基于平台的一个业务功能的完整实现。

该代码生成工具有良好的可扩展性和灵活性, 用户可根据需要新增模型和代码模板, 从而不断丰富代码生成工具的基础信息库。

2.2 业务模型设计

2.2.1 业务模型定义

业务模型OM是一个二元组,描述为OM=<{Business Entity},{ Association}>,其中,Business Entity为业务实体,Association为实体关系[7]。

定义1

业务实体Business Entity定义为Busi-ness Entity=<{Property},{Operation}>,其中Property表示实体属性,Operation表示对实体的业务操作。实体属性信息参照数据库表字段进行设计,但描述信息却多于一般的字段,除了字段长度、字段类型等常规属性外,还包括校验器和字段的显示控件类型等元素,以满足业务逻辑对数据的特殊验证需求和不同页面对字段显示形式的要求,保证数据一致性。

定义2

实体关系Association定义为Associa-tion=<one2one,one2many,many2one,many2many>,表示实体间一对一、一对多、多对一、多对多的关系。

2.2.2 业务模型生成

代码生成工具提供了手工建模、业务模型库导入和数据库逆向建模三种业务模型创建方式。代码生成工具提供可视化编辑器,通过拖曳的方式手动完成业务模型的创建。业务模型库导入可以将公共模型库中共享的业务模型导入到代码生成工具中实现模型复用。数据库逆向建模提取关系数据库中的数据模型,解析转换成业务模型。数据库逆向建模的步骤如下:

(1)根据数据库源配置信息连接数据库,列出所有的数据表;

(2)针对每个数据表,创建业务实体模型,并执行查询语句,通过表名获取字段的元数据信息;

(3)提取字段的类型、名称、是否为空、是否为主键等属性,填充业务实体的Property属性;

(4)获取表格的外键信息,构造业务模型的Association信息。

代码生成工具通过业务模型库来保存业务实体,实现对业务实体的一次创建多次使用,这样既有利于保持业务定义的一致性,又有利于提高开发效率。在业务模型库中内置了人员、组织机构、角色等企业信息系统通用的业务实体,简少了设计工作量,实现了在不同企业信息系统中的模型共享。随着代码生成工具的不断使用,业务模型库的规模将不断壮大,业务模型的设计复用率和代码的开发速率都会得到提升。

2.3 界面模型设计

2.3.1 界面模型定义

界面模型定义页面的结构和前端事件处理逻辑[8],采用压缩包方式存储,这样即实现了模型的封装,又减少了存储空间。每种界面模型采用一个zip包定义,包括界面结构描述文件和页面控制逻辑两部分。

(1)界面结构描述文件

界面结构采用一个三元组描述:UI=< {View},{Business Entity },{Permission}>,其中View表示1 或多个可视化组件组合,Business Entity表示和可视化组件绑定的业务实体,Permission表示对界面组件及实体的操作权限。

(2)页面控制逻辑

前端的页面控制逻辑主要是各控件的事件响应代码,控制逻辑在文件中单独定义体现了视图和逻辑相分离的原则,根据页面的数目,页面控制逻辑包含一个或多个JS文件。

2.3.2 前端代码生成

代码生成工具的前端代码生成引擎解析界面模型文件,根据控件类型,查找控件模板库,获取控件模板,按照界面布局拼装控件模板形成最终的界面代码文件。前端代码生成引擎主要包含界面控件库和控件模板库两部分。

(1)界面控件库

界面控件库和界面描述文件可用的控件标签一一对应,定义了用于界面展现的所有控件,包括基本控件、容器类控件、数据控件、编辑器控件等,简化的控件库如图2 所示。

界面控件库用于保存对界面描述文件的解析结果,是界面模型和控件模板的桥梁,实现了模型与特定平台的对接。

(2)控件模板库

控件模板是一段参数化的代码片段,用于生成最终的源代码。对于界面控件库中的每个控件,都有相应的模板。对于源代码结构相同的控件采用通用模板的方式以减少模板库冗余。

一个Web页面往往包含大量控件,如果采用标签方式定义页面控件及布局,标签的嵌套会造成页面代码结构复杂,较难实现模板的提取和代码自动生成。因此代码生成工具采用JS编码方式定义页面控件,同时为了规范代码结构,采用结构化代码块的方式定义界面模板。一个Web页面的模板定义见表2。

页面上的每一个控件的模板定义见表3。

在前端代码生成时,对每一个控件提取表3中的四个部分插入到表2 Web页面模板的相应区域以完成整个Web页面的代码生成。

2.4 代码修改

代码生成由代码生成引擎根据模型来生成代码。当业务功能需要调整时,用户只需要修改业务对象模型和界面模型,由代码生成引擎完成对代码的重构。代码生成引擎对用户扩展的内容进行标识和记录,形成操作队列,当用户修改完模型进行代码生成时,代码生成引擎自动将队列中的用户扩展应用到模型中,完成新的代码生成,不会破坏用户对原模型的自定义扩展。业务模型修改时的代码重构过程如图3 所示。

3 代码生成工具实现

代码生成工具基于J2EE平台开发,采用开源技术实现。

由于XML具有灵活、可扩展和平台无关的特点[9,10],业务模型定义和描述采用XML文件形式。同时,在模型定义时预留了扩展标签,以适应业务逻辑的变化。

在Java中用于解析XML的技术很多,主流的有DOM、SAX、DOM4j[11]。DOM基于树的结构,需要加载整个文档,可以对XML进行随机访问,但对于大文档成本高;SAX基于事件驱动,消耗内存少,但不能随机访问XML中的节点,不能修改文档;DOM4J是一个优秀的Java XML API,具有性能优异、功能强大和易用等特点,越来越多的Java软件(包括Sun的JAXM)都在使用DOM4J来读写XML。因此在模型解析时采用了DOM4J技术。业务模型文件的解析如图4 所示。

界面模型压缩文件的解析使用zip4j.jar包,相对于JDK自带的API,zip4j采用UTF-8 编码,支持中文和密码,同时支持多种压缩算法,功能强大且使用简单。

界面模型和业务模型的可视化编辑器,采用GEF(Graphical Editing Framework)框架开发,以插件方式集成到Eclipse平台。GEF是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。 GEF提供了标准的MVC(Model-View-Control) 结构,降低了模型和视图之间的依赖,可以根据需要选择任意模型和视图的组合,而不必受开发框架的局限[12,13]。GEF具有良好的扩展性,可以方便定义图形的样式、风格,也可以自定义连接线的路由方式。

代码生成使用Velocity技术。Velocity采用简单而强大的模板语言VTL来渲染页面, 能保证在Dreamwaver之类的可视化编辑器中正常显示;模板可以是任意扩展名,可以直接在浏览器中看到效果;渲染速度快[14,15]。界面模型控件模板定义时,提取的通用控件代码模板如图5 所示。

控件模板和Web页面模板均采用结构化块方式定义,简化了代码拼接时的处理逻辑,提高了代码生成速度,使生成的代码结构清晰易懂,便于用户扩展。

4 代码生成工具应用

下面以企业应用系统中常用的部门人员管理为例,介绍代码生成工具的使用方法。部门人员管理包含两个业务实体:部门和人员,部门和人员之间的关系是一对多的关系。部门信息包括ID、部门名称、部门类型,人员信息包括ID、姓名、电话、入职日期、所属部门。

(1)通过拖曳方式在业务模型设计器中完成业务模型的创建,代码生成工具自动为每个业务实体添加通用的增删改查等方法,简化用户操作。创建的业务模型如图6 所示。

(2)代码生成工具根据业务模型生成后端代码及数据库脚本。

(3)在界面模型生成向导中选择界面模型,本例采用“主从表”模型,为界面模型配置业务模型作为数据源,代码生成工具根据界面模型生成前端代码。

代码生成工具对于界面模型库中的界面模型可直接生成可运行代码,对于更加复杂的个性化界面需求可以在预置模型的基础上使用可视化界面设计器进行调整。代码生成工具已集成到国家电网统一应用开发平台中,2013 年至今,共有87 个项目使用代码生成工具进行开发,包括统一电力市场、电力生成管理PMS2.0、基建管控等百万级代码行项目。目前统一电力市场项目,基建管控项目已经上线试运行。系统代码行数及自动生成代码行数对比见表4。

实践证明,使用代码生成器能够减少开发人员80%以上的编码量,提高开发效率。

5 结束语

本文提出了一种基于业务模型和界面模型的代码生成工具的设计和实现,在对企业信息系统进行广泛分析的基础上,提出了企业信息系统(的业务模型和界面模型的概念,开发人员只需完成模型的设计,由代码生成工具实现代码生成,实现设计重用。实践证明,使用代码生成器能够大幅度减少开发人员的编码量,提高开发效率;统一开发架构,规范代码结构,提高代码质量。

摘要:企业信息系统在企业的经营管理中发挥着至关重要的作用,然而,在企业信息系统的开发过程中,存在着相似代码重复编写、系统架构不一致、开发周期长等问题。目前已有的代码生成工具或无法将系统概念设计与软件实现技术分离,或无法满足由可视化设计直接生成完整功能代码的要求。针对上述问题,设计了一种基于业务模型和界面模型的代码生成工具,开发人员只需要对业务模型和界面模型进行可视化设计,由代码生成工具完成完整的代码生成功能。当模型修改时,由代码生成工具完成代码的重构。目前该代码生成工具已应用于国家电网公司统一应用开发平台中,实践表明,代码生成工具的使用可以减少开发人员80%以上的编码量,实现设计成果的复用和共享,统一企业信息系统的开发架构,提高企业信息系统开发的质量和效率。

教学生成与生成教学 篇8

一、基于生成的两种教学境界:教学生成与生成教学的不同价值诉求

在认识上和较多语境中, 常常把教学生成与生成教学混为一谈, 普遍未能界定它们之间的区别。其实, 教学生成与生成教学处于两个不同的环节和层面, 有着不同的教学形态特征。教学生成是通过教学促使生成。如果教师在课堂上尊重学生生命的意义和价值, 创设有活力的教学情境, 在互动、对话中欣赏学生, 鼓励学生, 共享智识, 就会发现课堂教学具有生成性特征。生成教学是当有效生成发生后, 教师予以充分关注和捕捉, 抓住契机, 灵机创生境遇教学, 使教学生成成为即时“活”的课程资源纳入教学过程, 成为课堂教学新的生长点, 将师生互动和知识探索引向深处。教学生成与生成教学表面上看只是一个顺序的颠倒, 实质上他们承载着不同的价值诉求, 赋有不同的实践意蕴。

细致分析教学生成与生成教学, 可以发现它们之间在时序、路径、致力、目标及意义均有着明显的区别。

但在区分教学生成与生成教学两种不同的“时场”、“态势”、“标尺”的同时, 也要看到它们之间的联系和依存关系。它们在课堂教学中不是孤立的形态或割裂的过程, 而是一个联系紧密、无缝链接的连续过程。循着教学———生成+利用 (教学) ———再生成———再利用 (教学) 这一动态演进路线, 在生成和利用的持续不断的反复交替中, 不断将教学过程向纵深推进, 使课堂教学在不同节点、不同阶段高潮迭起, 推动学生的知识建构和认识的发展。

笔者提出教学生成与生成教学的区别与联系, 主要不是为了标新两个不同概念, 而是为了确立教学与生成的两种结合形态, 界定两种不同的境界追求, 细分研究界面和关注视域, 区分考量看点和评价尺度。对于课堂教学来说, 将裨益于教师在课堂教学中凸显教学进程中的两个不同阶段, 从混沌一体走向分层实施, 从而促使教师在课堂上每时每刻清醒明晰处于何种阶段———是致力于促进生成、提升“生成力”, 还是利用生成、提升“利用力”?并深入探讨两种不同的实现路径, 以实施有着两种不同致力追求的教学实践, 最终达成完美的课堂教学境界追求。

二、教学何以引发生成:教学生成的引发条件

教学的有效生成是学生发展的外在表现, 是“看得见”、“感觉到”的生长, 是教学生命化的成长绩效。可以说, 生成是一种被引导的创造, 是教师所创设的教学情境的映射。

那么, 什么样的教学情境才是导向生成、有价值的教学情境呢?从基本特性上说, 就是尊重学生自由参与的权利、平等互重、宽容接纳、对话协作及采取多元化激励评价。具体地说, 就是注重创设问题探究情境和互动合作情境, 教学生成的景况决定于这两者的联袂表现, 植根于它们的合璧。

1. 创设问题探究情境

如何创设足以启人心扉的情境呢?最重要的就是要诱在关键处, 导在难点上, 探在方法上。教学之功贵在设疑、诱导, 一个好的问题探究情境, 应问在学生思维的起点上, 要善于在解决问题策略的“关节点”、综合性运用知识的“联结点”、拓宽思维的“发散点”上, 适时的激疑问难。创设问题探究情境的基本路线图就是:第一, 呈现有价值的核心问题。第二, 引导学生探究。第三, 及时提供有效指导。第四, 激励探究行为, 总结探究成果。

2. 创设互动合作情境

作为“制动”教学生成的“遥控器”, 创设互动合作情境, 就是在课堂教学中通过教师的调控和导演, 实现学生作为主体的共同参与, 通过师与生、生与生的互动合作、教学交往, 协同完成学习任务。互动与合作密不可分, 互动为了合作, 合作依赖互动。这样, 就自然会碰撞出灵感和智慧的火花, 课堂生成将自然成为一种常态。

三、生成何以成为动态的教学资源:生成教学的机智性策略

教师一方面要期待教学生成的有效发生, 另一方面要捕捉利用好生成性资源, 进行生成教学, 以期形成新的生成点, 持续生成。目前, 在基于生成的课堂生态环境中严重存在着生态失衡, 生成教学明显逊色于教学生成, 普遍没有把生成教学视为比教学生成更为重要的看点、更为高贵的表现。随着课改的深入, 要从主要关注教学生成, 转移到重在提升优化生成教学上来, 在课堂教学评价中要把能否灵机创生生成教学作为一个标高尺度, 把课堂中让渡多少节点、多长时段给生成教学, 作为评价一堂好课的重要衡量标准。如果把生成的每一个细节用到极致就是课程创新, 如果利用生成性资源引跑新的教学进程就是课程建构, 生成教学是课堂教学艺术的高端体现。

生成教学比教学生成有着更高的要求, 考验的是教师的教学机智, 是教学艺术中最具灵活性、智慧性的重要看点。生成性教学不可预设, 只可灵机创生。

如何藉以生成、动态创生生成教学呢?仅有足够的自觉意识还不够, 更重要的还要具备生成教学的教学机智和艺术性本领, 具有生成性资源的采撷和利用的有关技巧, 以臻于具体情境下的游刃有余。

1. 借题发挥策略

课堂上教师要善于搜索学生生成的各种有用的疑点, 以疑引趣, 借题发挥, 在引导学生深入思考疑点的过程中推进教学进程。

2. 顺水推舟策略

由于学生的经验、体验、感悟丰富多样, 常常会在课堂上提出不同的方法、思路, 不同的探求路径。如果教师因势利导, 顺其自然, 循着学生的思路另辟蹊径, 往往能引出不一样的精彩, 收到意想不到的效果。

3. 追根究底策略

在同学们暴露出思维不够深入、产生争议的时候, 正是教师利用疑义向深处挖掘的及好时机, 就应及时顺理成章的“引一引”、“探一探”, 追根究底的将学生的思维引向深入, 让学生在“探个究竟”中获得知识。

4. 推波助澜策略

课堂中通过学生与文本的对话, 常常会有自己更深入的理解, 或奇思妙想, 或有感而发, 生成新的知识, 这时, 高明的教师不应止于此, 而应锦上添花, 推波助澜, 让学生充分展示自己的聪明才智, 珍惜从学生头脑中发出的波, 集波成澜, 再推给学生, 以引起思维“共振”, 将教学引向高潮。

代码生成 篇9

关键词:代码自动生成,异构平台,Python,双引擎

0 引言

随着通信信号处理技术不断发展,面临着无线通信体制更新换代速度快、软硬件升级频繁、研制成本高、开发周期长等问题[1]。为应对多体制通信处理的快速更新,基于软件化定义的异构通信处理平台成为了近年来的研究热点[2]。

虽然异构通信处理平台性能良好、适用性广,但是由于其涉及软硬件类型繁多,导致了开发过程复杂、开发周期长、分工合作衔接困难等问题[3]。在庞大复杂的平台系统中,一点改动就可能牵一发而动全身,导致程序的不一致性。为了降低软件开发强度,缩短开发周期,减少代码的重复书写,一直以来软件开发者都致力于代码自动生成方面的研究。作为复用技术的核心和基础,代码自动生成是提高软件开发效率的有效手段[4]。自动代码生成器不仅减小了开发人员的工作量,同时提高了工程的一致性,更易于分工与维护。

针对异构通信信号处理平台在实时性、分布式、可靠性等方面的要求,自动代码生成器需应对异构平台中的实时处理,以及编程一致的系统可靠性[5]。为了提高软件开发综合效率,实现组件的快速开发,缩短新算法从理论到应用的开发周期,本文提出了一种新型的代码自动生成器工具。该生成工具包括框架配置文件向导、描述要素宏定义文件实时更新、硬件驱动源代码框架生成、软件组件源程序框架生成、软件包组装以及装配粘合代码的自动生成等。实测分析表明,该生成工具对于异构通信平台软件快速开发、硬件迅速映射、用户便捷应用等方面有显著突破,是异构通信信号处理平台实现其实时性、分布式、可靠性的重要工具。

1 自动代码生成技术

目前,自动代码生成技术应用十分广泛,在UML建模[6]、模型驱动框架(MDA)[7]、数据库表创建[8]等方面都有所突破。但是在异构通信处理平台上的代码自动生成技术仍不完善,只在异构多核处理器方面有少量研究[9]。

基于异构通信信号处理平台的代码自动生成关键在于建模抽象技术[10]、复用技术[11]、Python引擎技术[12]。代码主要分为3种类型[13]:第一种是框架代码中的固定部分,无需做任何修改;第二种代码指大部分不用修改,只对有相应的输入来源和逻辑规律的代码进行修改;第三种是没有任何规律可循的特殊代码,这类代码须由专业人员填写,无法自动生成。第一种代码可直接使用,第三种代码留白待用,第二种代码即需要实现自动生成的主要代码。

代码自动生成主要由元数据、代码模板、数据模型和代码生成引擎组成,其流程如图1所示。

(1)元数据:元数据是对异构通信处理平台资源的一种描述,通过建模实现,是数据信息传递的基础。

(2)代码模板:代码模板是用户想要生成的源代码模型,它表示源代码中的共性部分,即无需修改的部分。

(3)数据模型:数据模型是代码自动生成框架的基础模型,具有高度的抽象性。它表示了源代码中的个性部分,即需根据规律自动生成的部分。

(4)源代码:源代码是代码自动生成的成果,即通过自动生成形成的可加入工程直接使用的完整代码。

2 异构平台的软件体系架构

异构通信处理平台包括对ATCA、VPX、CPCI、专用PC等已有硬件处理平台的兼容,可以统一地开发运行环境实现软硬件的无缝交互,实现多功能应用组件的高度共享。其软件体系架构分为硬件层、板级支持包层、操作系统与驱动层、硬件抽象层、核心服务层和应用层。

一般地,为了实现异构通信信号处理平台中多处理器和软件组件的升级继承与资源共享,其自动代码生成器需满足平台框架需求,具体层级分布如图2所示。通信处理平台的自动代码生成器提高了软件开发的综合效率,实现硬件驱动和软件组件的快速开发,缩短了新算法应用的实际周期,为通信领域的快速发展提供了良好的平台。

3 自动代码生成器实现

3.1 操作系统与驱动层代码生成

在操作系统与驱动层,异构通信处理平台的自动代码生成工具主要涉及硬件设备驱动的自动代码生成。处理器包括作为设备的处理器和平台中的处理器。每个硬件设备驱动都要实现如表1所示的功能。

驱动接口名称由功能名称和数据库存储的板卡类型号、处理器类型码和处理器号组成。板卡类型号表明处理器所在板卡信息,确定处理器归属。处理器类型码表明了处理器的类型、处理方式和编程模式。处理器号是对某板卡上具体处理器的确定。由以上三方面的信息共同确定系统中唯一一个处理器,由此定义驱动函数。

根据组合形成的函数名,通过函数模板实现驱动接口的定义、注册和函数框架生成。首先根据函数名形成相应的驱动接口定义文件,驱动接口注册文件和驱动接口函数文件。根据函数定义、注册、函数框架的函数模板,自动完成不同文件的驱动定义和注册。

3.2 核心服务层代码生成

3.2.1 配置文件向导

在核心服务层,异构通信处理平台的自动代码生成工具主要涉及配置文件向导和描述要素宏定义。配置文件向导主要是针对平台配置时的可视化向导,主要方面如表2所示。用户可根据可视化向导对平台进行配置,由具体模板模式以及用户对平台的配置信息,形成系统可识别的配置文件。

3.2.2 描述要素宏定义

描述要素是对平台系统的整体描述,包括软硬件物理元件、连接关系和功能描述。根据对异构通信处理平台建模,元数据结合特定编码形成宏定义,模板变量如表3所示。自动生成要素宏定义保证了系统扩展升级时的一致性,是实现平台高可靠性和可扩展性的保证。

3.3 应用层代码生成

3.3.1 软件组件函数框架

软件组件源代码主要包括对应用功能组件的定义和实现。软件组件的函数如表4所示。组件函数名由组件名称和功能名称组成,创建对唯一组件的初始化、数据处理和参数配置等。根据组件名,在数据库中查找组件对应的参数名和参数类型,为实现数据结构定义提供数据。根据组件名称,由组件名作为定义文件和函数文件的名称创建组件应用文件。

3.3.2 软件装配脚本

软件装配的脚本生成是通信处理平台的中心环节。根据通信处理流程形成的脚本文件,记录了组件功能和连接方式,是软件化处理的核心。Python脚本可直接解释执行,省去了编译时间;并且可与多种语言保持良好的兼容性和互操作性[14]。用Python做脚本文件可无缝调用C模块程序,既运用了C的快速计算功能,也兼具了Python简单的流模式记录特性,是软件装配脚本的良好选择。文本文件对操作系统的适应性更强,增加了系统可移植性,但是需要设计文本格式和解析引擎。

为保证系统实时性和可扩展性,软件装配的脚本采用双解析引擎,以txt文本和python文件共同作为装配脚本,如图3所示。两种脚本可视化应用对用户没有区别,可根据自己熟悉的编程模式选择脚本类型。在应用运行时,双引擎解析自动识别应用描述脚本,执行应用。

4 实测分析

为验证本文提出的自动代码生成器的有效性,将以一个QPSK调制解调信号处理流程为例,在实际系统上进行测试。

4.1 实验系统体系组成

本次实验系统的硬件平台以PC作为域管理器,ATCA和VPX作为处理平台。ATCA平台包括两块板卡,板卡上有DSP和FPGA。VPX包括一块板卡,板卡上有FPGA。其中,DSP类型为TMS320C6678,FPGA类型为XC5VLX50T,硬件平台拓扑如图4所示。

以QPSK调制解调信号处理流程为例。Txdemo组件的功能是产生1 024长度的二进制信号,并通过输出端口发送出去,Rxdemo组件的功能是接收信号,并且将信号保存到指定文件中,方便用户查看。首先由Txdemo信源发送数据,经QPSK调制模块调制,通过AWGN信道后,再由QPSK解调模块解调,最后将解调后的数据保存在Rxdemo中。其中,Txdemo组件和Rxdemo组件部署在PC上,QPSK调制模块和QPSK解调模块部分别部署在ATCA的两块处理板上,AWGN信道部署在VPX的处理板上,具体部署如图5。

4.2 实验结果及分析

QPSK调制解调波形结果如图6所示。结果与实验预期结果相符,印证了框架的可行性,即自动代码生成的编程一致性和可靠性。应用模块分布在不同的处理器上,满足代码自动生成的异构平台分布性。在系统运行过程中,除了模块功能代码之外,均由代码自动生成实现。各模块的运行时间如表5所示。经计算,框架代码生成时间开销占应用总开销的2%,满足实时性要求。综合验证结果,基于异构通信处理平台的自动代码生成技术满足了系统对实时性、分布式、可靠性等方面的要求,证明了自动代码生成的有效性。

5 结论

本文基于异构通信处理平台框架,根据其对实时性、分布式、可靠性等方面的要求,实现了该框架的自动代码生成。实现了框架配置文件、要素宏定义文件、硬件驱动源代码框架、软件组件源程序框架以及装配粘合代码的自动生成,加强了平台中软硬件编程的一致性、缩短了开发周期,大大减少需要手工编写开发和测试代码的工作量,提高了软件开发的效率。

捕捉契机 精彩“生成” 篇10

【关键词】动态生成 生成教学 精彩

一、构建英语课堂动态生成的原则

1.针对性原则。传统的教学过分强调课堂上规范的流程和缜密的操作,以求得课堂的天衣无缝。生成教学则需要根据学生的具体情况,随时调整教学过程,如发现有“瞠目状态”(对教师的讲解或引导难以理解)或“不屑听取状态”(可能对教师所讲的感到过于浅显而繁琐)时,就要及时采取反馈措施,调节节奏,以满足学生的实际需求。

2.开放性原则。动态生成的教学不再是教师主宰课堂、学生跟着走,而是具有开放性的,强调以人为本。既要尊重学生的人格,关注学生的个体差异,关注学生的学习兴趣和经验,引导学生主动地、富有个性地学习。这就要求教师有意拓宽学生的学习领域,关注学生的发展,关注学生的学习过程,关注学生的学习情感和情绪体验,把“一切为了学生的发展”作为教育行为的出发点和归宿,展现学生的主体地位,真正使学生成为学习的主人。

二、捕捉精彩瞬间,促进精彩生成

1.在“兴奋”中生成。托尔斯泰说:“成功的教学,所需要的不是强制,而是激发学生学习的兴趣。”兴趣是学习的动力,当一个学生对某个问题发生兴趣时,大脑中有关学习的神经细胞就会处于高度兴奋的状态,而与之无关的神经细胞则处于抑制状态。此时学生心情愉快,学习效率极高。这一时刻被称为“兴奋点”。教师必须把握时机,挖掘学生的兴奋点,最大限度地调动学生的积极性,他们就会学得更主动,更富有情趣,会在整个学习过程中都充满了欢乐。只要善于捕捉和创造学习兴奋点,唤醒和发掘学生学习语言的潜力,精彩就会无处不在。

2.在“错误”中生成。布鲁纳曾经说过:“学生的错误都是有价值的。”学生的错误是教学的财富,学生在不断发生错误、纠正错误的过程中,获得知识提高能力,增进情感体验。教学中的“错误”,是重要的课程资源,善于挖掘并运用“错误”将会给课堂教学带来活力。捕捉学生学习过程中出现的错误,发现错误背后所隐藏的教学价值,是教师教学机智的表现。引导学生纠错,更是一种独特的教学艺术。

3.在“随机”中生成。教学活动不仅是井井有条、科学规范、紧凑严密的论文体文本,同时也可以是充满诗意的散文体。课堂上,在把握教学基本目标的前提下,应尽可能多地给师生双方留下自由创造的空间,而不是使课堂成为教师先行设计的“彩排”。及时捕捉课堂信息,促成动态调控,能让课堂教学充满生命的趣味,让师生生命的活力真正在课堂上焕发出来。英语教学讲究在情境中让学生得到语言训练,但是模拟的情境毕竟与真实的情境是有差距的。怎样让学生在自然的环境中学好语言呢?经过反复实验,我认为“随机”不失为一个好方法。

4.在“细微”处生成。实施新课程后,教学方式和教学理念已经发生了很大的变化。今天的课堂教学,再也不是一味“师问生答”的模式化教学。在课堂上,我们可喜地发现,无论在哪个教学环节,都会有学生思维的顿悟、灵性的迸发。面对学生情不自禁的“插嘴”,老师应该给予支持与关注,认真倾听他们的“高谈阔论”,因为在学生的“插嘴”中,能挖掘出丰富的课程资源。这样,才能真正赋予学生英语学习的自主权,与学生共同构建起英语学习的“互动网”,既能引发学生的积极性,又能达到教学目的。

三、体会与启示

1.尊重学生,和谐课堂。学生作为一个有创造性的活跃生命体,他们带着自己的知识、经验、思考、灵感参与课堂教学,他们是课堂教学的主体,更是教学“资源”的重要构成和生成者。所以我们要了解每一位学生,尊重每一位学生,善于倾听,宽容错误,使学生敢于发表意见,勤于思考问题,乐于同教师对话,从而使师生之间达成相互碰撞、接纳、融合的同构共生状态。

2.积累反思,关注细节。美国心理学家波斯纳提出了教师成长的公式:成长=经验+反思。在七年级英语课堂中利用生成性动态教学资源服务教学,不仅是一种教学智慧,在某种程度上也是对英语教师自身语言素养的一种考验。教师要培养自己敏锐的洞察力和灵活的调控能力,不忽略课堂教学过程中任何有益的细节和突发性事件,巧妙处理,从成功案例中积累经验,从失败案例中吸取总结和教训,不断提高对课堂“生成”的灵敏度和调控能力。参考文献:

[1]雍毅.转换生成理论对中学英语教学的启示[M].国家基础教育外语教学研究出版.2006.

注:本文为网友上传,旨在传播知识,不代表本站观点,与本站立场无关。若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:66553826@qq.com

上一篇:变电站运行管理制度 下一篇:变电运行之安全生产论文