APP下载

基于经典案例的Java程序设计课程教学探讨

2021-05-29陈安农丽娟

科教导刊 2021年9期
关键词:Java程序设计课程教学

陈安 农丽娟

摘 要 Java程序设计本质上属于面向对象语言的教学,是信息与计算科学专业的专业核心课程。不同于信科专业的其他数学类课程,Java程序设计本身具有很强的实践,同时具有理论概念多、各种类名繁杂等特点。本文针对信科专业的Java程序设计课程教学进行分析,总结了教学过程中当前存在的问题,并通过Java程序设计中的经典案例,探讨其在教学中的作用,为课程的教学改革提供参考。

关键词 经典案例 Java程序设计 课程教学 信息与计算科学专业

中图分类号:G424                                  文献标识码:A    DOI:10.16400/j.cnki.kjdkx.2021.03.056

Discussion on the Teaching of Java Programming Based on Classic Cases

——Take Information and Computing Science as an example

CHEN An, NONG Lijuan

(College of Science, Guilin University of Technology, Guilin, Guangxi 541006)

Abstract Java programming essentially belongs to the teaching of object-oriented languages, and is a specialized core course for information and computing science. Different from other mathematics courses for Information and computing science, Java programming itself has strong practice, and at the same time has the characteristics of many theoretical concepts and various types of complex class names. This article analyzes the teaching of Java programming for information and computing science, summarizes the current problems in the teaching process, and discusses its role in teaching through classic cases in Java programming, so as to provide references for the teaching reform of this course.

Keywords classic case; Java programming; course teaching; information and computing science

0引言

面向对象程序设计是信息与计算科学专業培养方案中的一门专业核心课程,主要目标是提升学生在软件开发领域的计算机使用能力,包括信息处理和软件应用,使之毕业后能够在信息产业、科技创新等领域从事应用开发工作。本文以Java程序设计为例,探讨如何通过具体的案例强化学生的概念理解能力以及编程能力。

随着5G时代的到来,社会对Java开发工程师的需求量越来越大。从企业招聘对职位的要求上看,众多企业都需要毕业生熟悉软件工程中一些基本的流程,并具有扎实的编程基础。因此如何在课堂上有效地激发学生学习的兴趣,提高学生对Java程序设计的学习能力,值得我们深入地探讨。目前已有一些相关的教学研究,比如在文献 [1] 中,作者结合课程的授课经验,设计了Java程序设计的教学内容,并对实践教学方法进行了探讨。此外,文献 [2] 以面向能力培养为目标,分析了如何利用在线开放课程平台提高学生的实际编程能力。但是现有的教学研究并没有说明如何解决Java程序设计课程中理论概念多的问题。

本文首先分析信息与计算科学专业在Java程序设计教学中当前存在的问题,然后尝试通过一个原型案例,结合课程教学进度,逐渐将原型案例的代码扩展,使之能够形成代码学习的连贯性,这样有助于将繁杂的概念化简,减轻学生学习的负担,进而提高学生学习的兴趣。

1Java程序设计教学存在的问题

结合这几年Java程序设计课程教学经验,对存在的问题进行总结,主要体现在下面两方面。

1.1偏重于概念理论的讲解

Java 程序设计是一门集技术性、理论性和实践性于一体的课程,主要介绍Java语言的运行环境、Java基本语法和语句、面向对象程序设计、异常处理机制、集合和工具类、文件和流、多线程技术、Java网络编程、使用JDBC连接数据库。而其中的面向对象程序设计是课程教学的重中之重。这部分的内容涉及基本的类定义、信息封装、类的继承、接口的实现以及多态等重要概念,这将对后续的类库学习是至关重要的。但是一般而言,在这部分内容的教学中,教师更多偏重概念性地讲解,结合的代码学习也没有一致性,这往往使得编程水平差的学生一头雾水,不知所踪。

1.2教材的代码过于复杂

