201621123050 《Java程序设计》第5周学习总结
1. 本周学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词
答:接口、has-a、comparable
1.2 尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。

1.3 可选:使用常规方法总结其他上课内容。
- is-a 和 has-a
- 分别体现继承和接口
- 面向接口编程也体现了多态
- 注意:Comparable 和 Comparator 的区别和实现
2. 书面作业
作业参考文件下载
PTA题集:面向对象2-进阶-多态、接口与内部类
1. 面向对象设计大作业(团队项目,2-3人)
内容:继续完善上次的大作业。
1.1 项目简介表格:
| 学生 | 负责任务 | 博客地址 |
|---|---|---|
| 高天 | 细节及Shop主类实现 | http://www.cnblogs.com/jmugt/ |
| 程会青 | 框架及User实现 | http://www.cnblogs.com/chqing/ |
1.2 系统常用功能框架图

1.3 系统总体类图

1.4 购物车、商品、系统关键代码截图(主要截取自己负责的部分)

1.5 其他:跟上次的系统比较,系统的设计等有何修改。其他感想。
答:重新构思了整个系统,大致思路安排如下,主要存在问题也在图片中。并且在代码实现过程中,仍然存在非常多的问题,例如商品列表和用户列表的存在是什么属性,应该存在于哪个类中。最后Shop中主要是测试函数,还没有对人工操作进行优化。

2. abstract:阅读GuessGame抽象类的设计与使用源代码



2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法,看起来更复杂,这样的改造到底有什么好处呢?
答: 类似的题目老师在上课时讲解过。很明显,改造前的Guess与控制台绑定,只能在控制台输入输出。使用抽象类以后,该类就不仅可以在控制台中操作,例如图形界面也可以使用该类。
2.2 GuessGame(改造后).java中有抽象方法与非抽象方法,你觉得抽象类中什么样的方法应该声明为abstract,什么方法不需要声明为abstract直接实现即可。
答:抽象方法需要被继承,即需要多种方式实现的方法都要使用abstract,例如形状类中的求面积和体积在方形和圆形中的不同实现。而不需要被继承,无需多种方式实现的方法,就不用abstract修饰。
2.3 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract等概念进行说明。
答:
- 变化的:在子类中重载父类中的方法,该例中主要体现是 解除了控制台的输入输出,得到更广泛应用。
- 不变的:游戏功能不变。
3. Comparable与Comparator
3.1 结合PTA 7-1中你的代码说明,为什么某个类实现了Comparable接口,就可以直接使用Arrays.sort对该类型的数组进行排序?
答:7-1中,PersonSortable类继承Comparable接口,重写了其中的compareTo的方法,实现了对数组的排序。Arrays.sort中也Comparable接口,不同类中有相同接口,即可实现相似方法。而且在继承了该接口后,必须重写compareTo方法,否则编译出错。
3.2 结合PTA 7-2 中你的代码说明,有了Comparable接口为什么还需要Comparator接口呢?
答:pta7-2要求两种排序方式,但Comparable只能实现一种。此时就需要Comparator接口,来新建多个外部比较器实现对PersonSortable2的多种排序方式。与Comparable一样,需要在外部比较器中实现compareTo的方法。
3.3 以前的作业Shape, Rectangle,Cirlce中,Shape类中什么方法应声明为abstract?说出原因。
答:计算面积的方法和计算周长的方法需要用abstract声明。因为两种方法在不同形状——例如方形和圆形——中实现时,方法是不一样的,所以在shape中我们无法给出确定的实现步骤,所以这两种方法是抽象方法。具体代码放入子类中实现。
3.4 有很多Shape类型对象如Rectangle、Circle。希望使用Arrays.sort对他们进行排序,请写出相应代码。并简述应在哪个类上实现Comparable接口比较好?
答:首先在Shape类中实现比较接口好。因为比较的方式主要是对周长或者对面积进行比较,而形状都具有这两种属性,所以用shape继承比较接口就可以实现对所有形状的排序。
abstract class Shape implements Comparable<Shape>{
final static double PI=3.14;
public abstract double getArea();
public abstract double getPerimeter();
//201621123050 高天
public int compareTo(Shape o){
if(this.getPerimeter()-o.getPerimeter()<0)
return -1;
if(this.getPerimeter()-o.getPerimeter()>0)
return 1;
else
return 0;
}
}
如代码,使用Comparable时,可以实现对周长或者面积的排序。
但使用Comparator建立外部比较器,可以按需求实现对周长和面积的排序。所以个人倾向使用Comparator。(代码类似,省略)
3.5 以3.4你编写的代码为例,简述面向Comparable接口编程、面向父类编程的好处。(注意:一定要结合自己编写的代码)
答:3.4中,需要对多种形状进行排序,例如按照周长排序,就令父类Shape继承Comparable的接口,从而实现了对其子类的排序。
比较这一功能是在非常多类中都需要实现的,但类不同,比较的方式和实现代码都不相同,但对每一个类都进行比较功能的实现,就太繁杂了。而Comparable接口提供了比较方法,我们只要根据类的属性及需求进行重写即可实现比较,节省了大量时间和代码量。
4. 面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 a.画出类关系图。b.StudentDao接口有什么用?
a

