如何两周达到150行Java程序的能力--part 1
面向对象程序先导课是体系化面向对象课程的重要组成部分,其目标是帮助那些有一定C语言基础,但对面向对象概念陌生,基本没碰过Java编程的同学。该课程设计为暑期选修课,因为没有其他课程,我们设计为现场训练性质的训练营课程,即课堂上基本上不会通过ppt来讲授Java语言语法和面向对象知识点,而是围绕准备好的任务,课堂现场让大家进行程序联系,并结合所练习的程序现场讲解涉及到的Java语言和面向对象概念,这是一种面向问题和学生接受情况的教学模式。
整个课程包括四次,一次四个小时,分别安排在周二和周五。每次课程不以自然的45分钟为节点,而是按照训练任务为节点,效果非常好。看到的是同学们全情投入,偶尔有同学起身去趟厕所。
第一次课
目标:从C语言编程思维带入初步的面向对象编程思维。要点是认识面向对象程序的基础特征,以及它的妙处。
首先使用30分钟介绍课程目标以及概要性的Java语言介绍,即为什么会有这门课,以及通过两周训练达到150行有效Java程序的能力。我看到很多同学的眼睛里其实将信将疑。然后现场指导大家安装Java开发环境:JDK8 + Eclipse IDE。在安装之后,助教现场介绍IDE中的常用视图(Java Perspective, Debug Perspective)和操作,如新建项目,如何新建类,以及代码编写时的语法高亮和编译错误提示等。
亮点是下面这幅图:

