Java是当前最流行的编程语言之一, 几乎所有的计算机专业学生都要学。通常, 学生先接触的编程语言是C语言, 而Java在语法上又与C语言非常类似, 因此, 教学的重点应放在面向对象编程的概念和技术上, 然而, 在刚接触面向对象编程时, 学生一般都很难理解OOP的概念。原因是教师过分强调Java语言规范, 却没有告诉学生OOP编程的理念和原则。这极大地挫伤了学生学习的兴趣, 更谈不上对能力的培养。因此, 笔者认为教学重点应放在介绍面向对象编程的基本思想以及Java语言与此相关的特征上。
1 Java编程基础
(1) 简单的Java应用程序;课程开始时, 教师应演示简单示例让学生了解Java程序。由于学生熟悉C语言, 示例应与其类似, 使学生快速地了解Java编程。将“Hello World”程序作为第一个示例使用, 学生就很容易了解Java程序和C程序之间的异同点。
(2) 简单的数据类型和数组;Java的语法类似于C语言, 这对于熟悉C的学生有利有弊。学生要区分C和Java语法和句法上的差异, 教师也必须提醒学生两者只是类似, 如两者的布尔类型和数组类型就很容易混淆。
(1) 布尔类型:C语言中, 经常会使用1和0来表示真假, 而Java使用布尔变量来表示。因此, while (1) 在C语言中是合法的, 在Java里就不是了, 这是Java初学者常见的一种错误。
(2) 数组类型:数组在Java中被视为对象。教师可以将数组作为第一个例子来演示如何使用Java对象, 但需要强调数组对象必须先声明后使用, 而C语言数组是可以先使用后声明的。
(3) 使用预定义的Java类。
教学目标:
*让学生学会使用Java类库中强大的预定义类;
*引入Java中一些重要的概念和技术, 如构造函数、对象、方法重载等。
讲解中, 笔者选择了两种典型的类: (1) String类:String类或类型几乎在任何编程语言中都会用到。Java也提供了该类, 教师可通过例子来演示调用构造函数创建String对象, 调用实例方法, 访问成员变量等等。 (2) Math类:学生经常会用到C语言的数学函数, 在Java中, 他们同样也要用到这些功能。为此, Java提供了Math类。由于Math类所有的成员都是静态的, 教师可以通过例子来说明静态方法的调用, 类静态成员的访问, 方法重载等等。
2 定义类
(1) 从C结构到Java类;带有实例变量的Java类和C语言的结构类型非常类似, 但是, 两者虽然在形式上类似, 性质却完全不同。例1中, 变量id是创建Rectangle对象的序号, 静态成员变量next Id用于跟踪创建的对象, 即每创建一个对象, next Id值将加1。
例1.class Rectangle{
double length, width;
int id;
如果消除静态变量, Rectangle类就非常类似于C结构。不过, 两者的区别也显而易见。首先, 类通过调用构造函数创建新对象, 而C结构没有构造函数。其次, 类的静态成员变量在对象创建之前就初始化, 由该类的所有对象所共享, 而C结构没有此功能。在这, 需要通过例子向学生说明实例变量和类变量之间的区别, 以及它们的使用。
(2) 定义构造函数。
构造函数的作用是创建对象并初始化。不过, 学生可能认为没有必要为类提供构造函数, 他们可以用例2来创建新对象:
在此, 教师可展开写构造函数的原因:如果没有自定义的构造函数, 那么创建一个新对象必须要写五条语句。比如, 用户要创建1000个对象, 就不得不写5000条语句。而如果提供了构造函数, 就只需1000条调用构造函数的语句。这是简化代码的一种方法, 同时也反映了简单实用的编程理念。在此可提醒学生在平时注意消除重复代码, 它的好处是: (1) 避免多次调试同样的代码; (2) 简化程序, 使程序清楚且便于阅读。
(3) 定义方法。
Java中有两种成员方法:类方法和实例方法。它们的区别:类方法可由类中的任何成员方法调用, 但是类方法不能直接调用任何实例方法。笔者教学发现, 不少学生不愿意使用成员方法, 教师就必须点出编写成员方法的理由: (1) 消除重复代码, (2) 隐藏程序执行细节, 使程序更安全。
(4) 访问控制符与封装。
Java对方法有public、private、protected、private protected四个访问控制符, 教师可分别用例子来说明这四个访问级别的区别。另外, 教师还必须向学生充分解释控制访问的理由。例如, 如果Rectangle类的长度和宽度都是public访问级别, 变量值可以自由修改。因此, 输入的值就有负值的危险。如果其访问级别是private, 别的类就看不到两个变量, 它们只能由同一类的成员来进行修改。另外, 还要编写方法来核实数据合法性后再将其赋给成员变量, 以保护成员变量, 避免非法操作。只有让学生了解了控制访问的原因, 他们才能更积极主动地来学习有关访问控制的内容。
3 结语
回顾以上讨论的教学思路。开始, 我们让学生写一个类似C程序的Java程序。这个阶段的重点是使学生熟悉Java语言的一些重要概念。接着, 讨论了如何定义类, 在这一阶段, 我们强调了构造函数的优势, 类方法和控制访问的原因, 并将面对对象编程的思想贯穿始末。
根据这条思路, 逐步讲授面向对象编程的概念和原则。我们不止要告诉学生怎么做, 更要告诉他们为什么这样做。只有这样, 学生才会更积极地学习Java以及潜在的面向对象编程思想, 并逐渐突破从面向过程编程到面向对象编程的障碍。
摘要:本文总结了职业院校Java课程要求以及教学过程中碰到的问题, 探讨了一种Java面向对象编程的教学方法。在教学过程中, 既注意学生对Java编程规范的掌握, 又注意培养学生面向对象编程的思考方式, 帮助他们逐渐突破面向过程编程和面向对象编程之间的障碍。
关键词:Java,面向对象编程,教学方法
参考文献
[1] B.Joshua, Effective Java[J].Addison-Wesley, 2001.
[2] Bruce Eckel[著], 陈昊鹏[译], Java编程思想[M].机械工业出版社, 2007.
[3] 林信良.Java学习笔记[M].清华大学出版社, 2007.
[4] 李钟尉, 马文强, 陈丹丹, 等.Java从入门到精通[M].2008.