JAVA程序语言教学(共12篇)
JAVA程序语言教学 篇1
引言
Java是一种非常流行的面向对象程序设计语言, 由于其优秀的跨硬件平台和跨操作系统能力, 被广泛应用于桌面、Web及移动平台各种应用的开发中, 因而在如今的高校计算机语言教学体系中占有重要的一席之地。然而, 在传统的Java教学过程中, 教师通常按照教材的教学内容介绍Java语言的各个知识点:语法元素、面向对象的概念:类、继承、封装等, 然后通过课后习题和验证型的实验题目来巩固和加深学生对于Java语言的理解程度。这种按部就班的教学方式是一种普遍适用的方式, 适合于大多数学生入门Java程序设计语言。但是, 这种教学方式无法体现Java程序设计语言的强大功能, 不能让学生直观地感受到Java语言的功能和作用, 甚至于很多学生在学习完了Java课程以后, 对于Java语言的知识要点缺乏整体性和连贯性的认识, 更没有建立起Java语言的功能和作用的感性认识。另外, 对于少数对Jav程序设计有着浓厚兴趣的学生而言, 这种教学方式的教学内容、作业和上机实验相对较为简单, 在规定的教学时间内, 大量的教学时间学不到真正感兴趣的、实用的内容。因此, 这种传统的教学方式, 不能做到因材施教, 不利于培养优秀的程序开发人才。
作为一种应用性很强的程序设计语言, 在Java语言的教学过程中, 如果教学环节采用孤立的案例介绍知识点, 在实验环节采用简单的、验证式的上机实验, 是很难激发学生学习兴趣, 也很难培养学生的实践应用能力。因此, 对于Java程序设计语言的教学内容和教学手段进行改革显得迫在眉睫。
一、Java课程教学改革实践
为了改变这种单一的Java语言教学模式, 我们在《Java程序设计语言》课程中进行了大胆的尝试。
1.1教学内容的改革。
在进行Java程序设计语言课程设计时, 应该围绕培养Java程序的应用能力进行分析和设计, 根据Java程序设计语言课程教学目标及应用能力培养要求, 我们将Java程序设计语言课程的主要教学内容分为:基本语法元素、控制流语句、数组、类和方法、数据库操作五大模块。为了让学生掌握Java软件开发的完整实现过程, 在介绍以上教学内容时, 不是孤立地介绍这些知识点, 而是以一个兼顾趣味性和实用性的小软件 (例如:股票持仓管理软件、家庭理财软件等) 作为贯穿整个教学内容的教学案例。另外, 为了让学生在学习Java程序设计语言的同时, 学习到一些实用的编程技术, 我们将Java编码规范穿插在教学内容中, 以培养学生良好的编程习惯。调试程序和阅读帮助文档等实用编程技能作为重要的编程素质和能力, 也穿插在教学内容中, 向学生进行讲授。
1.2教学和实验平台的改革。
我们选择了Android智能手机作为Java程序语言教学和实验平台。原因如下:
随着Android操作系统的流行和普及, 相对于价格高昂的苹果智能手机而言, Android手机的机型更为丰富, 市面上有大量600元——5000元的各种价位的Android手机。许多大学生使用的都是Android智能手机。在学习Java程序设计语言之前, 很多学生对于Android平台的App应用是如何开发出来的, 知之甚少。教师可以在Java程序设计语言教学之初引入相关的教学内容, 让学生了解到很多Android平台的App应用都是用Java语言开发的, 以此培养学生的求知欲。实验教学时, 让学生在自己的Android手机上运行自己开发的应用程序, 对于很多学生而言, 都是有吸引力的, 可以激发学生的兴趣和爱好。
1.3教学方式的改革。
对于Java程序设计语言的学习, 兴趣是最好的老师。传统的教学方式下, 教师主导了整个教学活动, 教学时间被教师大量占用, 用于介绍知识点、演示程序等, 重在Java语法的教学, 而不注重编程能力的培养。学生很容易在相对枯燥的语法教学中丧失了对编程的兴趣和爱好。
在课堂教学内容上, 侧重点从语法教学转向编程能力的培养。传统的教学方式以PPT和演示程序结合的方式。所有的程序源代码都是准备好的, 教师可以直接使用, 优点是对于教师而言, 快捷方便、可以节省大量的时间, 但对于学生而言, 未必是好事。许多学生反馈这种教学方式, 感觉程序就像“天上掉下来一样”, 搞不清Java程序实现的来龙去脉, 听完一堂课以后, 很难从零开始进行编程。因此, 我们改变了这一做法, 采用现场编程的方式, 边讲边做, 从Java程序建立工程、程序结构的划分、每一条语句的实现、类和变量的引入在课堂上逐一展示给学生, 把一个程序从无到有的完整实现过程展现给学生。
在实践教学内容上, 压缩验证型实验的内容, 增加项目驱动型实验的内容。并针对不同层次的学生布置完成不同的题目, 具体做法是:提供不同难度的实践题目供学生选择, 其中, 难度较低的题目有详细的完成步骤, 学生只要照葫芦画瓢, 写少量的代码即可完成, 另外几个题目相对较难, 例如:手机App软件开发, 需要学生主动学习和探索才能完成。
1.4考核方式的改革。
传统的Java程序设计语言课程通常采用笔试或者上机考试来评判学生学习的效果, 学生要在记忆和理解的基础上才能获得较好的考试成绩。这种评价方式操作简单, 但也存在一些问题, 例如:不能真正体现学生掌握和运用Java语言的真实能力。部分学生动手能力很强, 可以独立进行Java软件开发, 但是在笔试中往往无法获得较高的分数。取得好的考试成绩不一定代表学生具备了很强的对Java应用开发能力。
作为一门实践性很强的计算机专业课程, 我们认为:会“考”不如会“用”, 在评价学生成绩和学习效果时, 应该把会“用”放在会“考”之前。因此, 在课程开始之初, 我们制定了相应的课程成绩评定方法, 让期末总评成绩不再拘泥于笔试成绩:对于较好地完成了难度较大的实践题目的同学, 可以灵活地选择将实践题目的分数和笔试成绩中的最高分数作为期末综合成绩评判的主要依据。
在教学实施的过程中, 为了让优秀学生有充足的时间完成难度较大的实践题目, 可以根据软件完成的进度, 给予他们适当的“特权”:不需要完成书面作业、不打考勤等。这样可以放开这些优秀学生的手脚, 让他们做学习的主人, 最大限度地激发有编程天赋和爱好的学生的实践动手意愿, 真正地做到了因材施教, 可以更有利于培养高端的计算机软件人才。
二、实践效果分析
实践证明, 采用了新的教学模式以后, 学生的学习兴趣和学习积极性有了明显地提高, 学习效果也有了显著的提高, 分析原因如下:
(1) 采用一个贯穿教学的案例, 可以让学生从无到有地体验到一个完整的Java软件开发过程, 从而建立起Java软件开发的感性认识, 激发学生从事软件开发工作的兴趣和爱好, 充分调动学生的学习积极性。
(2) 这种教学方式给予优秀学生以自由的发挥空间。对于普通学生而言, 从优秀学生完成的手机App软件中, 也可以近距离地了解到这门语言所具备的功能, 认识到自己与同龄人中编程方面的佼佼者之间的差距, 从而对自己的编程能力有一个清晰的定位。
三、结论
本文讨论了Java程序设计语言的教学改革实践的一些问题, 旨在抛砖引玉, 为Java程序设计语言课程建设提供一些有益的思路和方法。随着IT技术的飞速发展, Java程序设计语言课程改革也要与时俱进, 紧跟市场需求, 勇于创新, 才能培养出社会所需要的高端软件开发人才。上述的分析和讨论仅仅是初步的, 尚有许多问题需要在课程教学实践中加以完善。
参考文献
[1]张席, 王志强.国内外Java教学模式的比较与探讨[J].计算机教育, 2007, 01:44-47.
[2]陈红军, 耿永军, 闫洪亮."JAVA程序设计"课程教学改革探讨[J].信息系统工程, 2010, 01, 128-130.
[3]姜大志, 孙浩军.基于CDIO的主动式项目驱动学习方法研究-以Java类课程教学改革为例[J].
[4]邵奇峰.Java系列课程的教学改革与实践[J].计算机教育, 2010, 20:40-42.
[5]徐南.基于项目驱动的Java课程教学改革研究[J].教育与职业, 2011, 14:140-141.
JAVA程序语言教学 篇2
Java语言简介: 背景
1991年 ,SUN MicroSystem公司的 Jame Gosling、Bill Joe等人 ,在电 视、控制烤面包箱等家用消费类电子产品上进行交互式操作的开发,开始时是使用C++语言,但是,后来发现C++在某些方面并不能很好的满足设计者的需要,从而考虑自行设计一门新的语言,这种新的语言并不局限于扩充语言机制本身,而是更注重语言所运行的软硬件环境。主要是可以使用其建立一个系统,这个系统运行于一个巨大的、分布的异构网络环境中,完成各种电子设备之间的通信与协同工作。基于这种思想而开发了一个名为Oak 的(即一种橡树的名字)新语言。
Java语言简介
Oak先是被用于家电控制中,可通过手持设备控制家电。在当时并没有引起人们的注意 ,直到1994年下半 年 ,Internet的迅猛发展 ,环球信息网 WWW的快速增长 ,促进了 Java语言研制的 进展 使得它逐渐成为 Internet上受欢迎的开发与编程语言。用java编写的Applet应用小程序能够嵌入到网页中运行,而实现声音、动画等功能。同时,在一般的应用程序设计方面也不逊色,完全可以用面向对象的技术与方法进行开发,符合最新的软件开发规范的要求。由于oak已经被注册,所以,最终更名为java。
Java对软件开发技术的影响
工业界不少人预言 :“Java语言的出现 ,将会引起一场软件革命 ”,这是因为 传统的软件往往都是与具体的实现环境有关 ,换了一个环境就需要作一番改动 ,耗 时费力 ,而 Java语言能在执行码(二进制码)上兼容 ,这样以前所开发的软件就 能运行在不同的机器上 ,只要所用的机器能提供 Java语言解释器即可。
Java对软件开发技术的影响重要体现在以下四个方面:
1、软件的需求分析 :可将用户的需求进行动态的、可视化描述 ,以提供设计者更加直观的要求。用户的各色各样的需求都可以用 Java语言描述清楚。
2、软件的开发方法 :由于 Java语言的面向目标的特性 ,所以完全可以用 O-O 的技术与方法来开发。
3、Java语言的动画效果。利用 WWW提供的巨大 动画资源空间 ,可以共享全世界的动态画面的资源。
4、软件最终产品 :用 Java语言开发的软件可以具有可视化、可听化、可操 作化的效交互、动画与动作 “,要它停就停 ,要它继续就继续 ,而这是在电影与电视播放过程中难以做到的。
Java是一个广泛使用的网络编程语言 ,它是一种新的计算概念。首先 ,作为一种程序设计语言 ,它简单、面向对象、不依赖于机器的结构、具有可移植性、安全性、并且提供了并发的机制、具有很高的性能。其 次 ,它最大限度地利用了网络 ,Java的小应用程序(applet)可在网络上传输而 不受 CPU和环境的限制。另外 ,Java还提供了丰富的类库 ,使程序设计者可以很 方便地建立自己的系统。
Java的特点: 简单性
Java语言衍生自C++,是一种面向对象的语言 ,它通过提供最基本的方法来完成指定的 任务 ,只需理解一些基本的概念 ,就可以用它编写出适合于各种情况的应用程 序。Java略去了运算符重载、多重继承等模糊的概念 ,并且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。另外 ,Java也适合于在小型机上运行 ,它的基本解释器及类的支持只有 40KB左右 ,加上标准类库和线程的支持也只有 215KB左右。库和线程的支持也只有 215KB左右。
面向对象性:
Java语言的设计集中于对象及其接口 ,它提供了简单的类机制以及动态的 接口模型。对象中封装了它的状态变量以及相应的方法 ,实现了模块化和信息隐藏;而类则提供了一
类对象的原型 ,并且通过继承机制 ,子类可以使用父类 所提供的方法 ,实现了代码的复用。
体系结构中立:
Java解释器生成与体系结构无关的字节码指令 ,只要安装了 Java运行时系统 ,Java程序就可在任意的处理器上运行,使得 Java程序可以方便地被移植到网络上的不同机器。同时 ,Java的类库中也实现了与不同平台的接口 ,使这些类库可以移植。这样大大降低了开发、维护和管理的工作。安全性 :
用于网络、分布环境下的 Java必须要防止病毒的入侵。Java不支持指针, 一切对内存的访问都必须通过对象的实例变量来实现 ,这样就防止程序员使用 ”特洛伊 “木马等欺骗手段访问对象的私有成员 ,同时也避免了指针操作中容易 产生的错误
支持网络编程:
Java语言的特性使它可以最大限度地利用网络。Applet是 Java的小应 用程序 ,它是动态、安全、跨平台的网络应用程序。Java Applet嵌入 HTML语 言 ,通过主页发布到 Internet。网络用户访问服务器的 Applet时 ,这些Applet 从网络上进行传输 ,然后在支持 Java的浏览器中运行。由于 Java语言的安全机 制 ,用户一旦载入 Applet,就可以放心地来生成多媒体的用户界面或完成复杂的计算而不必担心病毒的入侵。分布性:
Java是面向网络的语言。通过它提供的类库可以处理 TCP/IP协议 ,用户 可以通过 URL地址在网络上很方便地访问其它对象。丰富的类库:
语言包提供的支持包括字符串处理、多线程处理、例外处理、数学函数处理等。 实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。
输入输出包用统一的 “流 ”模型来实现所有格式的 I/O,包括文件系统、网络、输入
低级网络包用于实现 Socket编程。
抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件
网络包支持 Internet的 TCP/IP协议 ,提供了接口。面向对象程序设计——对象、类与实体
“对象”译自英文的“object”,现实世界实际上是由object组成的,我们看到的一切都是object。程序设计语言为解决现实世界的问题而存在,因此,我们自然会想到,让程序设计按照我们平常看世界的方式运作,这样才最自然,这就是面向对象的程序设计的出发点。面向对象程序设计,确切的说,对象是现实世界的某个具体的物理实体在计算机逻辑中的映射和体现。比如:每个人都是一个具体存在的实体,有高度、体重等很多属性,也有走路、工作等很多行为。这样的实体在程序设计中可以表达为计算机可以理解和操作的对象。
类:每个对象都是属于某种类别的。也就是说类是同种对象的集合与抽象。属于类的某个对象被称为是类的一个实例。
对象的状态与行为:对象的状态也称为静态属性。用计算机术语来说也就是变量。每个对象都有自己专有的变量。比如,具体的一个人,有身高、体重等。
对象的行为也称为动态属性,在计算机内部用方法来表示。比如,人有走路、工作的行为。
对象的关系:
包含:当对象A是对象B的属性的时候,称对象B包含对象A。比如电脑与主板
继承:当对象A是对象B的特例的时候,称对象A继承了对象B。比如,鲤鱼是鱼的一种特例。
关联:对象A的引用是对象B的属性,A和B之间是关联关系。Java和 C、C++之间的比较:
对于变量声明、参数传递、操作符、流控制等 ,Java使用了和 C、C++ 相同的传统 ,使得熟悉 C、C++的程序员能很方便地进行编程。同时 ,Java为 实现其简单、安全等特性 ,也摒弃了 C和 C++中许多不合理的内容。
全局变量: Java程序中 ,不能在所有类之外定义全局变量 ,只能通过在一个类中定 义公用、静态的变量来实现一个全局变量。例如 : Class GlobalVar{
public static global_var;}
在类 GlobalVar中定义变量 global_var为 public static,使得其它类 可以访问和修改该变量。Java对全局变量进行了更好的封装。而在C和 C++中 ,依赖于不加封装 的全局变量常常造成系统的崩溃。
Goto语句:Java不支持 C、C++中的 goto语句 ,而是通过例外处理语句 try, Catch, final等来代替 C、C++中用 goto来处理遇到错误时跳转的情况 ,使程序更可读 且更结构化。
指针:指针是 C、C++中最灵活 ,也是最容易产生错误的数据类型。由指针所进行的内存地址操作常会造成不可预知的错误,从而破坏安全性 ,造成系统的崩溃。而 Java对指针进行完全的控制 ,程序员不能直接进行任何指针操作。同时 ,数组作为类在Java 中实现 ,良好地解决了数组访问越界这一C、C++中不作检查的错误。
内存管理:在 C中 ,程序员通过库函数 malloc()和 free()来分配和释放内存 , C++ 中则通过运算符 new和 delete来分配和释放内存。再次释放已释放的内存块或未被分配的内存块 ,会造成系统的崩溃;同样 ,忘记释放不再使用的内存块也会逐渐耗尽系统资源。而在 Java中 ,所有的数据结构都是对象 ,通过运算符new 为它们分配内存堆。通过new得到对象的处理权 ,Java对此自动地进行管理并且进行垃圾收集 ,有效防止了由于程序员的误操作而导致的错误 ,并且更好地利用了系统资源。
数据类型的支持:在 C、C++中 ,对于不同的平台 ,编译器对于简单数据类型如 in t,float 等分别分配不同长度的字节数 ,例如:int在 IBM PC中为 16位 ,在 VAX-11中为 32位 ,这导致了代码的不可移植性 ,但在 Java中 ,对于这些数据类型总是分 配固定长度的位数 ,如对 int型 ,它总占 32位 ,这就保证了 Java的平台无关性。
类型转换:在 C、C++中 ,可以通过指针进行任意的类型转换,而 Java中 ,运行时系统对对象的处理要进行类型相容性检查 ,以防止不安全的 转换。
头文件:C、C++中用头文件来声明类的原型以及全局变量、库函数等 ,在大的系 统中 ,维护这些头文件是很困难的。而 Java不支持头文件 ,类成员的类型和访 问权限都封装在一个类中 ,运行时系统对访问进行控制 ,防止对私有成员的操作。同时 ,Java中用 import语句来与其它类进行通讯 ,以便使用它们的方法。
结构和联合:C、C++中的结构和联合中所有成员均为公有 ,这就带来了安全性问题。Java中不包含结构和联合 ,所有的内容都封装在类中。
预处理:C、C++中用宏定义来实现的代码给程序的可读性带来了困难。在 Java 中 ,不支持宏 ,它通过关键字 final来声明一个常量 ,以实现宏定义中广泛使 用的常量定义。
简 单 的 Java程 序:
Application 与 Applet程序 java程序可以分为两类:java application 和java applet。前者是完整的应用程序,需要独立的解释器来解释运行;后者则是嵌在网页中的非独立程序,由浏览器所自带的java解释器来解释运行。
简 单 的Application程序:
public class HelloWorldApp { //an application
public static void main(String args[ ]){
System.out.println(”Hello World!“);} }
简 单 的 Applet程序: import java.awr.*;import java.applet.*;
public class HelloWorldApplet extends Applet { //an applet
public void paint(Graphics g){
g.drawString(”Hello World!“,20,20);} }
由 于 Applet中 没 有 main()方 法 作 为 Java解 释 器 的入 口 ,我 们 必 须 编 写 HTML文 件 ,把 该 Applet嵌入 其 中 ,然 后 用 appletviewer来 运 行 ,或 在 支 持 Java的 浏 览 器 上 运 行。HTML文 件 如 下 :
Java编程语言程序的认识误区 篇3
软件的生命性
软件是有生命的,这可能是老调重弹了,但是因为它事关分层架构,反复强调都不过分。
一个有生命的软件首先必须有一个灵活可扩展的基础架构,其次才是完整的功能。
目前,很多人对软件的思想焦点还是落在后者:完整的功能,觉得一个软件功能越完整越好,其实关键还是架构的灵活性,就是前者,基础架构好,功能添加只是时间和工作量问题,但是如果架构不好,功能再完整,也不可能包括未来所有功能,软件是有生命的,在未来成长时,更多功能需要加入,但是因为基础架构不灵活不能方便加入,死路一条。
正因为普通人对软件存在短视误区,对功能追求高于基础架构,很多吃了亏的老程序员就此离开软件行业,带走宝贵的失败经验,新的盲目的年轻程序员还是使用老的思维往前冲。其实很多国外免费开源框架如ofbiz compiere和slide也存在这方面陷阱,貌似非常符合胃口,其实类似国内那些几百元的盗版软件,扩展性以及持续发展性严重不足。
那么选择现在一些流行的框架如Hibernate、Spring/Jdonframework是否就表示基础架构打好了呢?其实还不尽然,关键还是取决于你如何使用这些框架来搭建你的业务系统。
存储过程和复杂SQL语句的陷阱
首先谈谈存储过程使用的误区,使用存储过程架构的人以为可以解决性能问题,其实它正是导致性能问题的罪魁祸首之一,打个比喻:如果一个人频临死亡,打一针可以让其延长半年,但是打了这针,其他所有医疗方案就全部失效,请问你会使用这种短视方案吗?
为什么这样说呢?如果存储过程都封装了业务过程,那么运行负载都集中在数据库端,要中间J2EE应用服务器干什么?要中间服务器的分布式计算和集群能力做什么?只能回到过去集中式数据库主机时代。现在软件都是面向互联网的,不象过去那样局限在一个小局域网,多用户并发访问量都是无法确定和衡量,依靠一台数据库主机显然是不能够承受这样恶劣的用户访问环境的。
从分层角度来看,现在三层架构:表现层、业务层和持久层,三个层次应该分割明显,职责分明,持久层职责持久化保存业务模型对象,业务层对持久层的调用只是帮助我们激活曾经委托其保管的对象。所以,不能因为持久层是保管者,我们就以其为核心围绕其编程,除了要求其归还模型对象外,还要求其做其复杂的业务组合。打个比喻:你在火车站将水果和盘子两个对象委托保管处保管,过了两天来取时,你还要求保管处将水果去皮切成块,放在盘子里,做成水果盘给你,合理吗?
上面是谈过分依赖持久层的一个现象,还有一个正好相反现象,持久层散发出来,开始挤占业务层,腐蚀业务层,整个业务层到处看见的是数据表的影子(包括数据表的字段),而不是业务对象。
当然适量使用存储过程,使用数据库优点也是允许的。按照Evans DDD理论,可以将SQL语句和存储过程作为规则Specification一部分。
Hibernate等ORM问题
现在使用Hibernate人也不少,但是他们发现Hibernate性能缓慢,所以寻求解决方案,其实并不是 Hibernate性能缓慢,而是我们使用方式发生错误:
“最近本人正搞一个项目,项目中我们用到了struts1.2+hibernate3,由于关系复杂表和表之间的关系很多,在很多地方把lazy都设置false,所以导致数据一加载很慢,而且查询一条数据更是非常的慢。”
Hibernate是一个基于对象模型持久化的技术,因此,关键是我们需要设计出高质量的对象模型,遵循DDD领域建模原则,减少降低关联,通过分层等有效办法处理关联。如果采取围绕数据表进行设计编程,加上表之间关系复杂(没有科学方法处理、侦察或减少这些关系),必然导致系统运行缓慢,其实同样问题也适用于当初对EJB的实体Bean的CMP抱怨上,实体Bean是Domain Model持久化,如果不首先设计Domain Model,而是设计数据表,和持久化工具设计目标背道而驰,能不出问题吗?关于这个问题N多年前就争论过。
这里同样延伸出另外一个问题:数据库设计问题,数据库是否需要在项目开始设计?
如果我们进行数据库设计,那么就产生了一系列问题:当我们使用Hibernate实现持久保存时,必须考虑事先设计好的数据库表结构以及他们的关系如何和业务对象实现映射,这实际上是非常难实现的,这也是很多人觉得使用ORM框架棘手根本原因所在。
当然,也有脑力相当发达的人可以实现,但是这种围绕数据库实现映射的结果必然扭曲业务对象,这类似于两个板块(数据表和业务对象)相撞,必然产生地震,地震的结果是两败俱伤,软的一方吃亏,业务对象是代码,相当于数据表结构,属于软的一方,最后导致业务对象变成数据传输对象DTO,DTO满天飞,性能和维护问题随之而来。
领域建模解决了上述众多不协调问题,特别是ORM痛苦使用问题,关于 ORM/Hibernate使用还是那句老话:如果你不掌握领域建模方法,那么就不要用Hibernate,对于这个层次的你:也许No ORM 更是一个简单之道。
Spring分层矛盾问题
Spring是以挑战EJB面貌出现,其本身拥有的强大组件定制功能是优点,但是存在实战的一些问题,Spring作为业务层框架,不支持业务层Session 功能。
具体举例如下:当我们实现购物车之类业务功能时,需要将购物场合保存到 Session中,由于业务层没有方便的Session支持,我们只得将购物车保存到 HttpSession,而HttpSession只有通过HttpRequest才能获得,再因为在Spring业务层容器中是无法访问到 HttpRequest这个对象的,所以,最后我们只能将“购物车保存到HttpSession”这个功能放在表现层中实现,而这个功能明显应该属于业务层功能,这就导致我们的Java项目层次混乱,维护性差。 违背了使用Spring和分层架构最初目的。
领域驱动设计DDD
现在回到我们讨论的重点上来,分层架构是我们使用Java的根本原因之一,域建模专家Eric Evans在他的“Domain Model Design”一书中开篇首先强调的是分层架构,整个DDD理论实际是告诉我们如何使用模型对象oo技术和分层架构来设计实现一个Java项目。
我们现在很多人知道Java项目基本有三层:表现层、业务层和持久层,当我们执着于讨论各层框架如何选择之时,实际上我们真正的项目开发工作还没有开始,就是我们选定了某种框架的组合(如Struts+Spring+Hibernate或Struts+EJB或Struts+ JdonFramework),我们还没有意识到业务层工作还需要大量工作,DDD提供了在业务层中再划分新的层次思想,如领域层和服务层,甚至再细分为作业层、能力层、策略层等等。通过层次细化方式达到复杂软件的松耦合。DDD提供了如何细分层次的方式
当我们将精力花费在架构技术层面的讨论和研究上时,我们可能忘记以何种依据选择这些架构技术?选择标准是什么?领域驱动设计DDD 回答了这样的问题,DDD会告诉你如果一个框架不能协助你实现分层架构,那就抛弃它,同时,DDD也指出选择框架的考虑目的,使得你不会人云亦云,陷入复杂的技术细节迷雾中,迷失了架构选择的根本方向。
现在也有些人误以为DDD是一种新的理论,其实DDD和设计模式一样,不是一种新的理论,而是实战经验的总结,它将前人使用面向模型设计的方法经验提炼出来,供后来者学习,以便迅速找到驾驭我们软件项目的根本之道。
JAVA程序语言教学 篇4
会议中, 针对现今占了高等教育半壁江山的高等职业教育也提出大力发展的口号:坚持以就业为目标, 整合教育资源, 改进教学方式, 着力培养学生就业创业能力。
这次会议的精神给我们很大触动, 更高的要求给我们提供了更为明确的方向。作为高职教育体系中最为重要的课程教学环节成为了教学改革的“先锋部队”, 作为信息类课程——Java语言程序设计课程的授课教师, 我对深化教学体制改革、创新教育教学工作有了更深刻的思考和更实际的行动。
具体表现在以下方面:
1、进一步提升学生在课堂中的主
“体”地位, 突出教师的主“导”地位, 从真正意义上实现“教、学、做”一体化。在课程教学中形而上学地谈论高等职业教育中的“理论精、实践多”, 永远显得虚无缥缈, 与实际相差较远。真正意义上实现“教、学、做”一体化不应该仅仅成为一句口号, 而应该体现在具体的课程教学的分分钟里。为了能够更好地体现对学生能力的培养, 在课堂上我坚持以教材为牵引, 以案例为主体, 以实践为重心, 以培养学生能力为目标, 在一个实际案例中穿插入各个知识点, 不仅让学生可以真正掌握知识, 各个小项目教学法也让学生对于课程的理解更加深刻, 将知识最大限度地转换为能力。
抛却教师对课件的依赖性, 对教师自身提出更高的要求, 使用“记事本”做电子黑板, 一堂课下来, 从空白的文档, 逐步完善内容到完整的知识体系形成, 再辅以Java面向对象语言中常用的API文档的展示、传统教学模式——黑板的应用等等多种教学媒体交相呼应, 不仅有利于学生作记录, 同时学生的思路也一直在跟着教师的思路走, 这样的教学效果较之以往产生了明显的积极作用, 从而让我发现, 在信息技术类课程的教学中, PPT的使用较之“电子黑板”, 有一定的不足之处。
“记事本”中的内容精简、实用, 重点突出, 在讲课过程中不断穿插案例, 而案例的内容由浅入深, 由小到大, 由课堂到生活, 逐层递进, 体现实用型价值。授课的思想以抛出案例题目——分析案例内容——师生共同设计——改进程序缺失——学生自行设计的思想贯穿始终, 培养学生的编程思想和分析问题、解决问题的能力。一段时间下来, 学生真的可以抛却课本, 只凭课堂记忆和课后复习, 随堂做出具体的实训题目, 这对于学生以后走进企业有很大好处。
2、课程教学中突出重点, 分散难
点, 树立学生的编程思想, 塑造学生的专业素质。在重点和难点的把握上, 我们不再直接告知学生什么是重点和难点, 加重学生的畏难情绪。而是另辟蹊径, 将各个分散的实训一、实训二, …一一设计, 最终再整合成大的实训项目, 并辅以必要的程序相关的注释, 深入浅出地将思想渗透给学生。为了能够将难点分散, 采取先设置实例需求, 师生共同分析, 将大实例项目拆分成若干个子程序块, 即各个“点”, 之后各个击破, 这时学生看到的就是各个具体的学过的“点”, 最终再合成整体实例。这样学生不但了解了知识的具体应用领域, 也通过分析掌握了知识“点”与“点”间的联带关系, 能寻踪溯源, 真正锻炼学生的实际能力。
3、考试形式的改变, 摒弃应试教
育, 突显能力培养。一张卷纸定分数, 是一直以来的应试传统做法。正因为这种应试的心理, 在高等院校中, 很多学生的学习方法是在考试前突击能及格即可, 不仅对知识的掌握无益, 学生也浪费了太多的时间, 学习质量更是无法提升, 更重要的是并没有达到培养学生能力的目的。深入思考后, 我们创新Java课程的考核形式, 平时加大对学生随堂小实训项目的考核, 在期末考试时不给学生任何题目, 不给任何范围, 以开卷的形式考核。这种方式让学生无法不在平时学习, 提高教学质量的同时, 也提升了学生的学习积极性, 营造了更好的学习氛围。而从学生的期末考试成绩的总体分析来看, 确有积极作用。
JAVA程序语言教学 篇5
在 Java 编程语言中,标识符是赋予变量、类或方法的名称。
2 :标识符命名规则
命名规则如下:
(1) :首字母只能以字母、下划线、$开头,其后可以跟字母‘下划线、$和数字
示例:$abc 、_ab 、ab123 等都是有效的
(2) :标识符区分大小写 (事实上整个 Java 编程里面都是区分大小写的)
abc 和 Abc 是两个不同的标识符
(3) :标识符不能是关键字
(4) :标识符长度没有限制
3 :标 识 符 命名建 议
(1) :如果标识符由多个单词构成,那么从第二个单词开始,首字母大写示例:isText 、canRunTheCar 等
(2) :标识符尽量命名的有意义,让人能够望文知意
(3) :尽量少用带$符号的标识符,主要是习惯问题,大家都不是很习惯使用带$符号的标识符;还有在某些特定的场合,$具有特殊的含义
(4) :由于 Java 语言使用 Unicode 字符集,所以字母包括:
? ‘A’-‘Z’和‘a’-‘z’;
? Unicode 字符集中序号大于 0xC0 的所有符号;
? Unicode 字符集支持多种看起来相同的字母;
? 建议标识符中最好使用 ASCII 字母
(5) :标识符不应该使用中文,虽然中文标识符也能够正常编译和运行,其原因如上一点讲到的:是把中文当作 Unicode 字符集中的符号来对待了。
1.计算机二级考试Java语言程序设计考点:关键字
2.计算机二级考试Java语言程序设计考试大纲
3.计算机二级C语言程序设计考点:指针
4.计算机二级C语言程序设计考点:函数
5.计算机二级C语言程序设计考点解析:运算
6.计算机二级C语言程序设计考点:数组
7.全国计算机二级java语言程序设计考试大纲
8.计算机二级考试Java练习题及答案
9.20计算机二级考试试题(Java)
JAVA程序语言教学 篇6
关键词:Java程序设计 面向对象 质量监控
中国分类号:G424 文献标识码:A 文章编号:1673-9795(2013)02(b)-0177-02
1 课程背景和定位
我院在2011年9月对软件技术专业人才培养方案重新进行论证,并详细修订了实施方案,将软件技术专业分成微软合作、印度国家信息技术合作、浙大嵌入式方向合作三个方向,其中印度国家信息技术合作方向确定了以Java为软件开发平台的信息系统开发和网站架构的培养路线。在第二学期开设第二编程语言《Java程序设计》,其中前导课程是《计算机应用基础》《计算机导论》和《C语言程序设计》。
学生通过前导课程的学习掌握了程序设计的基本结构,初步建立了面向过程的编程思想,具备了数据结构以及算法的基础知识、网络及通信的基础知识,所以在Java程序设计教学中淡化语法和算法,重点突出关键技术,建立面向对象的编程思想,利用Java语言创建桌面应用程序。为后续的《JavaWeb程序设计与应用开发》《JavaEE企业应用开发》《移动应用开发》等课程提供扎实的语言基础和正确的思维模式。
我院从2008年开始开设《Java程序设计》课程,在多年的授课过程中积累了丰富的教学经验,该课程紧扣“应用为主旨、能力为本位”的高等职业教育理念,以“项目导入、任务驱动”教学法贯穿整个课程的教学。
2 课程的教学内容设计
2.1 知识点结构
依据软件技术专业人才培养方案的教学计划,Java程序设计课程的计划课时是128学时,理论和实践各64学时,将其教学内容划分成两个阶段:基础应用和进阶应用。
基础应用阶段,是对Java语言的基础语法、OOP基础(封装、继承、多态)、GUI开发基础、JDBC基础及IDE工具的综合运用等相关知识点及技巧进行详细的讲解及实训演练。
进阶应用:基础应用阶段的基础上,对Java的高级特性进行详细剖析,使学生掌握多线程、IO编程等技术,理解面向对象程序设计基本原则,并能熟悉一些常见的设计模式。
2.2 课程案例设计
针对Java语言在信息领域广泛应用的深入分析,我们选取了简化版的“超市收银平台”作为教学导入项目。对课程项目进行详细分析,并对项目中涉及的知识点进行初步概述。从课程项目中将各模块知识点案例分离出来,该案例与项目前后呼应,目的是让学生理解对应的理论知识点。在每个模块结束时,通过阶段性案例让学生能融合本阶段内容,理解所学知识能应用的范围及如何应用,然后将所做的案例融合到课程项目框架中。
3 课程的教学方法和手段
3.1 “项目导入、任务驱动”贯穿教学过程
教学团队在教学中主要采用以项目导入、任务驱动为主要形式的课程教学模式,遵循“边学边做,先会后学;理论够用,突出技能”的原则,注重对高职专业课程的开发与整合,关注传授知识的实用性和应用性,加强学生专业实践能力。将“超市收银平台”开发项目贯穿于教学的始终,用项目进行新知识的引入,按照项目实施过程将项目划分为一个个具体的比较容易掌握的任务,将知识点隐含在每个任务中,通过完成一个个具体的任务来组织课堂教学。整个教学过程就是整个项目中各个任务的实施,也就是经历以下几个阶段的过程:学生接受任务、发现和提出问题,教师对问题进行思路分析,学生思考和实践,教师讲解和编程演示、其间运用已有知识点并引出新的知识点,学生在观摩和体会的同时获得了新的知识点和技能,教师设置与新技能相关的实训内容,学生自主完成实训内容、主动掌握新的技能,教师答疑并引导学生对问题进行总结和提升。
3.2 庖丁解牛,分組协作
深刻理解Java的关键技术,特别是类对象的封装。封装数据和对数据的操作,使得面向对象程序设计的编码量比面向过程程序设计要多的多。每个成员函数就是一个独立的数据操作,所以编程时要一个一个成员函数来编。让学生通晓庖丁解牛的故事,要求学生做到面目全牛,分组协作。在实训中以项目为单位,小组成员搭配合理,由项目组长、项目副组长进行青蓝结对的形式,达到互助互利的效果,并优化实训课堂氛围,学生实训任务、职责明确。通过一次全过程的学习机会,项目组内部以及组与组的互评和反思,学生能真正掌握专业技能。如图1所示。
3.3 注重实训,量化过程
教学过程中注重实训,量化过程。学生在课前预习、课堂教学及课后巩固环节较难控制,因此,本课程注重实训环节的质量监控,并且以实训环节来带动课前预习、课程教学及课后巩固环节。在每次实训中,给出本次的实训讲义,该讲义中包含实训要求、实训讲解、方法与技巧和编码习惯等相关提示信息,在实训讲义中穿插下次课的新知识点,来达到课前强制预习的目的,有助于下次课堂教学的接受;并且在重要实训中提供相关操作视频,便于课堂及实训中未能理解或掌握的同学课后巩固。这样,利用实训环节,将课前预习、课堂教学及课后巩固环节串联起来。如图2所示。
在高职院校中,学生自我学习的方法和能力较差,为提高实训环节及整个课程的教学质量及效果,我们需要对一些重要的环节进行量化。对于量化公平及量化所带来的额外工作量的简化,可以用信息化管理软件来提供支撑。为此我们开发了用于监控教学过程(包括考勤记录、课堂演练记录、课堂回答提问记录、作业及测验批改记录等环节)的教学过程监督平台,监控实训过程(包括实训讲义的浏览、实训作业的提交、检查、评价、反馈)的实训管理平台、以及监控课后巩固情况的课程论坛、课程资源库、在线题库平台等信息化平台。通过对学生实践过程的监控,降低了学生对语言类课程学习的难度,达到本课程教学培养目标的要求,为后续计算机课程打下一定的专业基础。
参考文献
[1] 潘永惠,陈伟军,包芳.基于项目教学的软件技术课程建设探索[C]//.中国信息技术与应用学术论坛论文集(一),2008.
[2] 张洪军.Java语言方向教学改革探讨[J].工会论坛,2010(11).
JAVA程序语言教学 篇7
关键词:Java教学,教学方法,课程设计
1 引言
众所周知, Java是20世纪90年代初推出的一种纯面向对象编程语言工具, 自从它面世以来, 已经获得了业界的一致推崇, 时至今日, Java已经发展为一个覆盖面广、效率高、易用性强的技术平台。为了适应人才市场的需求, 几乎所有高校都竞相开设了《Java程序设计》等相关课程。虽然IT企业对Java人才的需求量很大, 但却很难招聘到合格Java人员, 其中最根本的原因就是许多计算机专业的毕业生在读期间没有掌握实用的技能与经验, 距离企业的实际用人需求有较大的差距, 因此如何更好地发挥JAVA课程实践性强的特点, 使学生具备很强的动手实践能力、掌握JAVA程序开发技巧、积累项目开发经验便成了计算机教学中一个探讨与研究的热点和焦点。
2 Java程序设计语言教学中的常见问题
在Java程序设计这门课程日常的教学中以及与同事之间的相互交流中, 作者发现该门课程在实际教学中主要存在以下几个方面的问题:
(1) 学生普遍反映对Java程序设计有兴趣, 但同时也畏难。学生的兴趣来源于实际就业需要, Java的广泛应用是学生们想学习Java的主要原因。学生们通常对编程没有足够的了解, 在初学编程时, 很少会有学生真的因为爱好编程而学习Java。由于程序设计不仅要求设计者具有很强的逻辑思维能力, 思路清晰, 要求设计者能不断自我学习, 适应现代编程技术的变化。这对一些学生造成了学习压力, 进而导致这些学生畏难, 害怕编程。
(2) 希望获得更多实用技能和动手能力的培养。Java程序设计在课程改革以前, 主要通过传统的语言教学方法来进行, 在内容上从了解语言特征入手, 重点强调基础Java语法。尽管在实践教学中逐步引入了案例教学, 不过仍缺乏如何运用Java完成实际项目的内容。另外, 教学内容中也欠缺一些与编程相关的能力培养。包括使用参考文档的能力、使用开发工具的能力等等。虽然这些内容均不属于传统教学范围, 但都是学生在实际动手环节中必须用到的能力。因此有必要在Java程序设计教学内容和方法上做一些调整, 以促进学生实用技能的提高。
3 课堂教学方法的探索
3.1 侧重启发编程思想
无论学习哪一种编程语言, 最重要的是掌握其编程思想, 从而培养编程的感觉, 而不是对语言本身死记硬背。编程思想是在反复的实践、观察、分析、比较、总结中潜移默化积累的。多数情况下, 一旦掌握编程思想, 面对新的编程语言时, 只需要简单了解该语言的语法特点就可以即学即用。为了更好的启发学生的编程思想, 首先要培养学生解决实际问题的能力, 以解决实际问题的程序设计思想作为教学的切入点, 加强基础、强化实践、注重应用、引导创新, 启发学生用程序的方式来解决问题, 要把程序的组织结构、语句含义、运行流程和实际问题对应起来。其目的是使学生学会学习、学会思考, 学会自我启发的“关键能力”。教师可以让学生先解决一些简单的实际问题, 掌握编程的一些常用结构和方法。然后边学边用, 学生熟练掌握编程技术后, 就可以独立编程了。
3.2 改进教学手段采用多媒体教学
根据Java课程的特点, 教学手段上应充分利用现代化的多媒体教学方式, 利用大屏幕投影进行直观教学, 采用演示+操作+讲解 (即边讲边练) 授课方法进行教授。多媒体技术为教学提供交互式的教学环境, 学生可以按照自己的学习基础、学习兴趣来选择学习策略、学习的内容和适合自己水平的练习, 体现了学生的主体地位。学生在这种交互式教学环境中有了主动参与的可能, 有利于激发学习兴趣形成学习动机。使用各种软件实时操作进行教学, 学生可以同步感受软件的运行过程。演示程序的调试与运行过程, 真正实现了“用计算机教计算机”, 使教学更具直观性和互动性, 同时加大了授课的知识量。此外, 多媒体所提供外部刺激有利于学生对知识的获取与保持, 获得较好的教学效果。
3.3 采用案例教学激发学生学习兴趣
能够自己动手解决实际问题是学习的最直接动力, 是激发学习兴趣的根源所在。在Java程序设计课堂教学中采用案例教学方法可对每一个单一知识点进行教学。选取的案例都尽可能小而精, 针对特定问题。通过小型案例讲解独立知识点, 以案例模仿的形式促进学生动手能力。学生通过案例研究, 培养一种分析问题的能力和独立处理、迁移性的应用能力。学习过程贯穿于案例分析的过程之中, 培养学生学会抓住或发现问题, 然后结合所学知识寻找解决问题的途径、手段。这样不仅能帮助学生巩固已学的知识, 同时也能帮助学生提高自学能力和设计能力, 强化了案例教学的效果。
3.4 多读源码多动手
学习Java编程语言要经常阅读一些优秀的源码, 对自我提高、开阔视野非常重要。但一定要多动手才能真正把别人的东西消化掉。
很多学生学Java就是看书、听课, 当时是明白了, 过后马上就忘记。如果不愿意敲键盘, 就不如不学。即使有时候所敲的代码不太明白, 可以先运行, 看看结果, 增加感性认识, 然后上升到理性的认识。所以教学中一定要鼓励学生多动手写代码。
3.5 加强职业素质教育
良好的职业素质能使学生在工作生涯中终生受益。教师在传授专业知识的同时应该强调职业素质教育, 把职业素质教育融合到教学中去, 注重学生综合能力和解决实际问题能力的培养。
对于Java教学, 职业素质教育首先应该强调团队精神和协作能力。现实中的开发任务几乎是个人力量不可能完成的, 需要通过组成强大的团队来创造奇迹。其次应该养成规范化、标准化的代码编写习惯。良好的编写习惯, 使代码具有良好的可读性, 不但有助于代码的调试和移植, 也有助于不同技术人员之间的协作。
4 强化Java课程设计提高编程能力
课程设计是对本课程所学内容的综合运用和巩固提高, 它在整个Java教学过程中起到一个承上启下的关键性作用, 一方面能够巩固前面所学的基础知识;另一方面能让学生了解Java开发的一些基本流程, 为日后从事Java领域的开发作铺垫。
在课程设计的过程中采用分组的组织形式, 以完成小型任务为目标, 锻炼学生合作和设计能力。在分组实验中, 学生以3个人左右的小规模进行分组, 这样一方面可以保证每个学生都有动手实践的机会, 同时也能充分参与合作。学生个人的最终成绩取决于团队的最终成绩、个人在团队中的贡献以及教师对个人表现的评价。分组实验中通过竞争机制和团队成员的交流可以促进学生学习兴趣和提高团队合作能力。
在课程设计阶段, 学生已经有了一定的Java编程基础, 欠缺的主要是实际的开发经验和全面系统的、深入的掌握Java技术。解决的方法就是通过企业真实项目练习, 对所学知识进行深化, 然后通过项目来获取实际开发的经验, 尽快达到企业的实际要求, 让学生在具体的项目中进行学习, 缩短学生与企业之间的距离。
5 结语
Java教学一定要围绕提高学生实践应用能力展开, 注重面向对象编程思想的培养, 教学过程中要引入多媒体技术等先进教学手段。文中探讨了Java教学的一些问题, 提出了改进措施, 并实际应用于Java教学, 取得了很好的效果。其实, 教学关键在于因材施教, 所以文中所提及措施, 也不一定适合所有Java教学活动。但希望能够抛砖引玉, 愿各位教师教好Java, 愿各位学生学好Java。
参考文献
[1]全成斌, 杨士强, 赵有健.计算机工程实践教学的改革与探索[J].计算机教育, 2008 (4) .
JAVA程序语言教学 篇8
1 内容讲授策略
根据信息管理与信息系统专业的培养目标和该课程在专业中的地位,教学内容分为三部分:基础知识,核心知识和提高知识部分。
(1)基础知识部分
主要讲授面向对象思想的基础理论,java语言的诞生,特点,语法规则和编程运行环境。包括Java的环境、语法、面向对象思想和异常处理等内容。常言道,万事开头难,对于任何一门课程来说,第一节课是非常重要的,直接关系到学生对新课程的认识和对新课程采取的态度,在Java语言教学中,首先给学生演示一个JDK中DEMO目录中的范例程序,通过一些文字、图形、图像等多媒体信息给学生,激发学生学习这门课程的积极性,演示完实例打开范例程序源代码,让学生对Java语言有一个感官认识,然后再进行基本概念的教学。
(2),核心知识部分
讲述面向对象技术的封装性、继承性、多态性和抽象性等特性,并采用Java语言实现这些特性的设计技术。针对信管专业的特点,对此部分内容的讲述引入案例,让学生来分解各功能模块,再进一步找出对应的包和类,通过拆解过程和对类的分析,引入Java核心技术的学习。另外在此阶段,学习Java类库,为下一步的开发做好准备。Java语言的功能很强大,是因为Java类库的支持,而且这些类库可以随时查看Java API文档或利用集成开发环境下的联机帮助来获取。根据笔者的教学实践和开发经历,有必要让学生学习这些类库,以及对这些类库的整体结构了解。
(3)提高知识部分
在前面知识学习的基础上一方面讲述面向对象核心技术的一些实际应用领域,可以根据专业需要掌握多线程、数据库处理、图形处理以及JSP等内容。另一方面,学生根据所选的大作业题目进行开发和实践的过程。
2 多种理论教学方法并举
针对不同的内容,将案例教学、交互式教学、网络化教学以及多媒体等教学方法灵活使用和动态结合,改变以往单一、枯燥的模式。
(1)案例教学:将一个完整的、典型的、有一定实用价值的学生感兴趣的核心实例贯穿于教学全过程,对提高学生的编程能力和对知识的运用能力是非常有帮助的。譬如在讲授继承、封装、多态等的概念时,就可以要求学生将实例中所涉及的各个类文件(书目、书籍、预订、借阅、借阅者、系统管理员,图书馆管理员等)创建出来,然后和实例中实际创建的类文件对比,加强了对类以及面向对象特点的理解。后面讲解多线程、输入输出流、图形用户界面、数据库操作等时,把实例的各个模块分解出来,让学生来编写和开发,再分析实例中的代码,引出一个一个的知识点,从而提高教学的深度和广度。
(2)交互式教学:教师是学生学习活动的组织者和实施者,时刻关注学习者的学习过程并为其提供指导和反馈,学生在教师的帮助下学习,不断与教师进行不同形式的交流,汇报自己的成果,获得教师的反馈,提出疑难问题等。该模式中学生真正作为主体参与教学活动,由更大的自由支配空间,在学习过程中掌握主动权,使学生全身心投入学习过程中去,探索新知识,有利于培养学生的实际开发能力和创新能力。我校安装的是Lanstar多媒体网络教学系统,该系统可以进行广播教学,作业提交、学生讨论和举手提问等多种方式教学,可以帮助教师全方位的监控每个学生的学习情况。
(3)网络化教学:网络化教学是对课堂教学的有力补充,是实施教学改革的一种重要手段,也是教学网络化的趋势。一方面笔者在教师个人计算机上构建FTP服务器,将课程教学中的软件工具、源代码、教学资料等上传,以适应学生的学习需求;另一方面鼓励学生参与网上论坛、专题学习网站、专题QQ群、各大门户网站提供的免费博客系统等及时提出和解决问题,通过和编程高手的在线交流,提高编程能力。通过和教师的交流,教师能及时获得教学效果的反馈信息,掌握学生的学习情况,并用来指导更好地把握好教学进度和教学过程。
(4)合理使用多媒体:根据Java语言的特点,采用多媒体教学与传统教学方式的有机结合。多媒体教学方式呈现的信息量大,图文表直观生动,便于程序流程的动态演示,可进行程序的编辑、编译、运行与调试整个过程的演示,以合适的播放时间、速度、方式来展示信息的动态的变化过程,能加深学生对知识点的印象和记忆,也增加了学生的感性认识。但是对于一些教学重点难点内容,教师还是需要进行必要的板书来讲解,同时用自己的语言,手势和表情传达知识和信息,已达到较好的教学效果。
3 重视实践与操作
Java语言是一门实践性非常强的课程,必须通过不断的实践才能真正掌握面向对象的核心思想和编程技巧。
(1)开发环境
在开友工具和环境的选择方面,分为两个阶段:首先在基础知识学习阶段,直接使用记事本或Editplus,使用DOS命令环境,让学生一步一步学习Java的编译和运行环境以及Java的处理机制和架构;重点在实际开发上选择E-clipse或JBuilder等集成开发环境,这些环境下学习编写Java程序,界面友好,上手快,而且继承环境本身还有很多的可视化功能。
(2)实验环节
在教学过程中,要注重实验内容与教学内容的配套,选取有配套练习的教材,安排上机实践,通过上机使学生能够掌握教学中的重点和难点。要求学生根据题目要求分析问题,然后编写好程序并进行调试和测试,来检验程序的正确性,通过学生反复上机操作,也提高了学生们思考问题和解决问题的能力。
(3)作业环节
在后期的学习中,安排课程大作业,学生3-5人一组,完成一个小系统的开发。例如选择图书管理系统、学籍管理系统等进行开发,这样,可让学生理解程序整体开发和运行过程,学会如何综合利用所学的知识进行相应实际问题开发,真正把所学的内容用到实处,按照学生学习的心态,把所学的内容通过作品形式体现出来,学生才有成就感,真正明自程序设计学习的重要性与作用,以此来推动进一步的学习。
(4)课程考核
课程考核直接关系到学生是否可以获得学分的问题,是检验学生对课程掌握的程度的一个标准。如果采取传统闭卷考试形式,大部分学生会对所学内容死记硬背,不利于培养学生理论联系实际和动手编程的能力。针对该问题,笔者采用优化的课程考核方式,即理论考试、实验考核和课程大作业和相结合的方法。理论考试可以着重考察学生对基本概念的理解和对基础知识的掌握,实验可以侧重考察学生综合应用知识的能力;课程大作业主要是让学生在学好教学内容的同时完成一些实践性、应用性较强的题目,譬如Windows中的记事本、画图、扫雷等的模拟,包括从程序的编写,调试,测试和打包等环节。
结束语
信息技术发展的今天,新技术、新知识不断涌现,对人才需求的质量也会不断提高,要与时俱进,改进教学内容和教学方法,努力调动学生学习的积极性和主动性,以培养出高素质的创新性的信息系统人才。
作为从事面向对象程序设计课程的教师,探索该类课程的教学方法,提高教学质量是必须重视和思考的问题。
摘要:面向对象程序设计(Java语言)是信息管理与信息系统专业的主干课。本文结合信管专业的特点,描述了Java程序设计这门课程在教学内容、教学方法和手段、实践教学以及考核方式等方面的实践和探索。
关键词:Java语言,Java教学,教学方法
参考文献
[1]魏新军,陈嘉.基于Java程序设计的教学探究[J].文教资料.2006.5第13期
[2]吴跃,陈峥.面向对象程序设计教改探索[J].计算机教育.2010.4第8期.
[3]符蕴芳,赵英豪.面向对象程序设计教学改革与实践[J].中国成人教育2010年第11期
浅析Java语言程序设计 篇9
Java是由Sun Microsystems公司于1995年5月推出的一种程序设计语言, 主要应用于互联网、个人PC、数据中心、游戏控制台、科学超级计算机。它刚开始的名字叫“Oak”, Java最初是为电视、控制烤面包机等家用电器的交互操作而设计的, 但当时并没有得到成功的推广、随着互联网的发展, Java经过数次的设计和改进后演变成当前受到极大欢迎的Java。
基于Java前身设计的特点, 其具备了可移植性和平台无关性, 成为了可以运行于不同的环境、不同的CPU上的程序语言。当前Java在全球得到了大量的推广和应用, 在计算机应用中发挥着强大的作用。
2 Java的特征
人们在传递信息时常利用自身的器官进行表达, 如声音、情绪、动作、姿态等。但这些声、图、像是转瞬即逝的, 在当前计算机发达的社会, 为保留这些信息并把信息进行传递, 程序语言便应运而生。
程序设计语言是表达软件的工具, 是面向机器的人工语言。Java作为一种高级的程序语言, 在实际应用中拥有面向对象, 简单性, 可移植性, 分布性, 动态性, 健壮性, 体系结构中立性, 安全性等多种优点。
2.1 简单性 (Simple)
Java语言是对C++语言的升华, 有不同与C++语言, 它在C++语言的基础上进行了很大的改进, 在保留了C++语言精华部分的同时也摒弃了C++语言中不常用、不易于理解、繁杂的部分。因为Java是在C++语言的基础上发展的所以懂得C++语言的人如果学校Java就会变的很简单, 同时, 学习Java语言也不需要拥有C++语言基础。
2.2 面向对象 (Object-oriented)
Java语言虽然是杂合语言, 但它是纯面向对象的编程语言。出了基本的数据类型外, 为了使程序语言更容易理解, Java程序语言的编写思想是纯粹面向对象的。
2.3 体系结构中立 (Architecture-neutral)
Java源程序经编译后的字码节与计算机体系结构及平台无关, 可在多种系统上运行。
2.4 可移植性 (Portable)
体系结构的中立性使Java程序可以在不同的平台上运行, 但Java语言的文本是统一的, 在面对不同的机器结构时, 整数32位、长整数64位保持不变。Java系统提供的类库是可以访问任意不同的平台的, Java语言的可移植性实现了软件的“一次开发, 处处运行”。
3 Java运行原理
程序语言是需要经过编译或者解释后才能被电脑执行的, Java程序语言需要经过编译和解释两个过程后才能够被电脑执行, Java源程序准备好, 第一步需要将其翻译成源代码;第二步由虚拟机将源代码转换成电脑能够识别的程序。
Java虚拟机 (Java Virtual Machine) 是想象中的机器, 它的实现需要通过在现实中的计算机上进行软件模拟, Java虚拟机有自己想象中的硬件, 如处理器、堆栈、寄存器等, 还具有相应的指令系统。虚拟机是机器与编译程序之间的连接者, 它具有抽象性, 在编译程序翻译成虚拟机能够识别的源代码之后, 解释器就能够将源代码转换成电脑能够执行的程序。由于编译程序与虚拟机拥有共同的接口, 所以编译程序主要的面向对象即是虚拟机, 只需要生成虚拟机能够理解的程序。在Java中称能够被虚拟机理解的代码为字节码, 虽然各个平台的解释器各不相同, 但是虚拟机都是相同的。Java源程序经过编译器编译后变成虚拟机能够理解的字节码, 虚拟机对字节码进行解释, 虚拟机将字节码发送给解释器, 解释器将其翻译成特定机器能够理解的机器码, 然后进行运行。
Java虚拟机由指令集、寄存器、栈、无用单元收集堆和方法区域五个部分组成, 它是Java语言的基础, Java语言相对于其他的程序语言而言比较容易学习, 使用的概念不多, 较简单。而且Java自身具有自动内存垃圾收集功能, 在运用Java时不需要对内存进行释放。
4 Java编译案例
4.1 Java开发工具
Java可采用的开发工具有多种, Sun公司开发的Java开发工具包JDK (Java Development Kit) 在Java开发中较为常用。
4.2 Java编译
在编写Java程序时, 首先需要按照Java语言的语法规则编写相应的源文件代码利用编译程序将Java源程序编译成可执行的程序, 生成由虚拟的机器代码组成的类文件。下面简要分析简单的Java程序。
使用编辑程序时, 输入上例中的源代码, 并以普通文本格式保存, 且保存时文件名必须为Hello Lucy.java。
然后用编译程序javac.exe编译上述源程序文件, 在Windows系统中输入javacHello Lucy.java
经编译后生成类文件Hello Lucy.class
然后使用解释程序java.exe进行解释运行, 命令为:java Hello Lucy
解释运行后, 屏幕将输出:
Hello, Lucy!
5 结语
Java的诞生是对传统传统计算机模式的挑战, 对计算机软件产业都产生了深远的影响, 随着信息时代的发展, Java在未来的时间里将会有更广阔的应用前景。
摘要:Java是随着软件开发技术的演变而出现的, 它是一种功能强大的新型的面向对象的程序设计语言, 可以解决很多传统上的程序设计难题。本文主要从java语言的历史、特点、编译等方面对Java程序设计进行了简要阐述。
关键词:Java语言,软件开发,程序设计,信息
参考文献
[1]冀振燕, 程虎.Java编译程序技术与Java性能[J].软件学报, 2000 (2) .
[2]闫伟, 谷建华.Java虚拟机即时编译器的一种实现原理[J].微处理机, 2007 (5) .
JAVA程序语言教学 篇10
FTP(File Transfer Protocol),是文件传输协议的简称,用于在Internet上控制文件的双向传输。用户在Internet上通过FTP服务器可以进行文件的上传(Upload)或下载(Download),也可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量资源。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有网络应用编程接口(java.net),提供了用于网络应用编程的类库。Java语言支持多个线程的同时执行和多线程之间的同步机制,提供了安全机制以增强在网络环境中的安全性。因此使用Java语言开发FTP client(客户端)程序是一个合适的选择。本文中就如何使用Java语言实现FTP客户端程序进行了探讨。
2 基于Java语言的FTP Client程序设计
2.1 FTP的特点
FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录、列文件目录、设置传输参数及传送文件等。
FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。
FTP的主要操作都是基于各种命令基础之上的。常用的命令有:
1)设置传输模式,它包括ASCⅡ(文本)和BINARY二进制模式。
2)目录操作,改变或显示远程计算机的当前目录(cd、dir、ls命令)。
3)连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接。
4)发送操作,put命令用于传送文件到远程计算机;mput命令用于传送多个文件到远程计算机。
5)获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。
6)退出操作,BYE命令。
2.2 编程思路
根据FTP的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。编程技巧说明如下:
2.2.1 主函数设计
在主函数中,完成服务器端口的侦听和服务线程的创建。利用一个静态字符串变量initDir来保存服务器线程运行时所在的工作目录。服务器的初始工作目录是由程序运行时用户输入的,缺省为C盘的根目录。关键代码如下:
2.2.2 线程类的设计
在Java中,根据多线程应用程序继承或实现对象的不同可以采用两种方式:一种是应用程序的并发运行对象直接继承Java的线程类Thread;另外一种方式是定义并发执行对象实现Runnable接口。不管使用哪种方法,线程类的主要设计都是在run()方法中实现。用run()方法得到客户端的套接字信息,根据套接字得到输入流和输出流,向客户端发送欢迎信息。
2.2.3 FTP命令的处理
1)FTP访问控制命令:
User命令和Password命令分别用来提交客户端用户输入的用户名和口令。相应的username(user)和password(pass)命令处理代码如下:
此外,还有CWD命令用来改变工作目录到用户指定的目录,CDUP命令改变当前目录为上一层目录和QUIT命令用于退出及关闭与服务器的连接,限于篇幅代码从略。
2)传输参数命令:
Port命令用于FTP服务器IP地址和端口号的传输。使用该命令时,客户端必须发送客户端用于接收数据的32位IP地址和16位的TCP端口号。这些信息以8位为一组,使用十进制传输,中间用逗号隔开。Port命令处理代码如下:
此外,还有用来完成类型设置的TYPE命令,限于篇幅代码从略。
3)FTP服务命令:
文件传输命令包括从服务器中获得文件RETR和向服务器中发送文件STOR,这两个命令的处理非常类似。处理RETR命令时,首先得到用户要获得的文件的名称,根据名称创建一个文件输入流,然后和客户端建立临时套接字连接,并得到一个输出流。随后,将文件输入流中的数据读出并借助于套接字输出流发送到客户端,传输完毕以后,关闭流和临时套接字。STOR命令的处理也是同样的过程,只是方向正好相反。RETR(RETEIEVE)命令处理的关键代码如下(STORE命令类似,代码从略):
LIST命令用于向客户端返回服务器中工作目录下的目录结构,包括文件和目录的列表。处理这个命令时,先创建一个临时的套接字向客户端发送目录信息。这个套接字的目的端口号缺省为1,然后为当前工作目录创建File对象,利用该对象的list()方法得到一个包含该目录下所有文件和子目录名称的字符串数组,然后根据名称中是否含有文件名中特有的“.”来区别目录和文件。最后,将得到的名称数组通过临时套接字发送到客户端。LIST命令处理代码如下:
DELE命令用于删除服务器上的指定文件。则DELE(DELETE)命令处理代码如下:
3 结论
上文中对如何使用Java语言实现FTP客户端程序进行了探讨,并给出了关键代码实现。实践证明,通过这种方法实现的FTP客户端程序实用效果良好,能够完成网络上的文件传输与共享任务。
参考文献
[1]万江平,黄卓明,夏志忠,等.用Java开发的FTP服务器[J].华南理工大学学报:自然科学版,2001(8):65-69.
[2]杨洋,杨涛,武丽.基于Java的计算机辅助学习系统设计[J].微计算机信息,2006(21):156-15.
[3]冀志刚,王祥.用JAVA语言实现FTP客户端[J].唐山师范学院学报,2006(5):81-82.
[4]刘冲,张海玥,张卫东,等.用Java JDK编写FTP客户程序[J].计算机应用,2001(S1):99-100.
[5]杨淑萍.基于Java的FTP客户端程序的设计与实现[J].现代计算机,2005(10):90-91.
[6]周凤艳,余华鸿.FTP研究及基于JAVA的客户端实现[J].今日科苑,2008(14):198.
[7]张景葳,万江平,刘尚余.用Java开发FTP代理服务器[J].计算机应用研究,2001(5):104-107.
浅谈Java语言实验教学 篇11
关键词:Java;实验教学;教学方法
中图分类号:TP312.1-4 文献标识码:A 文章编号:1674-7712 (2014) 18-0000-01
Java语言作为一门面向对象的编程语言,已经成为高校的一门必修课程,在进行Java语言的教学过程中,理论教学面向全体学生,主要采用教师课堂讲解(讲解基本语法,知识内容,编程技巧,学生随堂练习,教师边讲边操作),学生互动的授课方式,让学生掌握基础知识。而实验教学必须辅以实训实习和课程设计来提升教学的深度和广度,让学生将所学理论知识通过实验进行深化,加深理论知识的掌握,同时也锻炼了自己的实践操作能力。在Java语言的整个实验教学过程中,教师要根据学生的实际能力,采用以学生为主体、教师为主导、逐步引导、启发式的教学方法,充分发挥学生自主学习的能力。采用“项目驱动,案例教学,一体化课堂”的教学模式,让学生多进行上机演练,让学生通过动手练习发现问题、提出疑问,首先自己思考解决问题,解决不了再找教师帮助,根据学生提出的问题教师进行综合答疑,最后根据实验过程进行全面总结。这种方法已在本校的实践教学中进行应用,取得了较好的效果。
一、教师需做必要的实验准备
首先,应该充分了解教学大纲的内容,因为教学大纲是教师进行教学的指导棒,它对于理论教学有指导的作用,并且,对于实验教学也有一定的指导意义。也就是说教学大纲无论是理论教学还是实验都是非常重要的。如果要想做好实验前的准备事项,必须充分掌握教学大纲中涉及到的知识点。详细说来,应该设计出实验题目,实验题目要满足两个要求,第一个要求,学生在实验前必须能够掌握必要的基础知识,以便为下一步的学习打下一定的基础。第二个要求,设计的题目要有深度,为开发实用程序提供可能。
其次,作为教师,应该在实验的教学之前备课,备课主要包括实验内容的确定,教学目的的确定。在实验课以前,必须要让学生清楚的知道每次实验课都要做什么、学什么;除此之外,实验内容的设计也是非常重要的,因为实验内容必须围绕大纲,内容必须紧靠大纲,必须使得学生充分了解教学大纲中的重点和难点。另外,作为一个教师,必须在实验课上课前提前把给学生做的题目做一遍以便做到心中有数,在做题过程当中,对于不同的题目难易系数也要做到心中有数,以便学生在做题过程当中遇到问题时能够及时帮助其解决,这样能够节省课堂时间。因为Java的实验性很强,多联系能发现很多问题。在开始上课之前教师还要对实验室机房的机器进行调试,确保机器和软件都能正常运行。
最后,教师应该了解学生状态,做到因材施教。因材施教是教学中非常重要的原则,如果想上好计算机Java语言实验课,这是一个的重要前提条件。不同学生的实际情况不同,有的同学喜欢编程,并且具有一定的编程基础(其他语言),但是,有的同学对编程知识了解的较少,甚至一无所知,这就需要教师在教学过程中采用因材施教的方法,而不能采用填鸭式的一鞭子赶,也就是说,在教学中要避免注入式教学,采用启发性教学。应该启发学生学习Java,让学习的学习动机变成内部动机,使得学生主动学习,主动思考如何解决问题。可以根据学生的情况,将学生分组进行教学,编程基础较好的同学可以去设计一些小项目做一下,基础一般的同学可以联系相对难的题目,基础较差的同学需要巩固基础,多加练习,总结经验,为进一步学习做准备。
二、教师的实验教学方法
对于编程语言的初学者来说,因为Java语言是一门面向对象的课程,所以对于学生而言是相当难理解的。他们缺少编程的思想和模式,编程对学生而言就是新鲜的。所以,在实验课要指导学生在学习过程中逐步建立编程理念和编程模型,要比让学生机械的把程序敲入电脑,查看程序结果修改程序重要的多。因此如何通过实验课提高学生对Java语言的学习兴趣,如何建立编程思想才是教师上实验课应该考虑的重要内容。具体的讲课过程如下:首先简要复习一下理论上所学的知识,加深学生对Java理论知识重点和难点的理解,实验操作需要有扎实的理论知识作基础,只有深入透彻的理解了理论知识才能上好实验课;其次让学生进行预习,针对学生遇到的不好理解,不好掌握的问题,教师要进行重点详细的讲解,然后再针对实验教学计划进行实验课的教学。教师应该布置比较有综合性的题目,将题目用到的重点知识进行讲解,引导学生思考解题思路,留给学生足够的时间自己思考,自己练习,在这其间老师可以进行指导,学生遇到问题,引导学生进行解决,不仅可以加深学生对基本知识的理解,还可以培养学生的编程思路。
三、让学生动手,强化实践环节
当学生掌握了一定的Java编程基础知识以后,学生缺少的是实际的开发经验和全面应用Java技术的能力。该能力可以通过实际项目来锻炼提升,首先对所学知识进行巩固复习,然后通过做项目来获取实际的开发经验,尽快达到实际锻炼的要求。比较典型的实验项目有纸牌游戏,在线购物系统,图书馆系统等,需要学生自己进行课题设计。学生可以几个人一组完成一个课题,每个课题都要有新穎性,在设计性实验中,为了使得学生充分了解自己的进展,把每个作业分成几大块,规定每一个学时中应完成的内容,给出每个块要完成的功能,并给出详细描述,要求学生编写相应代码。学生在实际项目的开发中,不可避免的会遇到各种问题,这就需要教师在教室内巡视,学生一旦遇到问题,教师要给学生进行讲解指导,对于普遍性问题,需要进行归纳总结,统一讲解。这种方法比较符合学生的现状,在实际教学中取得了教的效果,比较值得推广。
四、结束语
Java语言教学重点培养学生面向对象的编程思想和实际的应用开发能力,注重培养学生自主学习能力和独立思考能力,独立解决问题能力,为更深入的学习打基础,教学过程中要采用多媒体,并且引入项目驱动。以上是对Java教学问题的一点简单概述,提出了自己的观点和意见,并实际应用于Java教学,取得了很好的效果。
参考文献:
[1]耿祥义,张跃平.Java 2实用教程(3版)[M].北京:清华大学出版社,2006:95.
JAVA程序语言教学 篇12
关键词:java语言,程序漏洞,检测技术,诊断技术
Java语言是近几年计算机编程语言当中应用最为广泛的,根据国际计算机开发语言TIOBE排行榜的统计显示,自2002 年以后,Java语言的使用频率始终稳占计算机编程语言使用频率榜单的前两位,并且随着近几年安卓智能手机系统应用范围的扩大,其也将Java语言作为软件开发语言,因此进一步扩大了Java语言的应用范围。但在实际应用过程中该语言仍存在一定的程序漏洞,这些漏洞会为软件开发公司和使用者带来较大的损害,因此有效避免Java语言漏洞就成为了其发展的重要方向。
1 Java语言的概述
1.1 Java语言的概念
Java语言是一种能够编写跨平台程序的设计语言,该编程语言的通用性和平台移植性较强,目前被广泛地应用在计算机程序、移动端程序、游戏控制、互联网程序等领域。最早的Java编程语言也被称为“Oak”,主要是为一种消费类电子产品而设计的,直到1995 年才正式被更名为Java,同时将该编程语言重新设计,主要应用在Internet程序的编写方面,因此也推动了Web的快速发展。Java语言一经出现就对传统的C语言形成了巨大的冲击,并且随着现代互联网技术的不断发展和深化,使得Java语言的应用前景更加广阔。通常根据其所应用的范围将Java语言分为三大类,分别是标准版(SE)、企业版(EE)和微型版(ME),目前已知应用Java语言的程序员已经超过了C语言使用者。同时Java语言具有允许编程者一次性完成的代码编写的优势,并且可以在多种运行环境下测试,编程人员还不需要根据操作系统的配置对代码进行更换,真正实现了跨平台应用。加之现代安卓系统对Java语言的广泛应用,使得该编程语言的应用率呈几何倍数增长,仅截止到2011 年就有超过30 亿台依靠Java语言编程软件运行的智能手机投放市场,而如今则更多。
1.2 Java语言的程序漏洞检测和诊断的意义
Java编程语言本身具有极其优秀的兼容特性,因此在PC机、服务器以及智能手机等领域的应用非常广泛。但同时也由于现代人对于计算机、手机以及互联网的广泛应用,使得用户对于Java程序的安全性和稳定性有了更高的要求,而编程者本身难以对Java语言自身存在的漏洞进行弥补,因此必须利用有效的漏洞检测和诊断技术进行纠错。同时需要注意的是,在使用计算机和手机时用户对于Java程序安全性的要求并不一致。首先,在使用移动端智能手机时,用户大多将个人信息存储在手机当中,因此用户虽然可以接受手机应用软件上的一些功能缺陷,但是却不能忽视手机程序本身存在的安全漏洞,所以近几年电子技术开发企业均在不断加强手机漏洞检测工作的力度,但目前仍有大量的恶意软件可以绕过检测工具对用户的移动终端造成损伤。有效提升Java语言程序漏洞检测和诊断技术已经成为了各大电子技术企业的发展趋势,也成为了现代电子产品用户的重要需求。
2 确定性重现技术对Java程序漏洞的检测和诊断
使软件程序的性能能够实现最大化的利用一直是软件开发者所追求的目标,而随着现代计算机和移动端多核技术广泛地应用,使得并发程序的需求量大大增加,使原本仅供大型并行计算机和大规模集群计算机所使用的多核并发程序得到了更加广阔的市场。但是高性能的并发程序编写却成为了现代编程人员最难的“考题”之一,其主要是因为并发程序在运行过程中会出现明显的不确定性,造成这种情况的原因在于程序运行过程中线程交替顺序具有波动性,无法满足编程人员的原有要求,使得运行结果无法实现,也就被称为“并发错误”。这种问题一般很难检测和诊断,其与不同的线性程序漏洞不同,不仅具有线性程序漏洞的特点,而且还会因线程交替顺序的变化而产生不同的运行结果。虽然实际操作过程中这一漏洞发生的概率较低,一旦出现就会导致严重的后果。
2.1 并发程序的检测和诊断
目前,一般采用的应用程序检测和诊断流程包括三个部分,其一是测试用例的设计和测试;其二是跟踪程序定位漏洞;其三是对漏洞的修补。其中跟踪程序并定位的测试过程是最消耗时间的,但是并发程序在运行过程中难以对错误进行重现,因此无法有效对漏洞进行跟踪和定位,而漏洞的修补工作主要取决于编程人员对于漏洞触发因素的判断,如果无法对漏洞进行定位,那么也就无法了解其触发因素,使得编程者不能对漏洞进行有效的修补。
而为了弥补这一问题,编程人员就需要利用一种能够重新并发程序漏洞的技术。在程序测试阶段,编程人员一般会在调试过程中添加日志信息,而当这些日志信息能够被用来重现错误程序时,就会被用作与漏洞的诊断工作中,编程人员可以反复对错误的程序进行运行,并根据采集信息的细化研究,最终确定出错的程序代码位置,并对其进行相应的修复工作。
2.2 确定性重现技术
确定性重现技术最初也是被应用在重现程序错误段的工作中,其主要方式在于将所有可能引发程序运行问题的不确定因素添加到日志信息中,并将其重现。而这种技术之所以能够帮助检测和诊断Java程序的漏洞,主要就是在于其能够将所有不确定因素进行列举,进而获得确定性的漏洞定位。通常情况下这种不确定的因素分为两大类,其一是程序输入的过程,例如文件读取、文件录入等,此时就可以通过日志信息对这些操作进行重现;其二是在系统被调用时产生的返回值,例如程序运行时系统对运行时间的获取和随机值的生成等,而此时所产生的返回值也被看做是程序输入当中重现的数据。但是在重现过程中部分由于硬件状态所导致的不确定因素很难被重现,例如指令时间之间的差异会导致程序运行的差异,因此在记录这种不确定因素时一般是对其逻辑时间进行记录,而不是物理时间,其可以有效地对这种非线性因素进行重现和执行,进而获得错误程序的定位。
2.3 基于依赖的重现
当两条程序指令同时对一个物理页面、缓存或内存地址进行访问的过程中,其即被视为对数据产生了依赖,这种依赖情况又被称为冲突和限制。该情况发生需要满足三大条件,其一是当两个指令的访问对象均在同一内存位置上时;其二是两个指令当中至少有一条指令为操作;其三是其中一个指令必然先于另外一条指令发生,而为了达到程序运行的效果,应该保证在第二条指令发生前,第一条指令就已经完全完成。确定性重现技术当中对于依赖数量的确定主要取决该程序所选择的粒度,例如在某一个确定性技术依据真实的地址对数据进行定位的依赖,那么该依赖则不被记录,虽然在记录依赖的过程中粒度并不会对重现技术的策略造成较大的影响,但是当粒度过小或过大情况下还是会导致程序运行性能的大幅度下降。
3 符号执行对Java程序漏洞检测和诊断
在对现代软件进行漏洞检测和诊断过程中,利用符号化执行技术的搜索优势能够有效提升工作效率。目前这一技术主要应用在软件测试用例生成过程、模糊测试过程、安全漏洞检测过程等各个方面,已知的符号化检测技术能够对跨站的脚本攻击、数值溢出、参数值窜改等进行检测。
3.1 符号化执行技术
符号化执行技术最早是在20 世纪70 年代所提出的,其主要是被应用在程序检测过程中,目前所应用的符号化执行技术本身主要是对不确定输入数据所引发的各种可能程序路径进行分析,这样能够有效缩小测试的搜索范围。符号化技术具体的操作方法就是将(Symbolic Input Value)输入到程序当中对具体的问题程序进行代替,同时将与输入有关的程序段表示为一个依赖符号输入的线性函数,这样就可以在各个程序运行遇到分支时产生相应的制约条件,对这些制约条件的运行途径进行搜索,就能够满足对程序状态的整体搜索和检测。
3.2 导向性符号化执行技术
为了有效解决现代安卓程序运行过程中存在的各种问题,应该将导向性符号化的执行利用静态研究方法进行提取,并将其应用在符号化执行的导向信息当中,而这类信息就能够对符号化执行技术起到指导作用,完成问题程序段的搜索工作。这一技术有效地将符号化的执行范围缩小,从而使漏洞检测和诊断的搜索时间大幅度缩减,还不会降低代码的覆盖率。在实际操作的过程中,导向性的符号化执行技术主要是依据于上下文的信息序列作为导向信息,从而指导符号化转型技术对输入的各数据进行搜索,其是利用大范围搜索函数调用图获得能够运行目标程序的必要触发事件,在这一步骤操作时一般所获得的触发事件仅为名称,但如果实际触发事件本身为图形界面属性,则不能单一由名称来进行指定,此时还应该在此基础上对相应的视图信息进行确定。需要注意的是,导向性符号执行技术当中所需要的时间序列本身必须满足Java程序的生命周期,但是利用函数调用图所获得的事件信息以离散型为主,无法确定其一定能够满足生命周期,因此可以对这一事件进行映射处理,尽量缩小符号化技术执行的搜索范围。另外还应该将相同的事件数据进行有效合并,避免在检测和诊断过程中重复触发同样的事件。
4 导向符号化执行信息泄露的检测和诊断
4.1 静态信息泄露的检测
信息泄露指的就是用户的个人私隐数据被发送到陌生用户端口,一般情况下该陌生用户端口均为系统不守信的接受者,并且具有信息截获和发送的操作过程。典型的信息泄露过程为:首先,程序从系统当中读取了用户的个人地理数据,并将该列表数据存储在内存当中。其次,内存中的地理数据信息借助Send To Network函数经由互联网发送到接受者用户端。总结起来就是先获取用户的个人信息,然后将信息在用户端内存当中进行传播,最终将信息送出。
因此,在对静态信息泄露问题进行检测时也可以分为三类,其中对于信息源和信息发送位置的检测可以利用标注系统的调用来进行确定,而对于信息传播路径的检测则应该从应用程序的逻辑性入手,检查在信息源和发送位置之间各种可能的发送途径,其主要利用的是程序依赖性的分析方法,即调查一个指令的发出是否依赖于其它指令的执行情况。
4.2 Leak Miner泄露检测技术
Leak Miner泄露检测技术主要是应用在移动终端(安卓系统)下的程序漏洞检测和诊断工作中,其能够检测所有可能的信息泄露途径。在函数调用图的基础上,该技术还可以采用程序切片模式对敏感信息在程序内的传播进行有效的跟踪,这种检测模式主要是为了提高敏感信息传播的分辨率,引入额外的伪传播源进行检测,这样能够保证整体敏感信息的切片在一个迭代当中完成。
结语
Java语言是现代软件程序编程过程中最常用的语言类型,使用该编程语言的编程人员数量已经超越了C语言使用者,但是该语言编程后具有的漏洞也是客观存在的,必须不断加强程序漏洞的检测和诊断技术,分别从确定性重建技术、符号执行、导向性符号化执行信息泄露的角度进行深入研究,保障用户的个人数据安全。
参考文献
[1]杨克峤.java程序优化与数据竞争检测的研究[D].复旦大学,2010.
[2]叶楚天.基于正则表达式的java Web程序漏洞检测技术研究[D].华中科技大学,2013.
【JAVA程序语言教学】推荐阅读:
Java程序设计语言08-31
中职程序设计语言教学09-21
C语言程序设计教学11-27
语言程序大作业课程教学大纲08-24
《C语言程序设计》课程教学大纲12-15
C语言程序设计2教学大纲10-16
c语言程序设计课程教学大纲20107-26
《C语言程序设计》双语教学的实践与思考06-15
程序语言09-02
语言程序07-25