要用差不多2个半小时来完成如图所示的6个任务。我们首先把样例代码发给同学们,然后一步步来完成任务1~任务6。初始程序具备完全的C风格,Box是个数据结构,main方法操作该数据结构,并进行volume计算。
任务1:为Box类添加volume方法计算容积。该任务向OO过度,让同学们了解到Java中的数据结构管理数据并提供数据计算方法。此外,通过该任务,同学们了解到如何编译和执行程序,特别是通过System提供的out来观察程序运行状况。
任务2:该任务训练通过方法返回值来达到不同类之间的“交互”目标。任务1的方法自成一体,完成计算和输出。任务2则不同,完成计算并返回计算结果,这体现出一定的职责划分,即Box类只负责计算自己的体积,如何与用户交互则是主类FirstJava的任务。
任务3:该任务帮助同学们进一步体验面向对象程序的不同,即可以有多个同名的方法(重载)。通过这种机制,一个类提供命名统一、功能相似但又有差异的方法。
任务4:未初始化数据是新手经常遇到的一个困难,导致程序运行中轻则出现错误,重则导致崩溃。面向对象程序提供了内在的初始化机制,即构造方法。该方法的特别之处在于与“数据结构”同名,这在C语言程序中也是做不到的事情。一旦添加了构造方法,同学们立刻注意到main方法中的new Box()语句报错,这是个好时机,来介绍Java默认的构造方法和显式定义构造方法的关系。
任务5:面向对象程序的一个重要机制是保护数据,这一点和C程序有本质区别。该任务介绍数据可见性概念,介绍三个重要关键词public, private和protected。一旦把Box的三个属性声明为private,立刻导致外面对这三个属性的访问出现语法错误,达到了数据保护的目标。至此,我们完成了一个内容完整的面向对象式Java程序,类之间有交互和职责划分,Box类隐藏自己的数据,并提供多种体积计算手段/服务。主类FirstJava创建和管理Box对象,并提供输出能力。
任务6:有了Box类的强大能力,我们提出希望在此基础上只做一点点工作就可以得到能力更强大的类ScaleBox,添加一个scale属性,表示Box类几何参数的尺度(即单位,如以厘米为单位,则米对应的scale为10,而毫米对应的尺度为0.1)。这种机制在C语言程序根本就不可能,这个任务介绍面向对象中的一个核心机制,继承的直观含义,如何通过该机制来得到ScaleBox。重点是要改写Box类的volume方法,即计算时纳入scale因素。至此,我们形成了三个类,其中Box和ScaleBox都和FirstJava类建立交互关系,而Box类和ScaleBox之间建立抽象层次关系。实际练习效果来看,同学们能够很好的理解并掌握任务1~任务5中强调的内容,任务6则有些懵懂。不过这也正常,事实上继承的语义还是比较复杂,训练营课程的目标不在于深入掌握,而是获得一种直观体验,特别是使用场景的体验。
通过这6个任务的完成,同学们的积极性被极大调动起来,体会到这门课授课方法的新颖性。特别突出的是,第一次课期间同学们一旦遇到语法错误问题,基本都是举手请求老师和助教协助。而从第二次课开始,这种现象基本就没了。我们在讨论过程中多次强调,如何阅读语法错误提示,以及如何自主上网找相关辅助信息。
在这6个任务铺垫下,我们最后流出半个小时来开始作业。首先给定一个完整的C语言程序,实现字符集合功能。在此基础上,提供一个框架性的Java代码,要求课堂实现相应的Java程序。这个任务基本没有太大难度,当然程序风格呈现出强烈的C特征。在此基础上,我们布置了作业的补充功能,即基于课堂所所完成的字符集合程序,使用继承手段,实现一个支持交集计算的字符集合,且能够记录集合提供服务的次数。
如何两周达到150行Java程序的能力--part 1的更多相关文章
- 如何两周达到150行Java程序的能力--part 2
第一次课训练营课程打通了有C语言编程通往面向对象编程的道路,然而道路依然会曲折.下图是第二次训练营课程的训练大纲,从第二次开始,每次课首先进行测试. 针对作业1的训练要求,明确定义了13个具体的测试点 ...
- 1903021116—吉琛—Java第三周作业—eclipse创建Java程序
项目 内容 课程班级博客链接 19级信计班 这个作业要求链接 eclipse如何创建java程序 java语言基础(上) 我的课程学习目标 1. 学习博客园更多使用技巧 2. 通过作业实践熟练与熟悉掌 ...
- java开发区块链只需150行代码
本文目的是通过java实战开发教程理解区块链是什么.将通过实战入门学习,用Java自学开发一个很基本的区块链,并在此基础上能扩展如web框架应用等.这个基本的java区块链也实现简单的工作量证明系统. ...
- Java程序员面试题集(86-115)
摘 要:下面的内容包括Struts 2和Hibernate的常见面试题,虽然Struts 2在2013年6月曝出高危漏洞后已经显得江河日下,而Spring MVC的异军突起更加加速了Struts 2的 ...
- 浅析java程序的执行过程
在研究任何一门语言时,无论是面向过程的c,c++(面向过程和面向对象),还是面向对象的.net,java等,弄清语言执行过程至关重要. 何为语言执行过程? 所谓语言执行过程,指对于任何一门语言,如j ...
- [转帖]浅析java程序的执行过程
浅析java程序的执行过程 转帖来源: https://www.cnblogs.com/wangjiming/p/10315983.html 之前学习过 这一块东西 但是感觉理解的不深刻. copy一 ...
- 20145223《Java程序程序设计》第3周学习总结
20145223 <Java程序设计>第3周学习总结 教材学习内容总结 第四章内容 1.类与对象 如何定义一个包含有几个值域(Field成员)就是需要我们定义一个类(Class),书上给的 ...
- 20145223《Java程序程序设计》第2周学习总结
20145223 <Java程序设计>第2周学习总结 教材学习内容总结 一: 1.基本的类型: (1)整数:short(2字节).int(4字节).long(8字节) (2)字节 byte ...
- 20145223《Java程序程序设计》第9周学习总结
20145223<Java程序设计>第9周学习总结 教材学习内容总结 第十六章:整合数据库 JDBC入门 1.JDBC简介: 2.JDBC主要分成两个部分,JDBC应用程序开发者接口和JD ...
随机推荐
- 【LeetCode】152. Maximum Product Subarray
题目: Find the contiguous subarray within an array (containing at least one number) which has the larg ...
- SAP PI入门
本教程的目的是让读者理解:SAP Process Intergration(以下简称SAP PI)是什么.我们不需要探究课题的本质,但是会讨论SAP PI的架构和不同特点.本文只会覆盖到PI的基本特点 ...
- 在MacOS中,Unity使用VSCode开发,4.7版本无法正常使用C#
我在MacOS中安装了两个版本的Unity,一个是4.7版本,一个是5.6版本,在5.6版本中使用VSCode打开项目时,可以正常代码提示和查看,但是打开4.7版本的项目时,无法正常提示和查看. 经过 ...
- asp.net mvc视图中使用entitySet类型数据时提示出错
asp.net mvc5视图中使用entitySet类型数据时提示以下错误 检查了一下引用,发现已经引用了System.Data.Linq了,可是还是一直提示出错, 后来发现还需要在Views文件夹下 ...
- 算法——蛮力法之选择排序和冒泡排序c++实现
这次实现的是蛮力法中的两个例子,选择排序法和冒泡排序法,使用的编译环境是vs2013,下面对这两个算法做一个简单介绍,然后是两个算法的c++实现代码. 选择排序法比较的范围是整个列表,每次扫描结束找出 ...
- vue2.0引入腾讯地图
百度很多东西,然后我没找到腾讯地图在VUE2.0里面的引用.于是根据找的其他地图引用资料进行尝试.步骤如下. 首先在src里面建立了TMap.js的文件,内容如下: export function T ...
- 关于Android log拿不到的情况
遇到很多开发者说crash了,log没有看到..出现类似情况的基本原因是因为现在的国产厂商如crash了会直接将进程杀掉,于是你的studio就看不到了,可以往下面几个方向去想办法找到crash的lo ...
- java环境配置,试用和基本数据结构
一.java环境配置 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:jdk文件所在的路经变量名:CLASS ...
- spring 框架的xml文件如何读取properties文件数据
spring 框架的xml文件如何读取properties文件数据 第一步:在spring配置文件中 注意:value可以多配置几个properties文件 <bean id="pro ...
- shiro整合oauth
一.基本思路脑图 二.客户端shiro配置 shiro配置文件 <?xml version="1.0" encoding="UTF-8"?> < ...