基于J2EE架构的Java语言学习平台的设计与实现
来源:岁月联盟
时间:2010-08-30
1 引言
J2EE与传统的互联网应用程序模型相比有着不可比拟的优势[1],这种应用建模系统使用UML语言设计底层架构、数据格式以及数据传输之间的连接。开发者只需关心程序的业务逻辑,把软件开发的注意焦点从代码编写层次提高到了设计建模这一更高层次的抽象[2],提高了应用开发的效率和程序的可用性。 Java语言是机专业的必修课程,它功能强大,面向对象,跨平台,面向应用。只是初学者学习起来有一定难度[3]。尤其在远程中,教师无法面对面辅导学生,更加加大了学习者的难度。如何更好地掌握面向对象的概念,理清编程思路,提高编程经验,是一个Java学习软件设计要考虑的问题,是在设计Java语言平台的过程中要考虑的众多问题之一。 当前,基于J2EE的各类学习平台正在不断开发和研究中。[4]给出了一种基于网络的Java语言学习支撑平台,主要实现用户程序的编译运行,提供教师与学生的交互功能。文献[5]和[6]介绍了基于组件开发的虚拟实验室平台,可定制特定课程的虚拟实验。文献[7]和[8]分别提出了C/S模式下虚拟编程实验室和应用于计算机编程的交互式学习支撑平台。这些平台虽然针对特定课程实现了交互性和开放性,但在具体实施过程中,只提供了简单的编译运行环境,若遇到逻辑错误与棘手的编译错误,系统无法提供有效帮助,需通过教师端人为解决,缺乏程序功能性检测服务。 因此,本文提出了基于J2EE的Java语言学习支撑平台。它提供了面向对象的编程环境,完善的编译检错服务和功能强大的逻辑检错服务,能正确定位编译错误信息,能检测程序的功能完整性。本文采用面向对象的设计开发方法开发,使Java语言学习平台的系统性、灵活性、健壮性、实时性和可扩展性得到非常好的体现,降低了软件开发的难度,并且有助于培养和提高Java语言学习者分析问题和解决问题的实践动手能力。2 系统架构与功能
基于J2EE的Java语言学习平台的系统架构如图1所示。系统采用C/S模式开发,客户端(Clients)和服务端(Servers)通过互联网进行通信连接。基于J2EE的客户端程序主要提供Java语言学习的编程环境和实战练习服务。基于J2EE的服务器端程序主要提供用户管理服务、文件服务和逻辑检错服务,并包含四个数据库:用户数据库、用例数据库、完型填空数据库和试题数据库。数据库统一由基于J2EE的数据库操作程序进行规范管理。
图1 基于J2EE的Java语言学习平台的系统架构 平台的功能模块如图2所示。客户端主要包括五个功能模块:用户登录、编译检错、逻辑检错、完型填空和面向对象编程辅助设计。服务器端主要包括三个功能模块:用户管理、数据库管理和逻辑检错服务。其中,面向对象编程辅助设计和逻辑检错是本系统最主要的两大功能。面向对象编程模块主要是向用户提供可视化类图编辑环境并能生成代码,同时也能根据用户写的代码相应地生成类图并展示类图的结构。着重突出了Java程序的面向对象特点,让用户直观了解Java语言的特色。逻辑检错模块主要对客户端提交的Java语言源文件进行安全检测和编译运行,利用重定向技术和数据库管理技术对程序进行逻辑检测,最后将检测分析的结果反馈给客户端。
用户可以通过客户端学习Java语言的相关知识,在客户端提供的面向对象编程环境中编写程序,当用户编写了一个完整的程序后,通过代码自动转化为类图,并展示类图的结构。用户也可先设计类图然后通过类图自动生成代码框架,余下的代码由用户通过手动进行编写。当用户完成了代码的编辑工作之后就通过编译检错功能来进行编译检错,并将编译结果显示在程序界面下的帮助栏内。若遇到了解决不了的错误,通过系统提供的编译错误的帮助功能,得到编译错误提示信息,改正程序的语法错误,得到可运行的程序,然后通过互联网将源程序代码提交服务器端进行逻辑检测,判断其程序的功能是否达到所需的要求,根据反馈信息,对原有程序进行相应修正,达到编译与功能的双重正确性。
3 面向对象编程模块的设计与实现
面向对象编程模块主要包含两个功能,第一是从通过程序获得类图:用户在编辑框里写出代码点击界面上的生成类图就可以在界面上生成类图。具体实现方案是:①模块先分析用户编写的Java源文件,调用Jdk里的javac编译声明,建立类程序的内部表示,包括类层次和“使用”关系。然后对源程序再进行词法分析,将结果与javac分析的结果比较和综合。得出相应的类的结构。②调用Javadoc从源代码的文档注释中获取用户的文档,把生成的类成员的信息保存在文档当中。③生成类图,用不同的箭头和连线表示类之间的关系。类图生成过程流程图如图3所示。
图3 代码生成类图过程流程图 第二是类图生成代码:将类图画在主窗口的面板上,将类与类之间的关系用箭头联系。并生成类属性对话框,在对话框里填写相应的辅助信息就可以生成相应的代码框架。模块设计主要包括四个子功能:①编程界面的实现,包括主菜单设计、工具栏的设计和控制面板的设计。②类图实现。在面板上表示的类图通过重写Java语言里的JLABEL实现,并在JLABEL里直接定义了句柄功能。通过调整句柄的位置实现类图的放大和缩小。③类与类之间连线的实现和箭头的实现,来可视化地表示类与类之间的关系,并由事先定义好的Line Renderer接口,在设置箭头的范围、位置、大小。④代码生成。读取用户输入信息,并添加注释信息,输出到控制面板上。类图生成代码的流程图如图4所示。
通过对类图的设计与实现。我们得到了面向对象的编程模块统一视图。它遵循域模型相同的图解惯例。类图既显示操作名称也显示属性,表明了各部分之间的关系。它显示了系统分类器的静态结构;并为其它结构图提供了基本记号。
4 逻辑检错功能的设计与实现
系统提供的逻辑检错功能主要是向初学者提供功能完整性检测服务。对有些初学者来说,他根据试题的要求编完了一个程序,并在客户端编译通过了编译器,这个时候需要判断是否完成了设计所要求的功能。我们在服务器端设计了庞大的测试用例库,学生从服务器端的试题库读取相应的试题进行练习,我们把不同的试题进行了分类,对于不同的题目我们调用不同的测试用例进行检测,针对不同的程序采用不同的分析方法。同时,在进行程序检测的过程中,也考虑了系统的安全性。提供了安全检测机制。系统根据面向对象程序设计方法和反射技术实现了复杂的测试用例的调度。逻辑检错的实现主要由文件管理、编译检测、安全检测、输入输出接管、用例检测和反馈信息六个服务功能组成。一个完整的程序文件从提交到服务器开始就执行相应的功能,当前功能段报错,说明源程序有问题,将不能进行下一层的功能检测服务。系统将把程序返回给客户端,保证系统的安全性和实时性。逻辑检错模块的序列如图5所示。