在使用的Java教程都会提供代码进行学习,如《Java程序设计及应用开发》一书中从面向对象分析出发,结合UML类图描述类结构以及类之间的关系,并且提供了丰富的代码。[3]但是有时候对于刚入门的学生,繁杂多样的代码使得学生更容易迷失。他们常常将课本的例子在计算机上抄一遍。如果代码过于冗长,那么录入代码就占据上机课的大部分时间,并且他们从中也容易形成挫败感。因此有必要精简代码,但简化后的代码又能表达出核心思想。

2 Java程序设计中经典案例教学探讨

如何解决解决Java程序设计课程中理论概念多,案例不连贯的问题呢?下面我们尝试从一个原型出发,结合教学进度,逐渐丰富这个简单原型,从而“一以贯之”,将各个知识点贯穿起来,提高学生学习的信心。为介绍方便,我们这里仅以字节码文件以及面向对象语言的三大特性为例,其他内容可类似得到。

2.1 字节码文件

一般来说,学习一门基本的程序设计语言都是从“hello world”开始。为体现整个教学案例的连贯性,我们以下面的圆类(Circle)开始:

public class Circle {

public static void main(String[] args) {

System.out.println("Hello, Circle!");//输出字符串

}

}

首先通过记事本将上面的代码敲下来,然后利用已经配置好的运行环境编译运行。在讲解的过程中我们先通过演示结果,然后再引入Java的类概念,以及Java的运行过程。比如,这个Circle类只包含一个主方法,这个主方法的方法体调用系统的输出方法,将字符串“Hello, Circle!”输出到显示器的屏幕。而Circle类的定义是具有一定的格式要求,我们需要用关键字“class”对类名Circle进行修饰。在关键字“class”前面的修饰符为权限访问控制修饰符“public”。这样就可以让学生对Java代码有一个基本的整体认识。

介绍完Java代码的结构后,进一步地,向学生提问:从源代码到屏幕字符串地显示经过了哪些阶段呢?从而自然地引入了字节码文件的概念,以及相关的命令:编译命令“javac”和执行命令“java”。

2.2 封装

封装是面向对象语言的三大特性之一(其他两个是继承和多态)。因此“封装”概念的重要性是不言而喻的。为此,我们接着上面的Circle类进行案例设计。首先启发学生:如果要计算一个给定半径的圆的面积,我们如何通过Java语言去实现呢?从所表述的要求,我们知道,类中应该包含着圆的半径(属性),圆的面积计算(服务)。从这里也可以插个题外话,引导学生认识到,软件的实现是根据客户或用户的需求而设计的,使学生对软件工程有一个基本的认识。紧接着,强调封装即是将属性和服务结合在一起,形成一个不可分割的单位,从而自然地得到类定义中封装的概念。封装案例中的Java代码如下:

public class Circle {

public double radius;

public Circle(double radius){

this.radius = radius;

}

Public double getArea(){ //计算圆面积

double dArea = PI*radius*radius;

return dArea;

}

}

为提高代码的可重用性和可维护性,建议学生另外定义一个测试类,专门用于测试验证所有新定义的类。这时可以向学生介绍:原代码中的Circle类的主方法换成一个一般的成员方法,除此之外还拥有一个数据成员radius和构造方法。由此进一步展开相关概念的介绍,比如:局部数据成员,类成员等。

2.3  继承

在介绍继承概念的时候,我们基于封装的典型案例进行扩展,得到的代码如下:

public abstract class Shape {

abstract public double getArea();

}

public class Circle extends Shape{}

public class Rectangle extends Shape{}

在介绍这个案例之前,我们可以采用启发式教学。例如,如果还要计算其他图形,比如矩形的面积呢?我们能否基于原有的类,复用这个类的成员,然后再添加新的成员以满足新的要求呢?这就涉及代码的可扩展性和可重用性。由此,自然地引入繼承的概念。继承体现类之间的”is a”的关系,将公共属性放在一个类中,其他类可以使用继承的方式重用创建的新类,并各自增加新的成员满足不同的特定的需求。基于此,可以看到,圆类和矩形类都有一个公共的服务,即是计算面积,这样便可以将这一服务封装在图形(Shape)类中,然后根据不同的形状特点增加新的成员或方法。因此当还需计算矩形面积的时候,可以对上一个案例,即圆类的定义进行修改。这样我们就得到了两个由Shape类派生而来的子类:圆类和矩形类。由于只有针对特殊形状的图形,其面积的计算才有意义,因此可将Shape类的计算面积的方法设计为抽象方法,从而得到的Shape类为抽象类。同时,为结合实际中的软件开发,我们引入统一建模语言(UML)中的类图刻画类之间的关系。

