第一次课训练营课程打通了有C语言编程通往面向对象编程的道路,然而道路依然会曲折。下图是第二次训练营课程的训练大纲,从第二次开始,每次课首先进行测试。

针对作业1的训练要求,明确定义了13个具体的测试点和相应测试用例,由各位同学各自对自己的程序进行测试,填写测试报告,即测试点通过情况。13位同学(共17位同学选课,占比约76.5%)完成了第一次作业和相应的测试,统计情况如下:

整体来说,呈现出越往后的测试点通过人数越少的趋势。这在我们的预料之中,因为后面的测试点往往难度稍大。其中有6位同学完成的程序通过了全部13个测试点。可喜可贺。

测试点1:插入集合中不包含的字符,检查字符集合中是否包含了该字符。

测试点2:删除集合中不存在的字符,检查是否会报错,且集合内容保持不变。

测试点3:删除集合中存在的字符,检查集合中是否还包含相应的字符。

测试点4~5:替换集合中指定(位置)字符,检查集合类对边界的检查能力

测试点6~8:在指定位置插入字符,检查边界保护能力。

测试点9~10:字符搜索测试

测试点11:字符排序测试

测试点12:测试字符集合的服务计数能力

测试点13:交集测试。

统计显示,后面几个测试点的通过情况不乐观。反映的问题主要集中于对象属性的更改维护和基本的算法能力,也有Java语言不熟悉有关。

本次课程的核心内容是通过任务来介绍和掌握面向对象一个核心概念,接口。在Java语言中,接口是一种行为抽象机制,使用interface来专门进行定义,每个接口可以包括一系列操作。从设计角度来看,接口用来提取和抽象一组类的共性行为。接口和类之间具有实现关系(implements),一旦一个类实现了某个接口,则可以使用该接口(类型)来来引用相应类的对象,从而建立了仅从行为角度出发的抽象层次。举例如下:

假设有接口Movable,它抽象了若干移动操作,如forward(前进), backward(倒退), left(左转), right(右转)等。同时我们还有类Bicycle,Car,Dog,Cat。我们可以让这四个类都实现Movable接口,这样这四个类具有了共性行为,即都能够前进、倒退、左转、右转。

课堂中我们提前准备好了几个几何体类,通过任务1和任务2来介绍如何构造具体的几何体对象,并分别操纵这些对象来完成体积计算、求和、寻找最大体积和输出等功能。这些功能在算法上都很平凡,但是代码量可不小,而且随几何体对象个数呈线性倍数增长,有很多冗余的代码。这时我们提出的问题是,如何消除这些冗余代码,采用一种一致、简洁的方式来操纵所定义的数据对象。这里有两个关键要点需要分析和讨论:

(1)必须要对不同的几何体对象进行归纳和抽象。抽象是面向对象的一个核心机制,抽象形成层次,解除不必要的耦合。产生冗余代码的主要原因往往是未能进行抽象提取,之所以是冗余,说明有共性成分存在,但是又必须作用于具体不同的对象。从这个要点出发,我们确定要对若干个几何体对象进行抽象。涉及两个小的要点,必须使用一个通用的抽象对象来表示不同的具体几何体对象;必须对不同几何体对象进行抽象。

(2)不同的几何体对象有哪些共性特征可供抽象。这个问题是应用接口和继承机制的难点,抽象不当会导致程序难以理解,容易出错。一般而言,对类进行抽象就是两个维度,数据抽象和行为抽象。观察和分析几个几何体类的数据属性,可以发现共性成分很少,抽象带来的效益低;观察这几个类的行为则发现共性成分显著,比如都能够计算体积,都能查询体积。因此,我们确定了对行为进行抽象,而正是接口这种抽象机制的要义。它是一种脱离对象具体数据特征的行为抽象机制,关注不同对象的共性操作能力,可以很好的隐藏数据带来的差异化。

通过上述两个要点的分析和讨论,我们顺利引入Java的接口机制来改造相应的几何体类,从而能够在主类main方法中使用接口类来声明相应的抽象对象,从而使用统一的方式来访问和管理具体的几何体对象。顺利消除了冗余代码。至此,同学们很好的理解了接口机制的由来和所能解决的问题,以及解决问题时要关注的问题。

任务4相对独立,训练通过控制台的输入处理。意在为后面的正则表达式做铺垫。

如何两周达到150行Java程序的能力--part 2的更多相关文章

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

    面向对象程序先导课是体系化面向对象课程的重要组成部分,其目标是帮助那些有一定C语言基础,但对面向对象概念陌生,基本没碰过Java编程的同学.该课程设计为暑期选修课,因为没有其他课程,我们设计为现场训练 ...

  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. 【LeetCode】187. Repeated DNA Sequences

    题目: All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: " ...

  2. Bootstrap下拉菜单

    前面的话 网页交互的时候经常会需要上下文菜单或者隐藏/显示菜单项,Bootstrap默认提供了用于显示链接列表的可切换.有上下文的菜单.而且在各种交互状态下的菜单展示需要和javascript插件配合 ...

  3. KBEngine简单RPG-Demo源码解析(2)

    七:服务端资产库文件夹结构http://kbengine.org/cn/docs/concepts/directorys.html看assets, 注意:demo使用的不是默认的assets资产目录, ...

  4. Java学习笔记之集合

    集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...

  5. Mysql元数据分析

    Mysql元数据分析 @(基础技术) 一.information_schema库 information_schema库中的表,保存的是Mysql的元数据. 官网元数据表介绍 InnoDB相关的表介绍 ...

  6. 关于WIN7 内存占用很大的 问题svchost.exe

    svchost.exe 是用来启动系统服务的,所以某个 svchost.exe 占用内存过大,可能就是它启动的那个服务占用内存过大,所以只要停止并禁用那个服务就行了. 一般来说占用内存最大的服务是 S ...

  7. Java之初识

    今天开始学习Java 1.什么是Java? Java是1995年由sun公司推出的一门极富创造力的面向对象编程语言,是由Java之父詹姆斯格斯林博士设计的. Java名字的由来:据说,java刚刚设计 ...

  8. C语言学习随笔

    前段时间我们学习了HTML,感觉自己不在状态,后来就开始怀疑自己的智商呢!现在C语言也到了尾声,在这20天的学习过程中,我没 有以前那么的傲娇了. 我开始慢慢去反省自己,自己究竟该如何去学习,都说勤能 ...

  9. Android Studio 自动生成 Java Doc

    Android Studio 生成 Java Doc 出现"编码GBK的不可映射字符"问题 错误的解决方案,复制粘贴一万遍也是错误的,下面是查找出来的,没有用的解决方案(还有几个, ...

  10. (Android)Wifi-Direct直连

    因项目需要Pad端和手机端交互,采用wifi直连.查阅资料,大概写下一些资料和收获吧.注:大公司的代码带不出来,我也比较懒不想再认真去写一遍了,所以大概这个意思哦. wifi直连也叫做wifi设备点对 ...