如何两周达到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】 51. 序言:打印内容
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 工厂方法模式(Java与Kotlin版)
前文推送 设计模式 简单工厂模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操作 Kotlin入门第三课:数据类型 初次 ...
- Python3分析sitemap.xml抓取导出全站链接
最近网站从HTTPS转为HTTP,更换了网址,旧网址做了301重定向,折腾有点大,于是在百度站长平台提交网址,不管是主动推送还是手动提交,前提都是要整理网站的链接,手动添加太麻烦,效率低,于是就想写个 ...
- DB数据导出工具分享
一个根据数据库链接字符串,sql语句 即可将结果集导出到Excel的工具 分享,支持sqlserver,mysql. 前因 一个月前朋友找到我,让我帮忙做一个根据sql导出查询结果到Excel的工具( ...
- 暂停和播放CSS3动画的两种实现方法
1,直接修改animationPlayState <!DOCTYPE html> <html> <head lang="en"> <met ...
- 浅谈关于特征选择算法与Relief的实现
一. 背景 1) 问题 在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果: 1. 特征个数越多,分析特征.训练模型所需的时间就越 ...
- localStorage与location的用法
1.localStorage 是h5提供的客户端存储数据的新方法: 之前,这些都是由 cookie 完成的.但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 coo ...
- 详解Linux chgrp和chown命令的用法
Linux chgrp和chown命令是管理员的常用命令,对于初学Linux系统管理的人来说,这对Linux chgrp和chown命令具体的用法这里做一介绍. Linux chgrp命令 功能:改变 ...
- Android系统--输入系统(十六)APP跟输入系统建立联系_InputChannel和Connection
Android系统--输入系统(十六)APP跟输入系统建立联系_InputChannel和Connection 0. 核心:socketpair机制 1. 回顾Dispatch处理过程: 1.1 放入 ...
- [权限相关]在PeopleSoft中查找可以使用DataMover的用户
DataMover是一个功能非常强大的工具,它的访问权限应该被控制,特别是在PRD环境中.在每个公司,许多用户可能在一段时间内切换部门,角色和职责,所以每隔一段时间就应该检查这些用户的权限,以确认他们 ...