导航菜单

引入JDK源码学习的Java程序设计实践教学

唐大仕

(北京大学 信息科学技术学院,北京100871)

摘要:提出在课程中引入JDK源码的学习,阐述通过阅读、分析、重写及应用JDK源码,学习JDK源码中的语法、基本库、数据结构、设计模式等内容,能提高源代码的阅读能力、编写规范代码的能力,并为应用设计模式、架构复杂项目打下良好的基础。

教育期刊网 http://www.jyqkw.com
关键词 :Java程序设计;JDK;源码;实践教学;编程能力;设计模式

作者简介:唐大仕,男,讲师,研究方向为计算机应用,tds@pku.edu.cn。

0 引言

Java语言是当前最流行的面向对象编程语言之一,具有平台无关性、多线程、分布式及安全性等特点。作为计算机专业及相关专业的一门重要课程,Java语言也不只讲语言语法,而更加注意其实践应用,所以加强其编程实践和应用是该课程的重要目标。特别是当前用人单位对大学生的综合素质提出了新的要求,这就迫切需要对现有的教学模式进行改革,才能适应计算机教学的需要。根据实践,我们提出在课程中引入JDK源码的教学方法。

JDK(Java Development Kit)是Java语言的软件开发工具包,包括JavaSE、JavaEE、JavaME等多个版本[1],其中最基础的是JavaSE。在JDK中,有一系列的开发工具、运行环境,还有最重要的JDK文档及JDK源码。JDK源码用于程序设计的实践教学中,能有效提高学生的程序设计能力,切实提高教学效果,是教学改革的一条途径。笔者将JDK源码给学生进行阅读、分析、改造、应用,使其掌握编程思想、编码方式、采用的技术、应用过程等相关知识。

1 学习内容

JDK源码的量很大,要学习的内容也涉及多个方面。

1.1 语法方面的学习

Java程序设计课程首先要让学生学会Java语法,Java语言的语法不仅枯燥,而且不容易掌握。在JDK源码中有大量语法的体现,从变量、常量到运算符、语句、类的定义等方面都有很好的体现,所以精简一部分包及类来进行学习,体现其语法的使用,而且体现面向对象的封装、继承、多态,特别是继承关系的分析,以让学生更具体地体会面向对象的思想与方法。

1.2 基本类库的学习

Java语法的学习不能只停留在语法层面,而是要培养实践应用的能力,这就需要掌握大量的API类库。由于Java类库中的类很多,每一个类中的方法也很多,所以我们选择重要的类库源码来学习,主要包括Java的基本类库、输入输出(Java IO)、文本信息的处理、XML信息的处理、图形与图像、图形用户界面、网络、数据库等。

1.3 数据结构的学习

Java语言中,各类编程都要用到数据结构。虽然有的学生学过数据结构,包括线性表、栈、队列、串、树、查找、排序等,但是JDK中,这些数据结构是如何实现的,它们都有哪些相关的类,分别使用的是顺序存储、链式存储还是哈希存储,学习这些不仅有利于复习巩固数据结构知识,更重要的是可以学到更多的实现方法,而且在应用这些结构时会正确选用合适的类。

1.4 设计模式的学习

设计模式(design pattern)是一套被反复使用、多数人知晓、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性[2]。在实现的软件开发实践中,设计模式是相当重要的,在JDK中,使用了大量的设计模式,如抽象工厂、单态、适配器、责任链、代理、观察者等,通过源代码来学习设计模式,可以让学生更具体地体会到设计模式的应用,从而能让学生更好地打下应用设计模式基础。

2 学习方法

JDK源码的学习方法主要是阅读、分析以及修改、应用等,在这个过程中教师要通过演示、引导、作业等手段来促进学生对JDK源码的学习。

2.1 有选择性地阅读源代码,撰写读书笔记

由于源代码的量很大,没有必要将所有JDK的源码都读取一遍,所以针对前面提到的每一方面的学习内容,教师会指定阅读相关的包和类的源代码。例如,在前半学期中要求阅读的类包括Object,Class,String,StringBuilder 及 AbstractStringBuilder,Integer,Math,Random,BigInteger等;后半学期则要求阅读Arrays,ArrayList,Vector,Stack,Hashtable,TreeMap,TreeSet类等。教师还指定一些扩展的包和类,供能力较强的学生进行阅读。学生阅读后要撰写读书笔记,对典型的读书笔记进行演示汇报,这样的汇报可以在小组内或者全班进行,以促进理解和交流。

