第一次课训练营课程打通了有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. 【css技能提升】css高级技巧

    本文是一个帮你提升 CSS 技巧的收藏集. 使用CSS复位 CSS复位可以在不同的浏览器上保持一致的样式风格.您可以使用CSS reset 库Normalize等,也可以使用一个更简化的复位方法: * ...

  2. c# MySqlHelper_ExecuteSqlTran

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;u ...

  3. office 2013幻灯片中插入SmartArt图形时出现错误下列一个或多个文件由于包含错误而无法运行

    office 2013幻灯片中插入SmartArt图形时出现错误下列一个或多个文件由于包含错误而无法运行 系统:win8 64位 PowerPoint2013 64位 在幻灯片中插入SmartArt图 ...

  4. Java探秘之基本数据类型和包装类(int,Integer)(一)

    最近闲来无聊打算做一个博客网,没事记记笔记什么,可是网站不好做,需要点时间,就先写写笔记来练练手. 可是要写什么呢,太难的好像我也写不出来,万一写错了误导别人就不好了. 哈哈,不多说,直奔主题,要是写 ...

  5. JavaScript图片翻转

    <script type="text/javascript"> /** * 注册函数f,当文档加载问成时执行这个函数f * 如果文件已经载入完成,尽快以异步方式执行它 ...

  6. springBoot基础系列--properties配置

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分手动配置,但是对于一些特定的情况, ...

  7. 小哈学Python第二课:Hello Word

    Python入门 1.Hello World 2.Hello World

  8. 谈一款MOBA游戏《码神联盟》的服务端架构设计与实现

    一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者 ...

  9. Sping之Ioc

    Ioc,控制反转,依赖注入! 作用:降低代码之间的耦合性 代码永远是最好的示例: 1.新建test类 package demo; public class test { String string_v ...

  10. (转)示例化讲解RIP路由更新机制

      目录(?)[+]   以下内容摘自最新上市的“四大金刚”图书之一<Cisco路由器配置与管理完全手册>(第二版)(其它三本分别为<Cisco交换机配置与管理完全手册>(第二 ...