如何两周达到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 ...
随机推荐
- Vim练级笔记(持续更新)
漫漫练级路...作为一个VS重度依赖患者,又加上visual assist X 这种懒人必备的神级插件,转投vim门下,真是各种疼... vim用着用着就有拿鼠标去点的冲动,有木有啊! 不过经过一段时 ...
- PHP基础入门(五)---PHP面向对象
前言: 今天来和大家介绍一下PHP的面向对象.说到面向对象,我不得不提一下面向过程,因为本人在初学时,常常分不清楚. 那么面向对象和面向过程有什么区别呢?下面给大家简单介绍一下: 面向对象专注于由哪个 ...
- H5仿微信界面教程(一)
前言 先来张图,仿微信界面,界面如下,并不完全一模一样,只能说有些类似,希望大家见谅. 1 用到的知识点 jQuery WeUI 是WeUI的一个jQuery实现版本,除了实现了官方插件之外,它还提供 ...
- MySQL--当mysqldump --single-transaction遇到alter table(2)
在上篇<MySQL--当mysqldump --single-transaction遇到alter table>中测试发现,在MySQL 5.6版本中,如果在mysqldump期间修改表, ...
- 游戏UI框架设计(7): 资源国际化技术
游戏UI框架设计(7) --资源国际化技术 说起"资源国际化"技术,个人认为可以追述到微软Window2000 PC操作系统的发布,在这之前windows98操作系统的开发都是先由 ...
- XManager与SecureCRT
使用Xmanager前,服务器必须已经安装好X11所需的各种运行包.运行下列命名检查安装情况,没有的话请自行补上. rpm -qa|grep x11 1.DISPLAY环境变量 export DISP ...
- 通过ALM OTA API获取test case的信息,并上传测试结果到test set中
ALM提供了OTA接口,可以用来获取和上传测试数据到ALM.比如获取Test case的step信息.上传测试结果到test instance. 在ALM的Help中可以下载相关文档,这里以ALM11 ...
- 深入理解 JavaScript(一)
编写高质量 JavaScript 代码的基本要点 转载:http://wiki.jikexueyuan.com/project/javascript-depth-understanding/start ...
- ASP.NET Core MVC 过滤器介绍
过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...
- 7个原因告诉你为什么要选择一个“多模型”的数据库?-ArangoDB
ArangoDB 是一个开源的分布式原生多模型数据库 (Apache 2 license). 其理念是:利用一个引擎,一个 query 语法,一项数据库技术,以及多个数据模型,来最大力度满足项目的灵活 ...