1. 本周学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词
关键字:接口
、多态
1.2 尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。
2. 书面作业
1. 面向对象设计大作业(团队项目,2-3人)
1.1 项目简介表格:
学生 | 负责任务 | 博客地址 |
---|---|---|
张雨阳 | 购物车类,登陆类 | |
李铎 | 商品类,用户类 |
1.2 系统常用功能框架图
1.3 系统总体类图
1.4 购物车、商品、系统关键代码截图(主要截取自己负责的部分)
1.5 其他:跟上次的系统比较,系统的设计等有何修改。其他感想。
- 修改了购物车类的方法和内容,定义了新的buy方法将购物车内的商品进行购买。
- 新建了登陆类,定义了登陆方法。
- 两个人一起完成效果事半功倍。但是该程序还是有很多bug,还需要继续认真学习,积极修改。
2. abstract:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法,看起来更复杂,这样的改造到底有什么好处呢
- 改造前,只能在控制台输入。改造后,使用了抽象类,可以在控制台或者对话框图形界面进行输入。
- 改造后可以实现多态和继承,对于进行大程序的编写有很大优势。
2.2 GuessGame(改造后).java中有抽象方法与非抽象方法,你觉得抽象类中什么样的方法应该声明为abstract,什么方法不需要声明为abstract直接实现即可。
- 当一个类中没有具体的方法的时候,它是一个非常抽象的概念,此时需要申明为abstract。这也解释了为何abstract的类可以实现继承。
- 当这个类有完整的方法时,就没有必要声明为abstract,直接实现即可。
2.3 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract等概念进行说明。
答:变化的是类的声明方式和输入方式,以及生成的数(因为是随机的)。不变的是这个程序的作用(随机数游戏)。
3. Comparable与Comparator
3.1 结合PTA 7-1中你的代码说明,为什么某个类实现了Comparable接口,就可以直接使用Arrays.sort对该类型的数组进行排序?
- 某个类实现了Comparable接口后,我们只需重写其中的compareTo()方法,让其在使用Arrays.sort()排序时能按照题意进行比较并排序。
- 实现了Comparable接口后,因为在Comparable的源代码中有用于比较的compareTo()方法,我们只需重写这个方法,再用Arrays.sort(),就能得到我们想要的排序结果。
3.2 结合PTA 7-2 中你的代码说明,有了Comparable接口为什么还需要Comparator接口呢?
- 在某个类实现实现Comparator接口后,我们可以重写Comparator接口中的compare()方法,写出
class NameComparator implements Comparator<PersonSortable1>
和class AgeComparator implements Comparator<PersonSortable1>
两种比较方式,再使用Arrays.sort(Arrays.sort(person,new NameComparator());)
和Arrays.sort(Arrays.sort(person,new AgeComparator());)
,按不同规则进行比较。 - Comparator接口可以定义多种比较方式,而Comparable接口只能按一种规则进行比较。
3.3 以前的作业Shape, Rectangle,Cirlce中,Shape类中什么方法应声明为abstract?说出原因。
答:Sharp类中计算周长和面积的方法应申明为abstract,因为不同的图形其计算周长和面积方法是不同的,因此要定义成抽象类,以便子类继承后可以根据自身的形状的实现具体方法。
3.4 有很多Shape类型对象如Rectangle、Circle。希望使用Arrays.sort对他们进行排序,请写出相应代码。并简述应在哪个类上实现Comparable接口比较好?
在Shape上实现Comparable最好,因为其他的类都是继承Shape类的,只要在Shape类中重写compare()方法,子类都可以用。以下是部分代码和运行结果
我更喜欢用Comparator接口,因为这样可以通过两种排序进行比较,分别是通过面积大小和通过周长大小。以下是部分代码:
3.5 以3.4你编写的代码为例,简述面向Comparable接口编程、面向父类编程的好处。(注意:一定要结合自己编写的代码)
- 对于某个类,比如Shape,当我们需要进行比较排序时,我们需要定义它的Comparable接口,并重写compare()方法后,可以让所有子类都继承这个方法,而不用每一个子类都编写这样一个方法,那样太麻烦。
- 面向Comparable接口编程、面向父类编程的好处是:简化代码,更易读懂,更易操作。
4. 面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 a.画出类关系图。b.StudentDao接口有什么用?
- StudentDao接口定义了三种抽象方法:写入学生信息,读取学生信息,输出所有学生信息。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何共同之处?有何区别?
- 相同点:都继承了StudentDao接口并实现了抽象方法。
- 不同点:StudenDaoListImpl使用ArrayList来存储学生信息,StudentDaoArrayImpl使用数组来存储学生信息。如图:
4.3 结合Test.java中的main函数,简述面向接口编程的好处。
- test中是定义了StudentDao接口,所以往后台写数据时,无需考虑后台是什么。
- 通过接口中的抽象方法,可以更清晰的分析代码的作用,而不需要在某一个方法上花费大量的时间。
5. 什么是面向接口编程?面向接口编程的好处是什么?
- 通过接口中的抽象方法,我们可以对不同的对象使用不同的实现方法来实现其抽象方法。而不是一个一个去定义。
- 简化了代码,使代码更易理解。
- 提高了各个系统直接的独立性,避免了一个bug需要修改整个系统的尴尬。
3.码云及PTA
题目集:面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 200 | 200 | 3 | 3 |
2 | 308 | 108 | 7 | 4 |
3 | 571 | 263 | 16 | 9 |
5 | 833 | 262 | 19 | 3 |
6 | 1241 | 408 | 27 | 8 |