类实例的动态创建是此机制实现的关键。随着程序类型的增加,系统代码将会越来越复杂。系统为了保证软件工程的灵活性和扩展性,采用了工厂设计模式、条件外置和反射技术来实现。工厂设计模式为系统结构提供了非常灵活强大的动态扩展机制;在程序中通过用abstractTool类做整个系统工具类的模板。然后用tool类来做实体类。public class tool implements abstractTool…,使得程序的灵活性得到很好的体现。条件外置,即通过应用程序的配置文件来实现,保证了系统信息管理的统一性;而反射技术,可以使用反射动态地创建类型的实例,将类型绑定到现有对象,当程序关闭或用户要保存程序时,类图信息也动态的保存。当程序需要用到类图的信息时能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。程序用class.forName()来获取类名class c=Class.forName(classString);在程序中当检测一个程序的逻辑错误时,从相应的用例数据类库动态调用一个特定类型的定义,来实现实例对象。若要扩充不同的测试用例类,则不必改变系统的架构,只要往测试用例类库中添加相关的类型信息即可,保证了系统的健壮性和扩展性。
5 系统的运行实例
基于J2EE的Java语言学习平台为Java语言的学习者提供了一个全真的编程环境,基于可视化的类图表示功能和强大的逻辑检错功能,以及丰富的齐全的学习资料。学习者通过这个平台,能够很好地进行编程实践,快速掌握编程技巧,养成良好的编程习惯和思想。 Java语言的学习者在登录以后,进入客户端界面,客户端界面则是面向对象编程的主界面。左边的树型目录是类图的创建、连接和编译。右边是面板,学习者在面板上可以拖动图标,并可以用连线表示类图的关系。学生通过生成类图,构建好类图之间的关系。然后双击相应的类图图标,下面的窗口一中自动得到相应的代码框架。如图7所示。如果想要程序实现更多的功能可以在类图框架里填写相应的代码。点击编译按钮可以编译执行。同时面板中也可以得到相应的类图图标。窗口二是错误提示窗口,显示编译错误和逻辑错误的提示信息。学生可以通过编译检错和逻辑检错功能来实现其所编程序的正确性和完整性。
图7 系统运行后客户端界面 在实际应用情况下。学生对Java语言的面向对象的特性得到更加深入的了解。系统错误提示更加简洁明了,准确性也明显提高。逻辑检测功能的操作也同样简单,客户端通过提交程序模块将.java源程序提交到服务器端,服务器端经分析处理后,通过将检测结果反馈显示到客户端的功能检测栏。功能检测栏在Java的帮组文档区。