b
答:该接口定义了三个抽象方法,显示,读取,写入。该接口被另外两个类继承后,使得两种存储方式的类可以对接口的方法进行不同的实现。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何共同之处?有何区别?
答:
- 共同之处:属性都有Students,具体实现了三种抽象方法
- 不同之处:StudenDaoListImpl是使用数组存放Student,而StudentDaoArrayImpl使用动态数组,所以相应的方法就略有不同,但功能仍然一致。
4.3 结合Test.java中的main函数,简述面向接口编程的好处。
答:在main函数中,可以创建不同的对象实现对学生信息的不同存储方式。虽然存储方式不同,但两者实现的功能是一致的,所以我们就建立了一个接口定义相关的方法,再在不同的类中具体实现。接口关联了两种存储student信息的类,使得test中逻辑清晰,并且更加规范。
5. 什么是面向接口编程?面向接口编程的好处是什么?
结合题目4案例中的Test.java的代码进行分析。不要百度原封不动照搬!
该题结合代码分析内容与4.3略有重复 该题答案参考面向接口编程
答:接口使方法定义与方法实现的分离,在接口中定义,在其他类中实现。
好处:(百度有很多内容,仅写自己已理解的优点)
- 规范化,接口的存在,使得需要实现相应功能的类中的方法存在关联性和一致性,在多人共同编程时,定义接口也有利于程序的对接(这一特点似乎也可以说成是抽象化?)。
- 在系统变得复杂时,可以通过接口对程序进行整体删除与添加
3.码云及PTA
题目集:面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录
码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)


3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中
| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 1 | 73 | 0 | 0 | 0 |
| 2 | 276 | 273 | 8 | 8 |
| 3 | 639 | 363 | 16 | 8 |
| 5 | 841 | 202 | 19 | 3 |
| 6 | 1075 | 234 | 23 | 4 |
201621123050 《Java程序设计》第5周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 促进客户转化,提高客单价!酷客多小程序发布版本V1.0.9!
商户和企业主的又一次福音!酷客多小程序新零售o2o商城系统酷爱用户,为了追求极致的用户体验,没日没夜地沉浸于新功能的开发,经过一番努力,新功能终于上线啦! 此次版本迭代,在原有功能基础上做了大幅提升, ...
- jquery四种监听事件的区别
最近找工作被问到了jquery有哪些事件监听,都有什么区别,忽然有点想不起来了... 然后上网上查看了相关的资料,总结一下,方便大家查看,也方便自己复习! 1.bind()方法: bind(type, ...
- Dynamics 365 Online用户密码三问及其解答
本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复264或者20170903可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- Python Cookbook(第3版)中文版:15.15 C字符串转换为Python字符串
15.15 C字符串转换为Python字符串¶ 问题¶ 怎样将C中的字符串转换为Python字节或一个字符串对象? 解决方案¶ C字符串使用一对 char * 和 int 来表示, 你需要决定字符串到 ...
- 【BZOJ3680】吊打XXX(模拟退火)
[BZOJ3680]吊打XXX(模拟退火) 题面 BZOJ 题解 模拟退火... 就是模拟退火 然后这题有毒 各种调参数之后终于\(AC\)了.. 这种题就是玄学呀... 温度要调大 最后跑完还要向四 ...
- 【NOIP2016】换教室(动态规划)
题目戳我 题解 其实感觉16年的难度不是很大???? 这道题去年考场上DP都想出来了... 只是因为不会数学期望...然后GG.... 这道题目只要把数学期望搞出来就可以啦 设f[i][j][0/1] ...
- 开发中使用Gson的实例(时间格式错误解决方法)
...... // 通过GSON解析,使用4个实体类来接受(TotalResponse.TradeRateResponse.TradeRatess.TbTradeRates) GsonBuilder ...
- HTTP架构介绍(2) 缓存
web缓存是自动复制所请求数据并将其保存在本地存储中的设备. 通过这样做, 可以实现: 减少网络流量 消除网络瓶颈 防止服务器超载 减少长距离的响应延迟 因此, 您可以清楚地说, web 缓存可提高用 ...
- SLIC superpixel算法
标题 SLIC superpixel算法 作者 YangZheng 联系方式 263693992 SLIC算法是simple linear iterative cluster的简称,该算法用来生成超像 ...
- Oracle用户、授权、角色管理
创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识.掌握还Oracle用户的授权操作和原理,可以有效提升我们的工作效率. Oracle ...