Java平台课程

2024-10-20

Java平台课程(精选9篇)

Java平台课程 篇1

Java语言的应用面不断扩大, 从企业软件到嵌入式开发再到移动应用等多个层面上的使用, 使得Java课程群建设势在必行。为了适应现如今的计算机网络化平台的发展趋势, 通过网络教学平台来发挥Java课程群的教学作用已取得初步成效, 而如何完善Java课程群网络教学平台的建设已成为Java语言专业人才培养的突破口。[1]

一、Java课程群建设的目标

Java语言的整体程序包括四个大的方面:Java语言的基础知识和核心内容、Java语言网络软件开发、Java语言的Web开发以及Java语言移动应用的开发。[2]

1. Java语言的基础知识和核心内容

主要是Java语言的基本理论知识以及一些基本的语法。面向用户的程序设计理念、思想和基本的Java语言操作手法, 还包括一些Java语言操作的系统资源管理。

2. Java语言网络软件开发

主要是基于网络协议进行的网络软件的开发与设计, 在不同的网络层次和网络协议下的网络软件开发。

3. Java语言的Web开发

主要是基本的B/S模式的Java语言软件开发, 以及面向企业的Web应用开发。

4. Java语言移动应用的开发

Java语言系统和体系相对较为复杂, 而且由于网络层面的不同, 不同的网络层面和网络协议使得Java语言开发也具有多变性。

二、Java课程群网络教学平台的规划与建设

1. Java课程群的规划

要做好Java语言课程群的规划工作, 首先就要了解基础的Java语言知识, 从而系统、合理地分析Java语言系统。具体的规划分配方案如下:

(1) Java语言基本的语言法则与面向用户的设计思想:这个部分是Java语言的基础, 是必须掌握的基本内容, 俗话说:“盖楼必须打好地基。”因此, 必须掌握Java语言基础的部分。

(2) Java语言的扩展部分:这个规划主要是针对Java语言基本的语言法则与面向用户的设计思想进行专业扩展, 查漏补缺, 进行专业知识的更深度学习。

(3) 基于Java和Android进行软件开发:这个部分是在Android的基础上, 根据Java的特点和服务功能, 进行软件的开发。

2. Java课程群的网络教学平台的建设

Java课程群的网络教学平台结构设计遵循Java EE四层开发模型原则。

(1) 用户表示层。用户表示层是指网络教学平台的人机界面, 是用户与网络系统之间的信息交换, 其中结合了JSP、Ajax、CSS等技术, 使得Java EE框架中的Struts 2框架得以实现。在整个用户层的界面上, 要将色彩进行合理搭配, 风格要清新, 布局要合理, 将用户的体验值达到最高。

(2) 业务逻辑层。业务逻辑层面是整个体系的核心层面, 是前台的用户界面层与内部资源进行转换的衔接层, 起到了对内和对外的交互作用。

(3) 数据持久层。数据持久层是对于Java课程群数据的统计层面, 实现数据的CRUD的操作功能, 建立起合理化的数据模型, 为网络教学前台提供持久化的数据供应。数据持久层利用了Java EE框架技术结构中的Hibernate框架技术, 建立模型时采用了ORM模型元素, 使整个数据层可以高效利用。

(4) 数据库层。数据库层面是整个系统层面的最终端, 实现了对数据的储存, 用以储存整个Java课程群网络教学平台的文字、图片、图表、视频、文档资源等, 为整个网络教学平台的高效运营提供良好的数据支撑。

Java课程群网络教学平台的建设, 可以为Java课程群教学带来便利、为专业建设起到积极的带动作用, 是Java课程群基础教育的补充, 为我国Java课程群教育探索了全新的教育教学思路。

参考文献

[1]赵彦.Java课程群网络教学平台的构建[J].实验室研究与探索, 2015, (1) .

[2]彭馨仪, 王璐, 王国春, 等.Java程序设计课程网络教学资源平台的构建与应用[J].吉林省教育学院学报 (上旬) , 2012, (7) .

Java平台课程 篇2

摘要:介绍某嵌入式Java运行平台的总体框架;在此基础上,详细讨论为该平台开发的数据库(DB)引擎组件的框架和结构组成,描述该组件实现的SQL子集和数据表达方式以及逻辑算法的设计思路;提出该组件今后的改进设想。

关键词:数据库引擎 Java 嵌入式系统

引言

随着嵌入式系统CPU硬件从8位到32位的发展,嵌入式系统软件的开发环境也得到迅猛的发展,编程语言从10多年以前的汇编为主流发展到现在C、C++、Java为主流。另外,面向对象设计技术、组件技术等在嵌入式系统软件设计中的应用也日益引起人们的重视。

在嵌入式系统软件开发领域,Java是一门较新的异军突起的编程语言。其优点是语言本身简洁优美,完全按照面向对象思想设计,并且语言引入许多较为先进的特性,如多线程、自动内存管理和垃圾回收,非常适合于大规模复杂软件系统的开发。其不足点是与硬件结合不够紧密,同时代码运行速度较慢。此外,对于内存的使用,程序难于管理和控制。

由于采用Java编程具有如上所述的众多优点,越来越多的嵌入式系统采用Java技术来构造软件系统。本文在介绍基于日本某自动售货机产品的控制板的Java运行平台基础上,详细讨论笔者为其平台开发的DB引擎的组成和设计思路。

(本网网收集整理)

1 Java运行环境平台

图1所示为Java运行环境的总体框架示意图。本系统为克服Java的解释执行机制所引起的执行速度慢的问题,在硬件上采用了Sun公司开发的Pico Java芯片。它能够直接执行Java的二进制代码,使Java的执行速度提高一个数量级以上。在硬件层的上面是OS层,本系统采用的是ITRON(日本东京大学坂村键教授设计的一种嵌入式操作系统,虽然在日本以外的市场影响不大,但在日本本地市场,占有率达90%以上)。由于ITRON规格制定得比较早,并且为兼顾低端嵌入式应用的场合,ITRON总体上功能比较简单,并未把诸如TCP/IP、文件系统等内容包含在其里面,因此与嵌入式Linux等不一样的是,TCP/IP、文件系统是以独立的组件形式存在的。在OS层的上面是JVM层。与其它一般Java虚拟机不同的是,本系统的Java执行代码不需要由JVM解释执行,而是由CPU硬件直接执行。在JVM的上层是自动售货机的基础平台类库和公共组件层。本文介绍的DB引擎组件正是处于这一层。该层的上面是应用程序层,用于实现自动售货机的各种控制、管理机能。

2 嵌入式系统DB引擎

2.1 DB引擎组件的引入

众所周知,在台式机领域,DB是一个十分关键的基础软件。以往嵌入式系统的软件可能更侧重于与硬件的交互与控制,但随着对嵌入式系统功能需求的日益复杂化,嵌入式系统软件中,信息、数据的保存与管理的比重也日益增加。在这样的背景下,嵌入式系统软件开发中,通过引入DB组件,对实现软件整体框架结构的组件化与简单化,有着十分明显而重要的意义。

2.2 DB引擎组件的总体框架

如图2所示,将整个DB组件设计为3层结构,分别为JDBC接口层、SQL解释层和动作执行层。这3层之间呈单向依赖关系。也就是说,SQL解释层依赖于动作执行层,但动作执行层不依赖于其上面的两层,可以单独存在而直接被使用。如果用户以使用方便为主要目的,可采用完全配置方式,应用程序通过JDBC接口层存取数据。反之,如果用户对空间和效率要求较高,可仅配置动作执行层组件,应用程序直接调用动作执行层的API进行数据的检过和更新等操作。

(1)JDBC接口层

如前文所述是可选组件,旨在为应用程序提供一个标准的DB调用接口。

(2)SQL解释层

本DB组件实现的SQL解释层,只实现了标准SQL的一个小子集,主要完成select、delete、insert、update、create table、drop table等功能。其中数据操作语句(select、delete、insert、update)的解释要点之一是where条件子句的解释执行,类似于数学表达式求值算法。本文采用简单直观的“算符优先法”。该算法使用两个工作栈,一个称作OPTR栈,用以寄存运算符;另一个称作OPND栈,用以寄存操作数或运算结果。算法的基本思想是:

①首先置操作数栈为空,表达式起始符“#”为运算栈的栈底元素;

②依此读入表达式中每个Token。若是操作数,则进OPND栈adk是运算符,则和OPTR栈的栈顶运算符比较优先权后作相应操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的Token均为“#”。

文实现的SQL子集描述如下:

预定义

:=<日期>

:=

:=[,[,[…]]]

:=[,[…] ]]

:= =│==│!=││>│>=│<│<=

:=[,[,[…]]]

<统计函数名>:=MIN│MAX│COUNT│SUM

<统计函数>:=<统计函数>(

<统计list>:=<统计函数>,[,<统计函数>[,<统计函数>[…]]]

<数据类型>:=INT│UNMBER│CHAR│DATE

:=文递归定义式

:=(

:=NOT

:=OR

:=AND

SQL文定义式

①SELECT*|FROM

[WHERE][ORDER BY[ASC|DESC]]

②SELECT<统计list>FROM

[WHERE]

③UPDATE

SET[WHERE]

④INSERT INTO

[()]VALUES()

⑤DELETE FROM

[WHERE]

⑥CREATE TABLE

(<数据类型>[,<数据类型>[,<数据类型>[…]]])

⑦DROP TABLE

注:|表示多选个,表示某定义项目,[]表示可选项目,…代表循环省略表示。

(3)动作执行层

动作执行层是整个DB组件的核心和关键,因为所有的DB操作最终都由该层完成,同时用户也可以跳过上面的两层,直接调用该层的API,以实现相同的数据操作功能。下面介绍其主要设计要点和思路。

2.3 数据的表达与存储

由于嵌入式系统的资源十分有限,不能引入复杂的算法和数据存储格式,同时由于Java对二进制数据的处理十分不便,本文最终采用CSV格式来保存表数据。其要点是:

①各字段数据之间采用「,」分开;

②如果字段数据本身包含有「,」,则将整个字段数据用引号括起来;

③如果字段数据本身包含有引号「”」,则将引号「”」改写为两个重叠的引号「””」,依次类推。其次,每个记录占文本文件的个行,每一个数据表与一个物理数据文件一一对应。

采用这种方式处理的优点是:

①全部数据都是采用字符串保存,Java处理起来十分方便;

②对不定长字段的保存处理与定长字段处理统一,不需要额外的附加处理,而且存储效率高;

③对多字节文字的处理程序不需要额外的编码转换处理,由

JVM平台本身的功能可以自动完成。

当然,采用这种处理方式也存在其不足之处:

①由于在数据文件中,每条记录的长度不定,数据即使局部更新,也必须重写整个文件;

②由于同样原因,单条记录的.检索难于直接定位,而必须读入整个数据文件。

为弥补由此产生的性能下降,本文采用数据Cache加以克服。也就是说,尽可能将数据缓存在内存中,通过减少对物理文件的读写操作来提高数据的性能。

2.4 多线程数据存取的同步与互斥

在Java虚拟机环境下,没有多进程的概念,但对于多任务的处理提供了多线程的手段。本DB引擎组件是公共组件,供上层多个应用程序组件共同使用。由于上层的每个应用程序组件本身由一个或数个线程来执行,因此,DB引擎组件必须考虑多个线程同时存取某个数据时可能引起的冲突问题。对于该问题的解决办法,一般是采用DB锁定的方法。关于DB锁定,进一步细分的话,可区分为读锁和写锁;根据锁定粒度的粗细可分为按表锁、按Page锁、按记录锁等,不一而足。

为设计和实现的简单起见,本DB引擎组件提供按表锁定的方式,同时不区分读写锁之间的区别。这样,大大简化了SQL语句的分析和处理过程,并且可以直接把锁定操作与表的open操作相关联,锁解除与表的close操作相关联。实现时,对应表对象Table的每一个实例,设置一个field变量,用于保存锁定状态,再利用Java语言提供的synchronized手段同,可以较为方便地实现数据表的锁定功能。代表示例如下:

//表锁定。为了避免死锁,有超时判断逻辑

synchronized void lock()throws DBError{

long t2,t1;

t1=System.currentTimeMillis();

//由于可能出现在wait语句被唤醒而却得不到表锁的情况,为提高超时逻辑判断精度,采用循环

while(isLocked){

try{

wait(DBError.TIMEOUT/10);

}catch(Exception e){e.printStackTrace();}

//超时判断

t2=System.currentTimeMillis();

if(t2-t1>DBError.TIMEOUT)break;

}

//发生超时退出循环情况,抛出例外

if(isLocked){

throw new DBError(DBError.TIMEOUT_ERR,name);

}

//设定锁定标志

isLocked=true;

}

//表打开操作

//参数ro只读打开标志

void open(Boolean ro)throws DBError{

lock();

readOnly=ro;

//表数据读入

load();

}

//表关闭操作(同时释放锁)

public synchronized void close() throws DBError{

if(isLocked==false)return;

//关闭前,保存数据

if(isDirty)save();

if(isUnload)unload();

//释放锁,通知其它等待线程

isLocked=false;

notify();

}

图3 DB引擎组件主要类的关系

2.5 DB组件实现的结构设计

图3所示为DB引擎组件的主要类之间的关系。其中,Database为数据库类,用于描述和管理整个数据库对象Table为数据表类,用于描述和管理表对象;TableData用于描述和管理保存表数据的物理介质(文件);Field为字段类,用于描述和管理字段类型信息;Record为记录类,描述一条数据记录。为简化处理,本组件将Database类设计为singleton模式,即本组件只能创建一个Database实例。这对于嵌入式系统来说,大部分场合已经足够。与数据库的一般物理概念相对应,1个Database实例包含n个Table实例,1个Table实例包含n个Field实例。同时,1个Table实例包含1个TableData实例,1个TableData实例包含n个Record实例。

Connection类用于管理用户访问数据库的会话(Session)过程。对应一个用户的一次会话过程,生成一个Connection实例。Connection类对象保存着当前Session打开的Table列表,当用户提交执行某SQL语句而需要锁定某个Table时,系统首先检查该表是否已经在当前Session已打开的Table列表中。如果已经被打开,则不需要进行重复的锁定操作,直接反回对应的Table对象实例。反之,如果尚未包含在打开的Table列表中,表明当前Session尚未打开和锁定该表,必须执行该表的打开和锁定操作(如果该表已被其它Session打开,则必须等待到其它Session翻放该表为止)。

本DB组件还支持commit与rollback事务处理。能够在如此微小的DB组件实现事务处理,主要得益于上述的Session管理框架。在Table类commit与rollback处理基础上,当一个Session执行commit或rollback操作时,对包含在打开列表中的每个Table实例,调用执行相应的commit或rollback处理即可。

3 结语与展望

本DB组件已实际运行了大约两年时间。这期间除了对该组件进行一些功能追加以外,主体框架上基本保持不变,从而在一定程序上表明了该设计框架的可行性和合理性。该组件编译以后,class文件形成的jar包大小约为68KB,短小精度悍,便于使用。当然,该DB组件目前仍然存在一些不足:首先,较为关键的一点是速度问题。一直以来,Java的执行速度问题就是受批语的缺点所在,因此采用它实现自然也避免不了这人瓶颈。今后改进的思路之一是,将其中Java处理效率不高的部分移出Java,采用C实现;二者通过JNI手段加以连接,以提高总体的运行速度。第二点需要改进的地方是表锁定的粒度问题。由于目前只能整个表进行锁定,并且不区分读锁定与写锁定,因此粒度较粗。虽然这样实现起来较为简单,但在多任务处理环境中可能增加不必要的时间等待。最后,JDBC接口的实现目前还不完全,需要加以完善。

★ 数据库设计文档范文

★ 数据库参考文献格式

★ 面向城市规划的空间数据方法

★ 数据库管理英文简历

★ 教师红色引擎工程学习心得体会

★ 简介模板免费

★ 数据库实训报告范文

★ 再看数据库――(7)游标

★ 国际贸易与数据库营销

Java平台课程 篇3

1 为什么选择Java语言为平台

《程序设计基础》是计算机专业的基础课程, 同时也是一门专业核心课程。作为基础入门课程, 突出的是“基础”两个字。它不要求学生掌握很高深的编程巧与编程技能, 只要求学生掌握程序设计里面最基础的入门语法知识, 如:八大数据类型, 变量定义, 条件选择分支结构, 三大循环结构等。在掌握基本语法同时激发学生对编程的兴趣, 培养学生良好的动手能力。

Java语言主要用于网络编程, 以其开源及跨平台的独特魅力已经成编程领域一门举足轻重的语言。在高职院校的计算机系中越来越多的专业选择与Java语言进行对接对本专业的课程体系进行一点打通。如我院的计算机信息管理、商业网站开发、软件测试等专业。

不同专业, 因核心专业课程不同, 对Java语言的学习, 不可能分配与软件开发专业相当的课时, 但这门语言在各专业课程体系中的位置却不见得比软件开发专业轻。课时相对不足, 课程的核心位置却是不能有根本性的削减, 怎么协调好这个矛盾呢?

按照传统高校的授课模式, 《程序设计基础》这门课程, 是以C语言为平台以老师为主体的方式进行讲授。很多语言都由C语言衍生而来, C语言是很多新语言的老祖宗, 学习了C语言再学习其它语言不会有根本性的障碍, C语言的思想跟其它很多语言的思想基本上是一致的, 学习了C语言的思想也在一定程度上是学习了编程的思想及理念。其次, 多数应用系统的底层结构是由C语言来实现的, C语言的执行效率优于其它的高级语言, 对于侧重于理论研究型的普通高等院校来说, 学习C语言既是通识教育的需要, 也在一定程度上扩大了学生的视野, 拓宽了学生的思维。

但对于高职高专的学生来说, 学习目标非常清晰, 高职院校培养的是掌握技能型的人才, 而不是理论研究型的人才。工学结合, 以市场为导向。社会需要什么样的人才, 高职院校就应该培养什么类型的人才。每个专业学生的能力目标应该都非常明确。

基于以上几点, 选择与Java语言对接, 实行一点打通的专业, 以Java语言为平台讲授《程序设计基础》这门课程, 可以消除平台跨度。Java语言虽然是由C语言衍生而来, 但每一门语言都有自己独特的语法, 况且, C语言是面向过程的语言, Java是一门面向对象的语言, 两门语言存在较大的鸿沟。选择以Java语言为平台讲授《程序设计基础》, 学习完这门课程后直接学习Java语言的程序设计的相关课程, 可以实现无缝对接, 降低学习难度, 自然会提高学习效果。同时, Java语言为平台的《程序设计基础》比C语言为平台的《程序设计基础》更容易掌握上手, 对学生来说也是一件好事。

在本学期自己所带的几个专业班中, 有两个专业班在上一学期学习《程序设计基础》这门课程是以Java为平台, 而另外一个专业班则是以C语言为平台学习这门课程。本学期中学习《Java程序设计》这门课程时可以明显感觉到这一个专业班的学生吃力得多, 这一点可以得到证实。

2 以Java为平台的《程序设计基础》不是《Java程序设计》

《程序设计基础》与《Java程序设计》是两门不同的课程, 这两门课程的教学大纲与教学目标是互相独立的, 不能混为一谈。

《程序设计基础》课程面向的对象的主体是大一的新生。大一的新生, 刚进入大学, 对很多东西都充满了好奇, 这个时候他们的学习热情是相对高涨, 积极主动性也比较强, 只要我们能引导得当, 就能在教学方面取得良好的教学效果。通过《程序设计基础》这门课程, 我们主要是培养学生的编程理念, 激发学生的学习兴趣, 最重要一点是要培养学生的动手能力。

《程序设计基础》是大一新生接触到的第一门专业课程, 因而至关重要, 这门课程的学习效果将对学生日后的学习态度产生决定性的影响。头开好了, 学生有浓厚的兴趣往前走, 能够很好的激励学生学习其它专业课程。计算机系各专业的课程体系当中, 每一门课程都互相紧扣, 那一环掉了都无法链成一体, 无法一点打通。高层专业课程是建筑在基础专业课程的之上, 入门都没找到门道, 自然也就无法深入到高层课程体系之中。学生连基础课程都没掌握好, 就会很快丧失学习的兴趣与主动性。

以Java语言为平台的《程序设计基础》讲授的《程序设计基础》课程的内容, 只是以Java平台作为环境载体。在该课程里面主要讲授的是:八大数据类型、变量、条件选择分支结构、三大循环结构等程序设计里面通用的语法及编程思想, 而不应该过多的涉及到面向对象等其它抽象的内容。

《Java程序设计》则是另一门与《程序设计基础》相关联, 而又相互独立的课程。两门课程都是以Java为平台作为编程授课环境搭建起来, 以Java为平台的《程序设计基础》是新人进入编程世界的入门课程, 《Java程序设计》则是建筑在《程序设计基础》课程之上。没有学习好前者, 学习后者将寸步难行。在《Java程序设计》这门课程中, 主要在《程序设计基础》基础上进一步讲授面向对象的理念、特征、要素, 让学生理解类与对象的概念并能熟练运用, 掌握抽象、继承、多态的使用。

由此可见, 无论是课程大纲、教学目标还是课程体系里面的层接关系, 两门课程都是不相同的, 不能混为一谈。

3 重在培养学生的动手能力

高职高专的教学模式不能照搬普通高校的教学模式, 针对高职院校的校情, 学者专家早就提出了, 工学结合, 能力为主, 学生为主体的教学模式。每一门课程都应该对应有一个能力目标, 即学完该门课程后, 学生应达到的某一个能力水平。

那我们《程序设计基础》这门课程, 应培养那方面的能力目标呢?笔者个人认为, 最重要的一个方面就是培养学生的动手能力。良好的习惯需要在早期加以引导慢慢的养成, 学生的动手能力也需要我们在课堂加以适当的引导来养成。

《程序设计基础》本来就是针对新生的入门课程, 要求新生通过这门课程学习到很强的编程技能不现实, 但通过这门课程来培养学生的动手能力却是现实可行的。学生养成良好的动手能力后, 上课注意力集中, 对老师在课堂上所讲的问题能及时的跟上来, 并在能动手模仿老师的教学案例。这一点是非常好的, 也是非常重要的。对新人来说, 模仿案例, 敲代码是一种非常有效的学习方式。在课堂上听老师讲十遍还不如学生自己动手做一遍, 很多时候, 学生当时是听明白了, 但二三个钟头后可能就忘得一干二净了, 课后作业还是无法完成。

我院是一所笔记本IT院校, 在大一入学的第一学期每个学生即配有笔记本电脑, 因而以学生为主体, 讲做结合的实践教学便成为可能。在课堂上, 先为学生讲解理论知识点, 并配以相应的教学案例, 接下来为学生预留足够的时间让学生完成课堂时训, 同时教师到学生中巡查完成情况, 发现问题, 即时给予纠正和讲解。事实证明, 学生在听课时没有完全吸收消化的问题, 在完成课堂作业过程中都会暴露出来, 这样就能够及时的发现存在问题, 有的放矢, 提高了教学效果, 又培养了学生的动手能力!

4 结语

《程序设计基础》是计算机系所有专业的基础入门课程, 在高职院校中, 依据每个专业的课程体系, 结合实际选择以Java语言为平台进行该课程教学授课, 能在一定程度上降低课程跨度, 提高教学效果, 符合高职高专课程改革思想以及高职院校校情。

参考文献

[1]何成林.Java语言学习方法探讨[J].经济技术协作信息, 2008 (31) :85.

[2]关晓惠, 周志敏.高职高专Java语言程序设计教学与实践[J].浙江水利水电专科学校学报, 2008, 20 (4) :87~89.

java课程设计报告 篇4

题 目:指导老师:姓 名:专 业:班 级:日 期:课程设计报告

目 录

一、系统总体设计.......................................1

(一)设计目标及完成功能..............................1

(二)系统结构设计...................................1

二、数据库设计........................................1

三、详细设计..........................................1(一)界面设计........................................1(二)系统设计........................................2(三)关键技术及算法..................................2

四、测试..............................................2

五、安装使用说明.......................................2 总结(体会)..........................................2 参考文献:............................................2

《Java语言程序设计》课程设计报告

一、系统总体设计

(一)设计目标及完成功能

此部分可以包括如下内容:

1.窗口功能说明:设计了几个窗口,分别实现什么功能.2.菜单栏或工具栏说明:如果设计了菜单或工具栏,分别说明包括哪些项及其各自实现什么操作.……

(二)系统结构设计

说明:要绘出系统结构图

二、数据库设计

必须包含以下内容:E-R图(说明所有实体及其属性)、表结构列表(字段名、类型、主键、备注等)。

没有用到数据库的不用写此部分

三、详细设计

(一)界面设计

界面抓图,图要有编号和标题(格式:图1 主界面图),位于图的下方居中对齐。

《Java语言程序设计》课程设计报告

(二)系统设计

1.共设计了几个类或接口,是否有继承关系,各实现什么功能,绘图(列表)说明。

2.列表说明各类的方法及其功能。

(三)关键技术及算法

使用的主要算法分析、关键技术说明。如数据库连接技术、加密解密算法等。

四、测试

五、安装使用说明

1.系统配置说明。是否需要配置数据源或安装补丁包、导入数据库等。

2.登录的用户名、密码。3.其他特殊说明。

总结(体会)

(谈谈本次课程设计的心得体会)

参考文献:

[1] 窦万峰.软件工程方法与实践[M].机械工业出版社,2009 [2] 李兆锋,张得生.Java Web项目开发案例精粹[M].电子工业出版社,2010 [3] 沈泽刚,秦玉平.Java Web编程技术[M].清华大学出版社,2009

《Java语言程序设计》课程设计报告

包括书籍、网站、论坛等。

说明:(以下内容作为要求)

正文部分一律用小四号字,宋体,1.5倍行距。一级大标题黑体四号字靠左,加粗。二级大标题黑体四号靠左,不加粗。

参考文献:

支付宝发布JAVA平台支付标准 篇5

此次发布的标准这对支持JAVA的嵌入式设备以及安装了JAVA虚拟机的非智能手机, 为这类手机提供支付宝支付服务, 可以实现应用内支付等变现手段的应用开放平台和生态环境。此后, 手机支付不再是智能手机的“特权”, 此类智能手机也可以轻松的实现手机购物等。

目前, 尽管智能手机非常火热, 但我国仍然是非智能手机占有大部分市场。据悉, 目前基于智能手机的支付宝客户端装机量已经超过1000万台, 而每天的手机支付数量超过50万笔, 如今发布新的JAVA平台支付标准, 非智能手机也可以享受支付宝手机支付, 将会使这一市场更加庞大。

Java平台的单元测试技术研究 篇6

传统的java平台构建较为繁琐,不仅消耗大量的时间资源,也使得自动化的测试工作变得困难,因此,从节省资金成本和人力资源成本的角度出发对java平台进行质量提升,是很多团队工作的重点。

1 单元测试技术的具体使用流程

1.1 单元测试技术充分性的保证

在进行单元测试之前,操作团队必须对使用的软件进行规划,要保证软件能够在测试过程中充分发挥作用,当工作人员将事例信息进行输入之后,选取的软件必须能够根据简短的信息迅速进行期望值的确定,并使用网络资源进行信息表的确定,当条件输入完成之后,需要按照系统的前置条件指示进行测试环节的明确,测试环节在进行推进的过程中,要根据数据的输入情况对组成数据的因素进行明确,以便操作人员能够对期望值的具体情况具备一定的了解,要根据系统的后置条件对期望值进行估测,并且按照测试工作的需要对试用环节的状态进行明确[1]。在对示例信息进行判断的过程中,可以根据期望值的状态对已经确定的信息进行估测,并按照测试过程中不容易进行判断的信息对测试的内容进行认定,在正常的测试环节中,输入的信息数据是较为常见的数据,因此,可以根据测试的需求进行测试用例的判断,操作人员可以根据期望值判断的难易程度对测试工作的流程进行规划[2]。对数据进行基础性测试的过程中,需要将有待测试的数据进行录入,这一部分输入处理的数据仅仅是程序所需的基本数据,要将涉及测试结果的全部因素纳入测试范围,按照数据的准确性对程序的设计环节进行控制,首先,要根据源代码的具体情况对程序设计过程中的一系列信息进行判断,以便测试的信息能够保证涵盖测试工作的全部范围,如果测试工作能够根据具体的需求情况进行数据准确性的判断,则要按照充分性的要求对数据进行再次收集,

1.2 测试工作的相关准则

测试工作的流程较为复杂,在具体测试中,由于基准点不同,经常将单元测试工作分为白盒和黑盒两种,黑盒的测试工作经常以规约作为中心,而白盒的测试工作则以系统的结构作为核心,在进行黑盒测试的过程中,操作人员要首先对单元的输入情况进行调查,根据输入的具体信息对输出的环节进行策划,因此,黑盒测试的主要内涵在于将输入信息和输出信息进行对接,实现双向平衡。在进行黑盒测试的操作过程中,测试项目能够将时间进行更好的调整,如果测试工作可以将比较分散的信息进行集中处理,则可以将不同的时间点进行调整,以便不同基准面的测试工作能够实现价值的均等[3]。可以使用判定表作为主要的测试辅助手段,使不同价值的测试工作能够实现平衡。在进行白盒测试的过程中,要严格按照测试程序的需要,对不同结构的信息数据实施精准的测试,白盒测试在推行过程中,可以按照测试的具体路径对信息数据实施调查,当测试工作不能按照精准的数据流进行控制的情况下,测试工作要使用既定的程序进行测试细节的判断,要保证测试工作所使用的测试方法能够完全适应测试程序的要求,实施覆盖之前,需要了解覆盖过程的使用语句,在不同分支结构中要保证使用相同的语句形式,要对所采用的信息语句进行判断,以便使用的信息能够覆盖测试工作的全部流程。在针对所使用的程序进行数据处理的过程中,要保证信息数据能够实现循环处理,以便将数据在运行过程中能够按照多种状态共同发展的形式进行测试工作。在选择数据形式之前,必须使数据能够在更广的范围内实现覆盖,以便在白盒测试的过程中,相关数据能够同黑盒测试实现互补,使单元测试工作的进行能够拥有更广的覆盖面积,因此,可以使用不同形式的测试相结合的方式进行测试工作,以便测试工作的全面性能够得到保证。

1.3 自动生成测试的具体方式

数据的处理效率是影响自动生成测试质量的关键性因素,因此,要对自动生成程序的设计加强重视,可以通过更换测试方法的形式进行自动生成系统的设计,例如,可以随机选取不同种类的测试手段,并将多种方案进行搭配使用,也可以在程序运行的过程中进行测试手段的升级,在进行随机选取的过程中,要切实保证测试所得数据的准确性,以便测试环节所得的数据不能根据测试情况进行全面的有效性分析,使数据的精准性能够得到保证,如果在测试过程中发现搜集的数据存在缺陷,要根据数据的生成情况对测试的方法作出调整,使测试环节的准确性能够得到充分的保证。在数据测试过程中,对数据变化情况的处理是调节符号的主要手段,因此,在程序进行路径制定的过程中,对数据在收取过程中能够适应的环境进行控制,使数据的各类符号能够适应数据处理的要求。在进行符号输入的过程中,需要按照代数制定的顺序进行符号的确定,如果需要操作的程序存在指针方面的要求,要保证符号的执行过程中具备一定的简单性特点,使操作人员能够及时调整符号操作的问题,避免影响符号操作的准确性。

2 动态程序执行法

首先,要对动态程序进行制定机制的确定,在数据的执行过程中能够保证顺利升级之后,要根据输入的数据需要,按照程序执行过程中的特点进行程序代码的认定。要根据测试工作的具体需要,根据测试数据的情况为测试工作所需的程序进行认定,如果测试环节能够符合操作人员的设计方案,则需要对测试的动态程序进行数据保留,在进行数据收集之后,要按照收集到的信息对测试环节所需的成本进行明确,如果信息数据的准确性可以适应动态程序的要求,可以将此数据作为测试的主要依据,使测试环节能够更好的对接不同种类的测试方法。在进行动态测试的过程中,要对动态测试是否存在代码的漏洞进行判断,以便存在的信息漏洞可以通过信息的判断实现更好的弥补,信息收集完成之后,要按照动态程序的测试要求,对数据进行运行方法的比较,以便数据在生成的过程中能够避免出现过高的复杂性,使操作环节能够更加简便。在进行动态程序的操作过程中,需要首先对程序的复杂情况进行判断,保证程序的运行适合自动生成系统的要求,要使用子集编辑的方式对自动生成程序进行设置,以便程序能够在较为简单的操作系统运行中得以实现,可以尝试实施梯度下降的方法对程序进行控制,按照小目标函数的运算准则,对已经生成的数据进行测试处理,使数据的随机性能够得到保证。测试工作进行过程中,符合数据需要受到充分的重视,要根据前期生成数据的具体情况,结合梯度下降的状况对测试环节进行规划,保证自动生成的数据信息能够具备足够的运行效率。在时间成本的控制方面,要根据信息的初始环境对数据收集过程中的各类信息进行管理,以便操作人员能够正确的选取合适的信息进行搜索工作,使不同区域的信息可以按照优化之后的方案进行推行,要严格按照既定的自动生成方案进行搜索环节的优化,遗传手法是较为常见的搜索手法,因此,要充分发挥遗传手法的优势,提升数据运行的质量。

3 单元测试中遗传算法的特征

首先,在执行遗传算法之前,要对算法的具体运行原理进行分析,根据原理的具体要求,对遗传算法在推行过程中的具体手段进行控制,如果操作人员发现每一个运行环节都能够确定运行的具体手法,则要将现有的运行程序纳入遗传算法的运行方案中。在进行遗传算法控制的过程中,要按照已经归纳的结论进行遗传算法收敛性的控制,选取适合程序正常运行的数据信息进行保护处理,使系统在运行过程中能够拥有完整的保护基础,要在系统运行进入子代之前,使用已经发现的合格个体进行子代系统的控制,如果系统可以适应运行过程中的问题,则可以允许系统在运行过程中实施管理,以便系统的收敛性可以在整体规模的控制下实现收敛。在进行保存数据的选取过程中,需要根据遗传算法的具体要求进行收敛性处理,使已经获取的结论能够提升遗传算法的设计等级,可以引进马尔科夫理论对遗传算法的具体操作细则进行指导,根据已经获取的结论对需要解决的问题实施优化处理,在理论的运用过程中,不必要求现有理论能够完全同个体状况保持一致,可以允许同设计方案近似的个体进行选取范围,在具体执行过程中,要使用数学分析的方法对测试工作的收敛性进行判断,以便测试环节能够通过正确的使用遗传方法实现优化设计。要参考有限自动机的运行准则对遗传算法进行合理化设置,保证使用遗传算法所获得的结论能够接近准确数值,要保证和实际情况相似的问题也能通过遗传算法的方式进行解决,以便相同统计模式下的信息可以按照原有的方案进行统计。在部分运行程序结束运行之后,要将不同运行方法得出的结论进行对比,以便不同方案的使用可以实现最终数值的接近。

4 单元测试的数据分析

要根据测试工作的需要对测试工具进行必要的调整,严格按照测试所需的代码数据进行功能的提升,根据待测试系统的实际情况,选取二级制方式对文件进行管理,以便操作人员能够在文件运行的过程中对各类执行语句的情况进行掌握,并根据执行语句的操作模式进行代码信息的确定,要根据代码测试过程中的测试准确性,对测试中的具体语句进行分析,以便全部测试流程能够实现测试语句的优化处理。要保证收集系统可以将系统测试过程中的各类分支信息进行妥善的处理,使已经测试完成的分支信息可以通过覆盖状态实现覆盖率的调节,要允许测试包可以通过测试流程的分析实现测试环节的推行,根据系统执行过程中的信息覆盖情况,对现有的信息资源进行适当的延伸,以便测试工作可以按照已有的评估方法对程序的执行质量实施控制。操作人员要根据现有的测试范围,对主要测试环节进行流程图的认定,并严格根据流程图的具体信息,对不同状态下的分支功能进行监控流程的安排,以便测试环节的信息基础可以得到充分的认定,提升分支功能的监控质量,使测试报告的准确性得到充分的保证。测试环节推进过程中,要使用代码的基础信息进行运行流程的判定,并结合基础信息的具体展现模式,对单元测试的数据进行研究,以便单元测试的分析系统可以实现数据准确性的确定。

结论

随着单元测试技术的不断发展,软件的测试质量受到了越来越高的关注,在社会各界对软件测试的要求越来越高的情况下,对各类不同测试手段进行分析,是很多单元测试人员重视的问题,按照不同脚本的需要对单元测试技术进行实践,是提升软件开发质量的基础问题。

摘要:单元测试技术是提升系统平台质量的重要技术,随着我国社会对Java技术的重视程度越来越高,应用程序的稳定性成为了社会各界关注的内容,因此,对单元测试技术进行研究是很多领域重点关注的问题。

关键词:java,平台,单元测试技术

参考文献

[1]吴亚峰,王鑫磊.精通Net Beans-Java桌面、Web与企业级程序开发详解[M].北京:人民邮电出版社,2007.

[2]Martin Bond.J2EE核心技术[M].北京:人民邮电出版社,2003.

谈java平台下的MVC框架 篇7

Spring MVC框架易于同其它框架无缝集成, 采用IOC便于测试, 但是使用人数少、JSP中要写很多代码、控制器过于灵活, 缺少一个公用控制器。另外本身这些框架都具有商业价值, 要服从于生产商的商业运营。在Struts框架已经成为行业公认的标准之后, Spring MVC很难与之争锋。Web Work框架结构简单易于扩展、标签库易于定制、拦截器非常出色, 但同样由于年限的原因, 文档示例很少、客户端验证技术不成熟。

Struts是java平台的一种web框架 (framework) , 它是一个比较早期的MVC框架, 提供了对开发MVC系统的底层支持, 它的目的是为了帮助你减少在运用MVC设计模型来开发Web应用的时间。Struts框架作为同类框架的老大, 主要有几个优势。首先Struts框架是一种开源的框架, 因此程序员能更深入的了解其内部实现机制, 并领会很多优秀的编程技巧和编程思想。其次, Struts框架拥有功能强大的标签库 (taglib) 和页面导航, 灵活的运用标签可以大大节省开发时间。页面导航功能使系统的脉络更加清晰。通过一个配置文件, 即可把握整个系统各部分之间的联系, 这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时, 这种优势体现得更加明显。

尽管Struts框架拥有诸多的优势, 但在其功能强大的同时, Struts框架表现了很高的代码与框架的耦合性, 用Struts框架实现的系统代码很难直接移植到其他的框架环境。从而对后期的升级维护带来不便。Web Work在这个问题上了做了优秀的实现, 从而具有较低的耦合性, 能够方便的移植到各种框架下。Struts处理一个Action时候必须要依赖Servlet Request and Servlet Response。所以这一层摆脱不了Server容器。Webwork2每一个action不依赖任何层和任何容器。他们使用Request和response是通过Action Context, 所以这个对于逻辑层的分离是很重要。因为Struts的每一个action都必须用到request和response所以都必须通过web层来进行测试。这就导致了许多测试struts都要通过web容器。Webwork的action能够通过赋予一定的属性。。

鉴于Struts 1.X的缺陷, Struts2.0在人们的盼望中诞生了。Struts 2.0本质上来源于Webwork, 它同时具有Struts1.x和Webwork的优点。并且使用了J2SE5的注释为程序员提供了另外一种配置方案。Struts2.0解决了很多Struts1.x中出现弊端:Strtus2.0中的Action不需要继承一个框架中的公共类, 采用面向接口编程而不是面向抽象类编程;Struts2.0中的Action可以实现Action接口也可以实现其他的接口, 对Action功能做扩充, 并且这些都是可选的;Struts2.0 Action可以通过初始化、设置属性、调用方法来测试, “依赖注入”支持也使测试更容易;Struts2.0可以使用JSTL, 但是也支持一个更强大和灵活的表达式语言;Struts2 Action对象为每一个请求产生一个实例, 因此没有线程安全问题;Struts 2 Action不依赖于容器, 允许Action脱离容器单独被测试。如果需要, Struts2 Action仍然可以访问初始的request和response。但是, 其他的元素减少或者消除了直接访问Http Servet Request和Http Servlet Response的必要性。我个人认为Struts2.0定是同类框架的趋势, 调查中发现现在Stuts2.0并没有全面应用, 这点可以理解, 软件公司在使用某个框架时候第一考虑的并不是一个框架的功能如何强大, 而是其稳定性, Struts2.0作为新生儿还有许多地方值得人们去测试改进。

刚开始在使用Struts 1.x的时候并没有发现其优势, 感觉一直要在配置文件中配置所有的Action以及Action Form时非常的繁琐, 后来才知道, Struts框架在进行开发大项目时候才体现其价值, 页面导航在后期维护的时候充分体现出威力。甚至一个新的程序员来接手项目时候也可以快速的通过页面导航熟悉所有的页面, 了解页面逻辑及简单的业务逻辑。Struts2.0发布后, 尝试了使用Spring、Struts2.0、Hibernate三种框架的组合来开发项目, 整个过程中细细感受了Struts2.0与Sprin g结合给人带来的无限便捷。

参考文献

[1]廖雪峰:《Spring2.0核心技术与最佳实践》.电子工业出版社, 2007-6[1]廖雪峰:《Spring2.0核心技术与最佳实践》.电子工业出版社, 2007-6

Java平台课程 篇8

Java语言的一个非常重要特点就是平台无关性, 而使用Java Virtual Machine (JVM, Java虚拟机) 是实现这一特点的关键。JVM是一个虚构的计算机, 它是通过在实际的计算机上仿真模拟各种计算机功能来实现的, 因此JVM屏蔽了与具体平台相关的信息, 使得Java语言编译程序只需生成在JVM上运行的目标代码 (字节码) , 就可以在多种平台上不加修改地运行。JVM在执行字节码时, 把字节码解释成具体平台上的机器指令执行, 这就是Java能够“一次编译, 到处运行”的原因。

虽然JVM是为支持Java语言的语义而设计的, 但是这种将编程语言与运行时环境分开的技术使得它也可以用作其他语言的目标。在过去几年间, 使用JVM来运行非Java程序的情况成增长趋势, 据统计有超过200种语言能够运行在JVM平台上。有的基于JVM的语言Jython (1997年) 和JRuby (2000年) 都是从其他已存在的语言移植到JVM中来的, Jython (之前被称为Jpython) 是一个基于JVM的Python语言实现, Sun公司资助的JRuby是一个基于JVM的Ruby版本, 而全新的基于JVM的语言是Groovy、Scala。Clojure还算不上是JVM的一种新的编程语言, 它是一种Lisp方言。

随着运行在JVM上的程序设计语言大量增多, 大大激发了多语言编程理念, 因为这样你可以混合使用编程语言并可以选择最佳匹配, 同时还维护着相同的底层字节码和类库。在实际应用中, 没有一种语言可以做到完美解决一切问题, 每种语言都有自己擅长的方面, 而且日趋复杂的软件需求也使得混合编程的应用场景更加频繁。对于Java程序员来说, 技术单一正面临着危机, 混合编程时代已经到来, 这是Java程序员必须迎接的挑战。

本文接下来首先回顾静态类型语言和动态类型语言、命令式语言和声明式语言的基本概念和各自的优缺点, 然后介绍Java语言的发展趋势和基于JVM的代表性语言Jython、JRuby、Groovy、Scala和Clojure, 最后指出软件项目的未来在于混合语言编程, Java仍将是JVM生态系统中的重要组成部分。

2 静态类型语言和动态类型语言 (Statically typedlanguage vs. dynamically typed language)

根据变量的类型是在编译时确定还是在运行时确定, 编程语言可分为静态类型语言和动态类型语言。静态类型语言是指在编译时变量的数据类型即可确定的语言, 如:Java, C++等等, 多数静态类型语言要求在使用变量之前必须声明数据类型 (某些具有类型推导能力的现代语言可能会部分减轻这个要求) 。与此相反, 动态类型语言是指在运行时确定数据类型的语言, 变量使用之前不需要类型声明, 通常变量的类型是被赋值的那个值的类型, 如:Python和Ruby就是典型动态类型语言, 很多脚本语言vbscript, javascript也是这类语言。

要区分静态和动态类型语言仅从语法格式上就足够了, 如代码清单1和代码清单2所示:

public int add (int x, int y) {

return x+y;

}

代码清单1:静态类型语言 (Java)

function add (x, y) {

return x+y;

}

代码清单2:动态类型语言 (JavaScript)

静态类型语言的主要优点在于其结构规范, 便于调试, 方便类型安全, 缺点是为此需要写更多的类型相关代码。静态类型语言为了达到多态会采取一些类型鉴别手段, 如继承、接口, 而动态类型语言则不需要。动态类型语言的优点在于不需要写非常多的类型相关的代码, 缺点自然就是不方便调试, 命名不规范, 会造成不利于理解等。

3命令式编程语言和声明式编程语言 (Imperative programming language vs. declarative programming language)

根据编程范式的不同, 高级编程语言可分为命令式语言和声明式语言, 两者的编程方式有很大的差异。

命令式语言是基于动作的语言, 以冯诺依曼计算机体系结构为背景。机器语言及汇编语言是最早的命令式语言, 在这种语言中, 计算机被看作是动作的序列, 程序就是用语言提供的操作命令书写的一个操作序列。用命令式语言编写程序, 就是描述解题过程中每一步, 程序的运行过程就是问题的求解过程。命令式语言分为面向过程和面向对象, 传统的命令式语言比如Fortran、C和Pascal都是面向过程的, 它们主要的程序设计单元是过程。现代的命令式语言比如C++、Java和C#则是面向对象的, 它们将对象作为程序的基本单元, 将程序和数据封装其中, 通过对象之间的协作来解决问题。

声明式编程与命令式相对立, 不同于命令式编程需要用算法明确指出每一步该怎么做, 声明式编程描述目标的性质, 让计算机明白目标, 而非流程, 即告诉计算机需要计算“什么 (What) ”而不是“如何 (How) ”去计算。声明式编程是一个大的概念, 其下包含一些有名的子编程范式:约束式编程、领域专属语言、函数式编程、逻辑式编程等。例如:数据库查询语言 (SQL, XQuery) , 正则表达式属于领域专属语言, LISP属于函数式编程语言, Prolog属于逻辑式编程语言。声明式编程语言通常用作解决人工智能问题和约束满足问题。

命令式编程通常会让代码变得十分冗长, 更重要的是由于它提供了过于具体的指令, 使得执行代码的基础设施 (如JVM) 没有太多的发挥空间, 只能老老实实地根据指令一步步地向目标前进。因为像“执行目的”这样更高层次的信息已经丢失了, 并行执行程序会变得十分困难, 因此, 编程语言的趋势之一, 便是能让代码包含更多的“What”, 而不是“How”, 这样执行环境便可以更加聪明地去适应当前的执行要求, 所以声明式编程自2009年起备受人们的关注。

4 Java语言的发展趋势 (The trend of the Javalanguage)

Java语言集许多语言的优点于一身, 它的面向对象特性让大型软件工程变得更加容易管理, 它的自动垃圾回收机制能有效地管理内存和防止内存泄露, 它的平台无关性让Java在服务器端软件领域获得巨大成功。Sun公司在推出Java时就将其作为开放的技术, 得到了广大软件开发商的支持, Java拥有世界上最大的开发人群和开源生态系统, 这是其他语言无法比拟的。

Java语言已经证明了它的强大与成功, 但是Java并不是尽善尽美的。对Java语言的批评主要集中在三个方面:语言问题、模块化问题、性能问题。首先是语言问题, Java是静态类型语言, 属于命令式编程范式, 它的语法与固有范式存在着已知的局限性。Java语言的一个发展趋势是在可能的范围内降低语言本身的语法复杂度, 从J2SE 5.0中增强的for循环, 到Java SE 7中的try-with-resources语句和<>操作符, 再到Java SE 8中引入的lambda表达式, Java正在不断地简化自身的语法并引入一些重要的现代语法特征, 例如函数式编程中的某些特性。第二是模块化问题, Java平台所包含的各种功能不同的类库是一个统一的整体, 在一个程序的运行过程中很多类库其实是不需要的。模块化的含义是把Java平台提供的类库划分成不同的相互依赖的模块, 程序根据需要选择运行时所依赖的模块, 只有被选择的模块才会在运行时被加载。模块化的实现不仅可以应用到Java平台本身, 也可以应用到Java应用程序的开发中, OpenJDK中的Jigsaw项目提供了这种模块化的支持[1]。第三是性能问题, 这主要是因为JVM这个中间层次的存在。随着硬件技术的发展, 越来越多的硬件平台采用了多核CPU和多CPU的架构, Java平台需要帮助开发人员更好地充分利用这些资源来提高程序的运行性能。Java SE 7中的fork/join框架是一个高效的任务执行框架。Java SE 8对集合类框架和相关API做了增强, 以支持对批量数据进行自动的并行处理。

Java仍然是最受欢迎的编程语言, 而且至少在接下来的这几年里不会改变, 原因有很多:首先, 许多计算机科学的程序和其他领域的程序是用Java编写的。第二, Java有一个巨大的稳定的代码库。第三, 有大量的厂商投资、工具、培训和其他产品, 使得无论是供应商还是他们的客户都依赖Java。第四, Java拥有最大的开发社区和开源生态系统, 当涉及到选择何种工具、供应商和开发者作为未来的开发方向时, Java仍然是首选。

5 基于JVM的语言 (JVM-hosted languages)

Java面临的最大的威胁是快速发展的JVM-hosted语言, 如Jython、JRuby、Groovy、Scala和Clojure, 这些语言都基于JVM, 它们可以与Java语言方便简单地集成, 相比Java都有更加简明的语法和丰富的表达能力。以Groovy、Scala和Clojure为代表的JVM语言被业界称为“JVM三巨头”, 调查显示Groovy和Scala两者都显示出强劲的商业应用热度, Clojure的支持绝大部分来自业余爱好者和lisp黑客, 而不是商业组织[2]。没有任何一种语言可以彻底地取代另外一种或是所有的语言, 它们根据各自的擅长很好地解决问题。

Java是静态类型语言, 遵循命令式编程范式, 是面向对象语言。而其他JVM语言较好地结合了各种语言优势。表1显示, 五种JVM语言中除了Scala其余四种都是动态类型语言;除了Groovy, 其余四种都支持函数式编程;除了Clojure, 其余四种都是面向对象语言。

5.1 Jython

Jython即是Python语言的Java实现。要了解Jython, 首先要了解Python。Python支持命令式程序设计、面向对象程序设计、函数式编程、面向方面的程序设计、泛型编程多种编程范式。Python开发者的哲学是“用一种方法, 最好只有一种方法来做一件事”, 因此Python源代码具备很好的可读性, 并且能够支撑大规模的软件开发。Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表, 甚至开发科学计算应用程序。一些知名大学采用Python教授程序设计课程, 例如卡耐基梅隆大学的编程基础和麻省理工学院的计算机科学及编程导论就使用Python语言讲授。

Jython是用Java编写, 它继承了Java和Python二者的特性而显得很独特, 如Jython代码的可读性和清晰性, 与Java的无缝集成, 动态类型, Java程序员在数日内就能熟悉Jython。

5.2 JRuby

JRuby是Ruby语言的纯Java实现 (Ruby是用C写的) , 它结合了Ruby简洁的语法以及Java丰富的类库, 通过JRuby可以在JVM上直接运行Ruby程序, 调用Java的类库。JRuby无缝地“组合”了Java和Ruby的优势, 使我们的开发效率事半功倍[3]。

Ruby发明的理念是“你既能进行高效开发又能享受编程的快乐”, 其次是良好的界面设计, 他强调系统设计必须注重人性化, 而不是一味从机器的角度设想, 遵循上述的理念, Ruby语言通常非常直观, 按照编程人认为它应该的方式运行。Ruby是一种有趣的语言, 它支持使用多重范式, 其中之一是“函数式范式”, JRuby是完全面向对象的。

5.3 Groovy

Groovy是Java平台上设计的面向对象编程语言。这门动态类型语言拥有类似Python、Ruby和Smalltalk的一些特性, 可以作为Java平台的脚本语言使用。Groovy的语法很像Java以至于多数的Java代码也是正确的Groovy代码, 这样了解Java的开发者可以更快地学习Groovy。Groovy代码动态的被编译器转换成Java字节码。由于其运行在JVM上的特性, Groovy可以使用其他Java语言编写的库。Groovy的优势在于易用性以及与Java无缝衔接, 一些开发者由于Groovy和Java的无缝集成而使用Groovy[4]。

5.4 Scala

Scala是一种纯粹的面向对象编程语言, Scala中的每个值包括基本数据类型都是对象, 连函数也是对象。Scala包含若干函数式语言的关键概念, 把函数式和面向对象的编程思想很好地统一到了一种语言里。Scala可以与Java互操作, 可以访问现存的数之不尽的Java类库, 这使得Scala成为Java程序员解决某些问题的另一种选择。Scala把Erlang风格的基于actor的并发带进了JVM, 开发者现在可以利用Scala的actor模型在JVM上设计具伸缩性的并发应用程序, 它会自动获得多核处理器带来的优势, 而不必依照复杂的Java线程模型来编写程序。因此与Groovy相比, Scala的优势在于性能和一些高级特性[5]。

5.5 Clojure

Clojure给JVM带来了Lisp。Lisp是基于λ演算的函数式编程语言, 以表达性和功能强大著称, 但人们通常认为它不太适合应用于一般情况, Clojure的出现彻底改变了这一现状, 它是一种运行在Java平台上的Lisp方言, 在任何具备JVM的地方都可以利用Lisp的强大功能。Clojure不是面向对象的, 但提供了很多你想从OO中得到的东西, 如封装 (通过名字空间、私有定义和闭包) 、强大的多态 (multimethods) 、函数重用比继承更胜一筹。同时, Clojure可以无缝地与Java进行交互操作, 因此, Java开发团队学习Clojure具有优势。Clojure还把函数式编程语言引入JVM, 使Clojure成为一种进行并行、并发编程的完美语言, 支持现在的多核、多CPU以及分布式计算。

6 结论 (Conclusion)

我们究竟需要什么样的编程语言?企业级项目和Web项目需要怎样的语言?一般而言有以下要求:可伸缩性、可移植性、并行编程、高性能、DSL (领域专属语言) 的实现, 还有对于低风险的要求, 如与旧项目的兼容性, 旧项目迁移的成本, 开发工具的支持, 开发团队对语言的熟悉情况, 以及语言开发团队的稳定性等等。而具体到每一位开发者头上情况变得更加复杂。他们可能想要:动态的、静态的、强类型的、函数式的、富有表达力的、面向对象的、容易学习的 (在有Java或其他语言开发经验的基础上) 、快捷的、模块化的、有强大的类库、有好用的框架、有合适的IDE、有活跃的社区等等。某些语言可能满足上述条件中的若干条, 但是没有任何一种语言能够满足所有条件。同时, 一个项目的不同层面的需求也是不同的, 比如, 广受欢迎的社交网络及微博网站Twitter, 表层是Ruby on Rails, 底层是Scala;著名的在线学习网站Coursera把Scala作为服务器语言使用。

综上所述, 软件项目的未来在于混合语言编程, 而Java仍将是JVM生态系统中的重要组成部分。

参考文献

[1]OpenJdk Project Jigsaw[EB/OL].http://openjdk.java.net/projects/jigsaw/

[2]The Big Three-Scala, Clojure and Groovy[EB/OL].http://thecodegeneral.wordpress.com/2012/03/04/the-big-threejvm-languages/.

[3]JRuby Homepage[EB/OL].http://www.jruby.org/.

[4]Groovy Homepage[EB/OL].http://groovy.codehaus.org/.

Java平台课程 篇9

目前钢铁行业进入行业寒冬期,受原材料价格上涨、出口量下降、贸易摩擦增多等因素影响,钢铁行业面临严峻局面。为适应市场需要,调整产品结构,秦皇岛首秦金属材料有限公司(简称首秦公司)决定接受抗酸钢钢板合同,这就需要从首钢迁安钢铁有限责任公司外购抗酸钢坯;同时首秦公司决定建立真实客观的职工量化评价体系,推出以数字首秦建设为基础,以管理和产品评价为手段,降本增效为目的的准利润中心报表模块。为在钢轧MES实现这些功能,需要系统支持批量数据导入和图表展示功能。首秦公司原有钢轧MES使用的Oracle Forms平台,是甲骨文公司[1]开发的工具包Oracle Developer Suite 套件中的表单组件产品,采用B/S架构。Oracle Forms前台界面采用Oracle Forms Builder 软件开发,设计有画布、值组、勾选框、文本框等控件,但却没有图形化标签和数据批量导入等控件,因此无法满足用户要求;而且平台应用层使用Oracle Forms Builder软件编程,在开发每个界面时都需要创建一个Fmb文件,因此可移植性差、复用率低且不利于软件维护。另外,Oracle Forms平台数据库层为Oracle数据库,使用PL/SQL语言,这种结构化过程语言无法实现密集运算功能。这些不足使得新的功能需求无法满足,Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言,采用Java语言的JFreeChart图形插件和Jacob插件工具可以轻松实现批量数据导入和图表展示等功能,

多个前台显示界面可以共用一个类文件,而原MES Oracle Forms平台也预留了与Java组件的接口组件PJC [2] ,可以方便地使用Java组件。另外,利用Java语言开发钢轧MES数据库的存储过程,可以提高数据运算效率、减少运算时间、增加日志记录功能等。为此,首秦公司决定于2012年利用Java语言对原有钢轧MES的应用层和数据层进行改进。

1应用层

应用层实现前台界面显示和用户操作交互功能,对应用层的改进主要是使用Java语言在前台界面实现批量数据导入和图表展示功能。

如前所述,为适应市场发展需要,首秦公司需要外购大量抗酸钢钢坯。由于原MES没有外购坯钢种、规格、成分、质量等批量数据导入程序,因此我们利用Java语言在Forms平台应用层进行了数据批量导入程序的开发和实施。数据批量导入时,用户需要通过前台界面下载规定的模板,并对已有文件按照模板进行修改,然后在前台界面通过程序调用Java打开文件控件选择导入数据路径,当点击导入按钮时,程序会使用PJC组件调用采用Java语言开发的具有读取数据功能的JAR包,读取路径文件数据。导入完成后,前台列表显示导入的数据并进行校验,用户根据校验显示结果决定是否需要创建数据信息,如需要,由系统创建数据。

根据建立职工量化评价体系的要求,我们利用Java组件开发了准利润中心报表模块,在Oracle Forms前台展示轧钢加热、轧钢、精整工序中各班组的产量、质量和过程控制精度等指标执行情况及各班组利润核算结果。我们在Oracle Forms平台应用层使用Java组件的JFreechart应用层图表进行展示,首先用户进入前台界面查询数据,然后点击图表展示按钮,程序根据查询结果显示图表。在程序设计中,我们针对不同业务开发了不同类别的JFreeChart图表模板,实际使用时,开发人员可根据情况调用。改进后,提高了程序开发效率,增强了程序维护效率。

以轧钢剪切线精整图表展示为例,采用Java语言开发的应用层客户端图表展示如图1所示。

界面展示采用8图模板显示,其中右上2例显示折线图,其他均显示为柱状图。这8个图的横坐标均为当月日期,纵坐标为各班次生产执行情况,包括本月每天的试样块数、剪切子板块数、剪切母板块数、剪切母板吨数、带出品率(带出品/总产品的百分比率)、直行率(待入品/总产品的百分比率)、宽度平均精整(当班平均切割每块钢板实际宽度与计划宽度的差值)、长度平均精整(当班平均切割每块钢板实际长度与计划长度的差值)。根据图1展示数据可以做出客观评价,优化工艺数据,提高生产效率。

2数据层

数据层主要实现对Oracle数据库中的数据存储、查询、修改和更新等任务,对数据层的优化主要是使用Java语言开发存储过程,以提高后台运算效率并增加日志记录功能。

为适应市场需要,满足特殊客户要求,需要检验钢板对应炉次的成品化学成分时,由钢轧MES将要求检验成品成分检验的订单下达给LIMS实验室,实验室按标准进行检验后将结果上传给MES并在前台界面显示超标钢板。之前MES的数据库层使用PL/SQL语言编程,PL/SQL脚本语言在浮点型数据和其他数值类型数据的密集运算方面,相比Java面向对象语言处于劣势[3],且无法实现日志记录功能,为此,首秦公司决定对钢轧MES质量模块进行升级,使用Java语言开发简单的成品成分比较运算的存储过程并增加日志记录功能。改进后,当LIMS实验室将成品化学元素成分检验结果上传给钢轧MES时,系统通过调用Java语言开发的成品成分判定的存储过程,将成品样检验成分实际值与检验成分标准范围值进行比对,判断成品成分是否合格并显示,同时在比较过程中,Java存储过程在数据库操作系统/tmp/oracle/log目录下记录比较运算的日志信息。

3应用效果

采用Java对应用层的改进,成功实现了外购抗酸钢钢坯数据批量导入钢轧MES,有效减少了人为录入数据导致的系统数据错误,大大提高了工作效率,减少了现场工作人员工作量;图表展示功能为职工量化评价体系提供了有效、直观的数据显示,便于职工量化考核、自我管理以及优化生产。以剪切线图表展示为例,可以及时掌握各班组剪切线剪切钢板的实际生产情况,通过调整工艺参数,提高钢板剪切精度、减小切割导致的金属原料损失、提高钢板固废回收率,降低轧钢剪切线工序成本,并可为职工量化评价体系提供了数据参考。

采用Java对数据层的改进,成功实现了比较运算和日志记录功能,有效提高了数据的查询效率。Java存储过程功能的实现,为以后扩展服务器通信和数据邮件发送等功能提供了有力的技术支撑。

为了比较两种程序的应用情况,我们对比了程序消耗的服务器资源和运行效率,由于用户浏览使用应用层Java控件开发的程序时,调用的是在客户端本地的Java标准类库,因此不会多占用数据库资源;而由于成品成分比较运算并不复杂,因此没有采用密集运算,实际结果显示数据层Java存储过程运行效率与PL/SQL存储过程效率相当。考虑到采用Java存储过程可以实现一些PL/SQL无法实现的功能,因此利用Java开发程序可以更好地满足用户更多的功能需求,便于新功能的扩展。

参考文献

[1]Ellen Gravina.Oracle iDS Forms:Build internet applica-tions I[M].California:Oracle Corporation,2001:42-44.

[2]Duncan Mills,Steve Button.Oracle9i Forms in a Javaworld[M].California:Oracle Corporation,2002:2-21.

上一篇:光纤参数下一篇:高层建筑风荷载反演