如何两周达到150行Java程序的能力--part 2
第一次课训练营课程打通了有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的更多相关文章
- 如何两周达到150行Java程序的能力--part 1
面向对象程序先导课是体系化面向对象课程的重要组成部分,其目标是帮助那些有一定C语言基础,但对面向对象概念陌生,基本没碰过Java编程的同学.该课程设计为暑期选修课,因为没有其他课程,我们设计为现场训练 ...
- 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 ...
随机推荐
- 【Android Developers Training】 38. 文件共享需求
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Error detected while processing function CheckFoam256 问题的解决
今天在打开OpenFOAM的constant文件的时候, vim-OpenFOAM-syntax插件遇到了如下问题: Error detected while processing function ...
- DOCKER 从入门到放弃(二)
搜索镜像 从docker官方镜像仓库搜索镜像 docker search [OPTIONS] TERM OPTIONS: --automated :只显示自动创建的镜像,默认值为fasle --fil ...
- Backbone中父子view之间的值传递
backbone中,使用最多的莫过于在view中进行操作,如模板的渲染以及事件函数的定义.为了提高代码的可维护性,一般地我们会写多个视图即view,将界面按照功能的不同进行模块化划分,模块与view一 ...
- 流行框架angular
---恢复内容开始--- 一.angular是什么 一款非常优秀的前端高级js框架,由谷歌团队负责开发 angular是通过新的属性和表达扩展了html angular可以构建一个单一页面应用程序(s ...
- 跨域访问之CORS
CORS:定义 2014年1月16日,W3C的Web应用工作组(Web Applications Working Group)和Web应用安全工作组(Web AppSec)联合发布了跨源资源共享(Cr ...
- JS - dateFormat
// date必填, pattern默认'yyyy-MM-dd HH:mm:ss'function dateFormat (date, pattern) { var week = {'0':'日', ...
- [钉钉通知系列]Jenkins发布后自动通知
一.前言 最近使用Jenkins进行自动化部署,但是发布署后,并没有相应的通知,虽然有邮件发送通知,但是发现邮件会受限于大家接受的设置,导致不能及时看到相关的发布内容.由于之前有用Gitlab推送消息 ...
- QuartusII 13.0 PLL IP Core调用及仿真
有一个多月没用用Quartus II了,都快忘了IP 是怎么用调用的了,还好有之前做的笔记,现在整理出来,终于体会到做笔记的好处. 一. QuartusII的pll的调用 打开软件界面 Tool—— ...
- 修改tomcat编码方式
打开server.xml <Connector URIEncoding="UTF-8" connectionTimeout="20000" port=&q ...