面向对象程序先导课是体系化面向对象课程的重要组成部分,其目标是帮助那些有一定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的更多相关文章

  1. 如何两周达到150行Java程序的能力--part 2

    第一次课训练营课程打通了有C语言编程通往面向对象编程的道路,然而道路依然会曲折.下图是第二次训练营课程的训练大纲,从第二次开始,每次课首先进行测试. 针对作业1的训练要求,明确定义了13个具体的测试点 ...

  2. 1903021116—吉琛—Java第三周作业—eclipse创建Java程序

    项目 内容 课程班级博客链接 19级信计班 这个作业要求链接 eclipse如何创建java程序 java语言基础(上) 我的课程学习目标 1. 学习博客园更多使用技巧 2. 通过作业实践熟练与熟悉掌 ...

  3. java开发区块链只需150行代码

    本文目的是通过java实战开发教程理解区块链是什么.将通过实战入门学习,用Java自学开发一个很基本的区块链,并在此基础上能扩展如web框架应用等.这个基本的java区块链也实现简单的工作量证明系统. ...

  4. Java程序员面试题集(86-115)

    摘 要:下面的内容包括Struts 2和Hibernate的常见面试题,虽然Struts 2在2013年6月曝出高危漏洞后已经显得江河日下,而Spring MVC的异军突起更加加速了Struts 2的 ...

  5. 浅析java程序的执行过程

    在研究任何一门语言时,无论是面向过程的c,c++(面向过程和面向对象),还是面向对象的.net,java等,弄清语言执行过程至关重要.  何为语言执行过程? 所谓语言执行过程,指对于任何一门语言,如j ...

  6. [转帖]浅析java程序的执行过程

    浅析java程序的执行过程 转帖来源: https://www.cnblogs.com/wangjiming/p/10315983.html 之前学习过 这一块东西 但是感觉理解的不深刻. copy一 ...

  7. 20145223《Java程序程序设计》第3周学习总结

    20145223 <Java程序设计>第3周学习总结 教材学习内容总结 第四章内容 1.类与对象 如何定义一个包含有几个值域(Field成员)就是需要我们定义一个类(Class),书上给的 ...

  8. 20145223《Java程序程序设计》第2周学习总结

    20145223 <Java程序设计>第2周学习总结 教材学习内容总结 一: 1.基本的类型: (1)整数:short(2字节).int(4字节).long(8字节) (2)字节 byte ...

  9. 20145223《Java程序程序设计》第9周学习总结

    20145223<Java程序设计>第9周学习总结 教材学习内容总结 第十六章:整合数据库 JDBC入门 1.JDBC简介: 2.JDBC主要分成两个部分,JDBC应用程序开发者接口和JD ...

随机推荐

  1. CSS学习笔记10 相对定位,绝对定位与固定定位

    文档流中的元素的位置由元素在 (X)HTML 中的位置决定,这就是最原始的普通流,前面讲到的浮动CSS学习笔记08 浮动可以改变元素在文档流中的位置,除了这个我们还可以通过使用CSS的position ...

  2. seajs源码阅读

    乘着周日有点时间,阅读一下玉伯大神的源码. seajs的源码写得真的很好,很是佩服,工整美观不愧是大神,造福百姓. 说起seajs不得不说,AMD和CMD的区别.  CMD 推崇依赖就近,AMD 推崇 ...

  3. 为实体类增加toJSON方法

    后期子类继承该基础类即可. package com.lichmama.test; import java.io.Serializable; import java.lang.reflect.Field ...

  4. Centos7yum安装Redis详细教程

    原本是在自己的mac上安装redis的,通过brew去安装的redis觉得很简单,实际macos系统与centos系统还是有一些区别的. 1.yum安装redis服务 sudo yum install ...

  5. 百度云bcc建站

    一.购买百度云服务 1.百度云bcc购买网页http://bce.baidu.com/product/bcc.html 2.买完后管理:http://console.bce.baidu.com/bcc ...

  6. Java基础语法<七> 对象与类

    笔记整理 来源于<Java核心技术卷 I > <Java编程思想> 1. 类之间的关系 依赖 users– a 是一种最明显的.最常见的关系.如果一个类的方法操作另一个类的对象 ...

  7. JavaScript跨域请求和jsonp请求实例

    <script type="text/javascript" src="./whenReady.js"></script> <sc ...

  8. js里面的垃圾回收

    在公司经常会听到大牛们讨论时说道内存泄露神马的,每每都惊羡不已,最近精力主要用在了Web 开发上,读了一下<JavaScript高级程序设计>(书名很唬人,实际作者写的特别好,由浅入深)了 ...

  9. 使用WordPress快速建站

    安装前的准备1.下载最新版的 WordPress (这里演示为WordPress 3.5 官方中文版),解压后,将WordPress文件夹里面的所有文件,上传到你的主机空间域名所绑定的根目录.2.新建 ...

  10. 利用Fiddler修改请求信息通过Web API执行操作(Action)实例

    本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复261或者20170724可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...