[毕业论文]软件工程关于代码自动生成技术的分析.doc
《[毕业论文]软件工程关于代码自动生成技术的分析.doc》由会员分享,可在线阅读,更多相关《[毕业论文]软件工程关于代码自动生成技术的分析.doc(49页珍藏版)》请在三一办公上搜索。
1、目录前 言1第一章 概述21.1背景21.2研究代码自动生成技术的必要性41.3 本课题的主要研究内容6第二章 代码自动生成技术72.1 代码生成的机理72.2 三层B/S架构82.3 设计模式92.4 反射技术122.5 缓存技术132.6 XML技术152.7 语法高亮显示17第三章 系统分析与设计183.1 系统分析183.1.1 系统开发环境183.1.2 需求分析183.1.3 系统用例图及详细说明213.2 系统设计方案283.2.1 设计原则283.2.2 系统类28第四章 系统实现324.1 系统界面设计324.2系统功能实现344.2.1 数据库新连接(即导入数据库信息)功能
2、的实现344.2.2 代码生成功能的实现344.2.3 代码导出功能的实现364.2.4 数据库查询分析功能的实现36第五章 难点与对策385.1 数据库表信息的读取385.2 将xml数据加载到树形控件上395.3 语法高亮显示的实现41第五章 总结及展望435.1 总结435.2 展望44致谢45参考文献46前 言现在软件工程所涉及到的系统规模越来越大。大型的程序需要多人共同参与和开发,每个人的程序风格不同,再加上时间上的压力,这使得系统完成以后在测试及维护上带来了沉重的负担。计算机科学家一直致力于这方面的研究。在解决代码规范以及工作效率上,代码自动生成技术显现出了其很大的优越性。代码自动
3、生成器一个最关键的功能就是让程序员尽可能减轻负。当然任何东西都不能取代人在当中的作用,代码自动生成器主要来完成一些有规律可寻的代码生成。比如我们平常一般用到的MODEL类就是一个很简单的基类,它的模式基本上是固定的。如果一个系统有上百个MODEL类,那么程序员可能要话很长的时间来编写。而用了相应的自动生成器只需简单几步就很全部生成。我想这样的工作是非常有意义的。TianHao正是在这样的环境下计划开发的。TianHao生成的代码基于面向对象的思想和三层架构设计。现在的系统常用到的是三层架构。一个典型的例子就是微软的示例代码Petshop。Petshop包含了很多经典的思想和设计模式。TianH
4、ao结合了Petshop的开发模式,寻求编码规律,并融入了工厂模式,反射机制等一些思想。TianHao 同时提供支持多类型数据库,并且能够方便的对数据库查询分析,存储过程生成,代码批量自动输出等多项开发工作中常用到的功能。第一章 概述1.1背景在软件工程发展过程中,计算机科学家为了降低软件开发得强度,缩短开发周期,减少代码的重复书写,从而减轻程序员的编程负担,一直以来都致力于代码自动生成方面的研究。Lex/Yacc是最早用于自动化编写编译程序的工具。 我们可以将代码生成技术分为两大类:被动模式和主动模式。在被动模式下,代码生成器产生一系列的代码,然后软件开发者可以自由的修改、编辑这些代码,但代
5、码生成器不再承担对代码的维护工作。大多数软件集成开发环境(IDE)中的应用“向导”就是这种类型的代码生成器。被动模式的代码生成技术有其应用的范围,但是被动模式的生成系统有天生的局限性。生成器只运行一次,然后就不再承担对代码的维护工作。 与此相反,主动模式下的代码生成器则对生成的代码“长期”负责,可以通过改变生成器的输入参数并重新运行生成器来改变输出的代码。如编译器生成器就是一种主动模式 的代码生成器。 下面我们介绍几种常见的代码生成技术,这些技术对开发一个实用的代码生成器非常重要。可以依据代码生成技术的使用场合、复杂度等对这些生成技术进行分类,这里我们采用依据生成技术的输入、输出对它们进行分类
6、。 (1) 代码挑拣器,代码挑拣器的输入是源代码,通过拣取需要的信息可以生成各种文件,代码挑拣器的使用相当广泛,可以使用它来生成代码API文档、获取常量和函数原型等。 (2) 内联代码扩展器,内联代码扩展器的输入是带有特殊标记的源代码,这些特殊标记经过扩展器的处理后将被替换为相关的代码从而产生最终的生产源代码,内联代码扩展器的典型应用是将SQL语句嵌入到源代码中,其主要特点是使得底层结构和复杂的查询分开。(3) 混合代码生成器 混合代码生成器与内联代码扩展器很像,它也是处理源代码中的特殊注释但是与内联代码扩展器不同,它的结果将直接输出到输入的源代码中。这种方式的一个典型应用就是在对话框控件和它
7、们代表的变量之间建立映射关系。(4) 部分类生成器 部分类生成器的输入是模板文件和包含特定类所需信息的定义文件,这些信息经过生成器将产生应用的基类。通过继承该基类可以完成剩余的工作。Velocity是一个源代码开放的Java模版引擎。(5) 层第生成器 层第生成器将生成一个多层应用的所有代码。模型驱动的开发是这种生成器的一个很好例子。通过UML模型输入和其余XML文件,生成器能够生成一个包含多个系统的完整应用,并且模型和代码之间可以单项乃至双项同步。(6) 完全领域语言 完全领域语言是一个图灵完全的语言,可以直接使用来进行领域相关的操作。 目前常见的代码生成器有:DbToCode 是一款为 C
8、# 数据库程序员设计的自动代码生器,DbToCode 生成的代码基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用 Model + DAL + BLL + Web 的设计,主要实现在 C# 中对应数据库中表的基类代码的自动生成,包括生成属性、添加、修改、删除、查询、存在性、 Model 类构造等基础代码片断,使程序员可以节省大量机械录入的时间和重复劳动,而将精力集中于核心业务逻辑的开发。Codematic 生成的代码基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些
9、思想。Codematic 同时提供方便的多类型数据库管理,查询分析器,SQL脚本生成,存储过程生成,数据库文档生成,Web项目发布,代码批量自动输出等多项开发工作中常用到的功能,您可以很方便轻松地进行项目开发。AutoJava 是一款免费的,针对于Oracle和SQLserver数据库的、以面向对象模式的Java代码生成工具。AutoJava根据O/R Mapping规则生成表对应的Java对象,并且生成了所有的添加、删除、修改、查询等底层数据库操作代码。 1.2研究代码自动生成技术的必要性随着现代化信息环境日趋复杂,各种应用软件的开发难度随之加大,这需要更有技巧,更有方法地从事软件开发,开发
10、团队之间也必须更无障碍地沟通,否则极可能无法在有限的开发时间中完成任务。由于时间上的压力,一般人只注重程序的编写速度,却忽略其完成后的实用性与维护性,加上大型程序多人共同参与开发,每个人都有各自的程序风格,容易造成严重的差异性,随着系统规模越来越大,这将造成系统完成后在测试及维护上沉重的负担,代码自动生成技术更显出了其显著的优越性。尽管这些应用没有代码生成工具也能开发完成,但利用代码生成技术可以大大加速软件的开发进度,提高软件的质量。代码生成技术是关于自动生成程序的程序的技术。与手工书写代码相比,代码生成器提供了下面的一些好处: (1)所有软件实体的一致的代码质量,代码的质量依赖且只依赖于代码
11、生成的模板、文件和模型。与此相比,手工经常采用的拷贝粘贴的方法为前后代码质量的一致性带来了隐患。 (2)提高了代码变更的能力,特别在需要大量更改代码的情况下,只需要更改模板并重新运行代码生成器即可。 (3)提高了修复软件Bug的能力,只需要修复模板的Bug然后重新运行生成器就可以修复所有的生成文件的Bug。 (4)提高了在不同框架之间的迁移能力,一个典型的情形是我们需要生成不同框架(如J2EE/.Net)的应用代码,代码生成技术将业务逻辑以语言无关的形式单独存放,通过为不同的框架提供代码模板可以基于同一逻辑生成不同框架的应用代码。 (5)灵活的同步机制,代码生成技术自动维护代码和数据模型的一致
12、性,通过重新运行生成器,对模型的修改可以自动反映到代码中,这种同步机制对维护数据的一致性是非常必要的。 (6)大幅度提高了工作效率,运用代码生成技术可以将更多的时间花费在业务相关的设计和实现上,从而可以大大提高软件的开发效率和软件质量。 (7)是代码学习的导师,由于生成的代码具有良好的风格和100%的健壮性,程序开发者很容易模仿代码风格,从中学习。 1.3 本课题的主要研究内容本课题的主要目标是在Windows XP 平台下,利用.NET C#实现.NET(C#)代码自动生成软件(如上1.1背景说述,该软件属于代码自动生成的部分类生成器)。本软件主要包含功能如下:(1)实现在对应数据库中表的基
13、类代码的自动生成,包括生成属性、添加、修改、删除、查询、存在性、Model 类构造等基础代码片断。(2)自动生成数据库的存储过程。(3) 支持不同架构代码生成,用户可以定义命名。(4)自动生成实体Model,DAL(数据访问层),IDAL(接口层),DALFactory(类工厂),BLL(业务逻辑层) 等多层的代码。(5)代码批量生成自动导出功能。第二章 代码自动生成技术2.1 代码生成的机理代码生成器的作用是读取工程的元数据,按照指定的设计模式,混合产生出规范的源代码。典型的代码生成器模型如图2-1所示。在图中,为自动生成程序代码,必需的三个关键要素是设计模式(所产生代码的模板文件)、领域元
14、数据(在代码中需建模的拓扑结构,即定义文件,通常随开发折提供的特定数据增长)。 图2-1 典型代码生成器的模型图 构建自己的代码生成器有2种方法,一是综合利用流行的代码生成器。构建出适合自己的代码生成器;另一种方法是构造出一个全新的代码生成器。无论哪种方法,在构建代码生成器都应该注意下面几个方面: (1)使用纯文字样版,使用纯文字样版的好处除了编辑方便外,也能将程序代码定义逻辑和格式化逻辑分隔开来,使实作上更有弹性。 (2)编写正规表达式(Regular Expression),正规表达式是一种字符串的表示方式,使用它不仅扩大了字符串的表达能力,让使用者很容易进行字符串判断,也可避免撰写程序进
15、行复杂字符串解析的麻烦,也自然使得数据处理的过程变得更为迅速便利。 (3)编译器原理,在对于文本文件的处理上,先利用扫描器(Scanner)扫描出其中的字符,再实作解析器(Parser)解析出所对应的语法,然后转换成所要产生的程序语言。 (4)文档输出入的处理, 由于程序产生牵涉到大量的文档读写动作,需要定义合适的数据结构及缓冲区机制来提升文档存取的效率,另一方面来说,在编写样版文档时也需考量到对于存取效率上的负担。2.2 三层B/S架构架构设计是非常高级的设计,也是系统设计的关键,主要是定义和说明包(子系统),以及包与包之间的相互依赖与通信机制。系统构架模型的合理与否将决定系统的可维护性、扩
16、展性和开发效率包通常所需要处理的是要么是一个具体的功能区域(业务逻辑),要么是一个具体的技术区域(技术逻辑)。业务逻辑主要考虑的是对系统业务功能的实现,而技术 逻辑则是进一步考虑用户界面、数据库或通信机制等形成的技术方案。把技术逻辑和业务逻辑区分开来是极其重要的,这是为了当修改程序的某一部分时不会对另一 部分产生影响,更加便于进行“复用”,同时易于应对来自业务逻辑的变更需求。三层结构是一种成熟、简单并得到普遍应用的应用程序架构, 它将应用程序结构划分三层独立的包,包括用户表示层、业务逻辑层、数据访问层。其中将实现人机界面的所有表单和组件放在表示层,将所有业务规则和逻辑的实 现封装在负责业务逻辑
17、组件中,将所有和数据库的交互封装在数据访问组件中。其结构如下图2-2所示:图2-2 三层结构2.3 设计模式设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。一般而言,一个模式有四个基本要素:1. 模式名称(pattern name) 一个助记名2. 问题(problem) 描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。3. 解决方案(solution
18、) 描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。4. 效果(consequences) 描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显
19、式地列出这些效果对理解和评价这些模式很有帮助。设计模式常常划分成不同的种类,常见的种类有: 创建型设计模式,如工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式、原型(Prototype)模式、单例(Singleton)模式,建造(Builder)模式等 。结构型设计模式,如合成(Composite)模式、装饰(Decorator)模式、代理(Proxy)模式、享元(Flyweight)模式、门面(Facade)模式、桥梁(Bridge)模式等 。行为型模式,如模版方法(Template Method)模式、观察者(Observer)模式、迭代子(I
20、terator)模式、责任链(Chain of Responsibility)模式、备忘录(Memento)模式、命令(Command)模式、状态(State)模式、访问者(Visitor)模式等等。 以上是三种经典类型,实际上还有很多其他的类型,比如Fundamental型、Partition型,Relation型等等。设计模式在特定的编程语言中实现的时候,常常会用到代码模式。比如单例(Singleton)模式的实现常常涉及到双检锁(Double-Check Locking)模式等。下面介绍重点介绍抽象工厂模式:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,
21、往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。它的意图是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。模型如下图所示:逻辑模型(图2-3):图2-3 逻辑模型物理模型(图2-4):图2-4 物理模型2.4 反射技术反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类 定义表,一个字段定义表,和一个方法定义表等,。System.ref
22、lection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码。例如: Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。 Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。 MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。 反射的作用: 1 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现 有对象中获取类型。2 应用程序需要在运行时从某个特定的程序集中载入一个特定的类
23、型,以便实现某个任务时可以用到反射。3 反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。 2.5 缓存技术由数据库驱动的Web应用程序,如果需要改善其性能,最好的方法是使用缓存功能。用户从数据库中检索数据,可能是Web应用程序中执行最慢的操作之一。因为其中涉及多个环节,例如,Web服务器、数据库服务器等。尤其是在用户比较多,检索的数据量比较大的情况下,会给包括用户在内的各个方面造成不小的困难。如果能够将数据库中的数据缓存到内存(也可以存储在其他场所),则无需在请求每个页面时都访问数据库。由于从内存中返回数据的速度始终比新提供的数据速度快,因而可以大大提供应用程序的性能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 软件工程 关于 代码 自动 生成 技术 分析
链接地址:https://www.31ppt.com/p-3932646.html