2.2 教师布置读前的问题及读后作业,促进阅读质量提高

阅读前,教师有针对性地提出一些问题,这样可以让学生知道阅读的重点和思考的问题,读后作业则检查学生学习的效果。布置的作业中包括这样的问题:String类为什么声明为final的?Random类引用了什么内部类或辅助类?Stack类中的变量的初始值为什么这样设置?其ArrayList类动态分配空间的增长因子是多少?TreeMap类与另一个相关的TreeSet类的区别是什么?

2.3 与JDK文档对照学习

JDK源码与JDK文档进行对照学习。考虑到部分学生的英文实际水平,我们选用中文版的JDK文档,而英文水平较好的则可以使用英文版的JDK。例如,在String文档中提到immutable,在源程序中是如何体现的?在Byte中提到的缓存,在源程序是如何实现的?Random类提到的伪随机数是如何实现的?TreeMap中找到同一对象的要求是如何实现的?等,这些问题涉及语法、算法、效率等多方面的问题。另外,对有余力的学生,还让他们读不同版本的JDK的源码,体会其中源代码的演变,分析其改进之处。

2.4 学生写出分析报告,并进行展示与交流

针对阅读的内容,我们要求学生写出分析报告。报告要求写出主要的类、主要的方法;类与类之间的关系(画出类关系图、UML图);主要函数的算法是怎样的(画出流程图、事件序列图、状态图等);算法的时间复杂度与空间复杂度如何;用到了哪种设计模式等。另外,要求写出学到的关于语法、算法、编程技巧方法的收获。这些报告要形成文档、展示的PPT、Prezi等,在班上进行交流展示,还让学生进行评选投票。

2.5 进行代码的重写、改进与应用

在阅读的基础上,我们要求学生进一步进行代码的重写、改进与应用。代码的重写是指针对其中部分代码自己重写一遍,这样能训练编写代码的能力。在这个过程中,学生还可以有针对性地进行代码的改进。另外,在实际的项目中,应用相关的包和类,这样易于进一步巩固所学的知识。

3 学习JDK源码对学生编程能力的提高

JDK源码的学习过程,提高了学生以下几个方面的能力。

3.1 阅读代码的能力

阅读代码的能力训练是编程能力中一个重要的方面。事实上,软件的编写与维护通常是一个长期的过程,阅读别人写的代码是很常见的任务,但有时也要阅读自己写的代码。阅读JDK源码可以大大提高阅读代码的能力。

3.2 编写规范代码的能力

JDK源码书写规范,其中能学到规范代码的编写方法,有利于养成良好的编程习惯。这包括注释的使用、空行的使用、变量命名、函数的命名惯例等。

3.3 使用设计模式的能力

JDK源码中有大量设计模式的应用,通过对这些设计模式的学习,能很好地体会各种设计模式的含义、基本组成要素、种要素之间的关系、设计模式的应用场景,这些都为以后在具体项目中使用设计模式打下良好的基础。

3.4 项目架构的能力

JDK源码是一系列的包与类组成的一个大的系统,而类与类之间的关系有各种形式,通过对它们的学习,能帮助学生提高设计复杂程序的能力,为以后进行项目架构的工作打下良好的基础。

4 结语

在Java程序设计课程中引入JDK源码的学习,通过在语法、基本库、数据结构、设计模式等多方面的学习, 有效地提高了学生源代码的阅读能力、编写规范代码的能力,并为应用设计模式、架构复杂项目打下良好的基础。在北京大学的Java程序设计课程中使用JDK源码进行教学,起到了较好的教学效果。

教育期刊网 http://www.jyqkw.com
参考文献:

[1] Oracle Corp. Java Development Kit.[EB/OL].[2014-12-22]. http: ∥www.oracke.com/java.

[2] Erich G, Richard H, Ralph J. 设计模式[M]. 北京: 机械工业出版社, 2009.

(编辑:郭田珍)

下载文本