由于Java程序语言中的类只支持单继承,因此在引入支持多继承的接口概念的时候,可将案例中的Java代码稍微修改下,即是修改成:

public interface Shape {

public double getArea();

}

public class Circle implements Shape{}

public class Rectangle implements Shape{}

此时,Circle类和Rectangle类成为接口Shape的实现类,从而自然地过渡到接口的定义与实现的学习。进一步地,通过抽象类与接口案例的代码比较,让学生深刻认识到两者的异同。

2.4 多态

对于多态,同样地,我们仍基于原有的Java代码进行扩展,构造相应的案例。首先提出问题:当需要同时计算多个圆和矩形的面积的时候,如何才能使得代码更易于扩展?前面所创建的类对象,都是由引用变量指向相同类型的类对象,那有没有可能指向该类的任何一个子类的对象呢?于是让学生带着问题,通过代码的运行以及演示,说明这是可以的,由此引入多态的概念。这里我们仅需在测试类的主方法中增加少量代码即可验证,代码如下所示:

Shape[] vec = {new Circle(2), new Retangle(1,2)};//创建类类型数组

for(Shape s:vec) {

System.out.println(s.getArea()); //将结果输出

}

获得正确的输出结果后,再进一步介绍代码的结构。由于我们已经实现了继承,并且通过子类对父类的计算面积方法进行了重写,因此在测试类中增加的父类引用指向子类所创建的对象,则可发生动态绑定,进而实现了多态。当然,我们仍可借助这个案例的代码,结合当前的知识点进行代码扩展。比如:

public abstract class Shape {

abstract public double getArea();

public void dispInfo(){ } //显示信息

}

public class Circle extends Shape{…}

public class Rectangle extends Shape{…}

上面的Java代码中,我们在抽象类Shape中增加了显示信息的方法dispInfo(),但是在两个子类中都没有进行重写,因此利用这个例子可说明,如果子类没有把父类的方法覆盖,当把子类对象赋给父类引用的时候,通过父类引用调用的方法仍是父类的方法。

3 总结

本文通过经典案例,尝试解决在Java程序设计教学中概念的烦冗复杂和传统教学中代码的零散问题。利用一个最初等的原型代码,结合教学的进度,逐渐将其丰富化,从而能够将面向对象分析中核心理论简化却又不失一般性,进而减轻学生的学习负担,提高学生的学習兴趣,同时有助于学生对所学知识的理解能力和动手实践能力。本文对字节码文件以及面向对象的三大特性进行案例的设计,对于Java程序设计教学中的其他内容可类似得到。

*通讯作者:农丽娟

基金项目:桂林理工大学科研启动基金资助项目“两类时间非局部方程的高精度算法研究”(编号:GLUTQD2016044)

参考文献

[1] 张琳,李朝辉,谭孟康.Java程序设计课程实践教学探讨[J].教育教学论坛,2020(27):214-215.

[2] 胡晓鹏.面向能力培养的“面向对象程序设计”课程教学改革[J].科技风,2020(35):62-63.

[3] 宋晏,杨国兴.Java程序设计及应用开发[M].北京:机械工业出版社,2019.

猜你喜欢

Java程序设计课程教学
“互联网+”背景下基于翻转课堂教学模式的程序设计课程改革
《Java程序设计》项目化教学改革与实践
《Java程序设计》课程网站的设计与实现
Java程序设计基础课实践教学中的分层教学模式研究
基于实训项目的Java程序设计实验教学模式改革与实践
基于工程思维的Java程序设计课程教学研究
小学数学教学应注重培养学生的应用意识
浅谈微课在PHOTOSHOP课程教学中的实践
会计专业课程教学国际化的探索性研究
高职物流专业“物流费用结算实务”课程开发研究