201621123028《Java程序设计》第5周学习总结

作业05-继承、多态、抽象类与接口

1.本周学习总结

1.1写出你认为本周学习中比较重要的知识点关键词。

关键字:接口,interface关键字,implements关键字,has-a关系,Comparable,abstract。

1.2尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。

1.3 可选:使用常规方法总结其他上课内容。

2. 书面作业

PTA题集:面向对象2-进阶-多态、接口与内部类

1. 面向对象设计大作业(团队项目,2-3人)

内容:继续完善上次的大作业。
注意:再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化较大的地方的是输入与输出部分。编码的时候,请不要将处理输入(System.in)与输出(System.out)的代码与某个业务处理方法绑死。
作业提交结构如下:

1.1 项目简介表格:

项目码云地址(点击后要求可直接跳到该项目首页)。
团队成员表格

学生 负责任务 博客地址
郑玉波 User类,ShoppingCart类 郑玉波的码云地址
占恒 Commodity类,WalMart类 占恒的码云地址

1.2 系统常用功能框架图

提示:在XMind文本方框中,可通过按Shift+Enter将字竖起来。

1.3 系统总体类图

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

因为还没有学到使用文件,所以现在的登录与注册只有大体框架。

1.5 其他:跟上次的系统比较,系统的设计等有何修改。其他感想。

和上次有所不同,在建议下将登录和注册作为方法而不是类,且放在了WalMart类中。

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

Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法,看起来更复杂,这样的改造到底有什么好处呢?

改造之前:

改造之后:

  这样子改造将所要输入和输出的数字抽象化,这样子就可以不仅仅在控制台进行这个猜字游戏,如果想在图形界面等其他地方实现这个游戏就会非常方便,这个程序就非常灵活了。

2.2 GuessGame(改造后).java中有抽象方法与非抽象方法,你觉得抽象类中什么样的方法应该声明为abstract,什么方法不需要声明为abstract直接实现即可。

  显然输入输出这个方法需要声明为abstract,方便在不同环境下实现。而将所输入的数字与随机数字进行比较可以不用声明为抽象方法,因为不管在什么环境下这个方法都是一样的。

2.3 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract等概念进行说明。

  很显然,运行环境是变化的,在文本下,在控制台上或者在图形界面等等,但是这些方法是不变的,都是输入输出,比较数字的函数也是相同的。虽然输入输出的方法是抽象的,但是当出现了某个类用来告诉我们实现的环境是在哪里时,这几个方法也变得具体了。正如三生万象,一个抽象最后会变成很多种的实现。当抽象的方法被用到了,就实现了继承的思想。

3. Comparable与Comparator

3.1 结合PTA 7-1中你的代码说明,为什么某个类实现了Comparable接口,就可以直接使用Arrays.sort对该类型的数组进行排序?

  总所周知,Arrays类中的sort方法是可以对对象数组进行排序的,但是这是有前提的,就是所传入的对象必须实现了接口Comparable(java.lang),而且还要覆盖compareTo这个方法。

3.2 结合PTA 7-2 中你的代码说明,有了Comparable接口为什么还需要Comparator接口呢?

  因为用到了Arrays.sort进行排序,而它是对所有实现Comparable的对象进行排序。如果这个时候相对某一个对象进行排序,那仅仅的Comparable是不行的,这时Comparator出场了,它和Comparable不一样的是,Comparator接口是在一个独立的类中进行比较的,而且它可以指定排序的顺序。

3.3 以前的作业Shape, Rectangle,Cirlce中,Shape类中什么方法应声明为abstract?说出原因。

方法1abstract double getArea();abstract double getPerimeter();声明为抽象方法,因为对于抽象类Shape,可以是很多不同的图形,但是他们的面积和周长的求法不一样,所以要定义为抽象的。

3.4 有很多Shape类型对象如Rectangle、Circle。希望使用Arrays.sort对他们进行排序,请写出相应代码。并简述应在哪个类上实现Comparable接口比较好?

应在Shape类类里实现接口比较好。

3.5 以3.4你编写的代码为例,简述面向Comparable接口编程、面向父类编程的好处。(注意:一定要结合自己编写的代码)

我在Shape类中实现接口,那么在Rectangle类、Circle类中就能实现Comparable,这样最后可以直接对Shape使用Array.sort进行排序,增加了许多灵活性。

4. 面向接口案例分析

4.1 a.画出类关系图。b.StudentDao接口有什么用?

a.

b.StudentDao接口建立了三个方法,判断学生信息写入是否成功,读取学生的信息和展示全部学生信息。

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何共同之处?有何区别?

公共点是都是实现对学生信息的写入等,不同点是StudenDaoListImpl是使用了ArrayList来动态实现的,但是StudentDaoArrayImpl是用数组来实现的。

4.3 结合Test.java中的main函数,简述面向接口编程的好处。

好处:

1.更加抽象,更加面向对象
2.提高编程的灵活性
3.实现高内聚、低耦合,提高可维护性,降低系统维护成本。

这个代码是来存放学生的信息的,在Test的类里面我们可以不用知道如何实现的,StudenDaoListImpl与StudentDaoArrayImpl两种不同的结构都能实现写入并读取学生的信息,方便了许多,更加的结构化并提高了编程的效率。

5. 什么是面向接口编程?面向接口编程的好处是什么?

结合题目4案例中的Test.java的代码进行分析。不要百度原封不动照搬!

面向接口的编程方式是面向对象设计的一个原则,使用这种编程思想,我们可以容易地写出具有可复用性的代码,这对于代码的理解和维护具有很大的帮助

都知道接口不允许实例化,也就是说面向接口的编程和面向实现编程不一样,比如对于汽车所用的轮胎,拿面向实现说,可能就要考虑轮胎的品牌,性能等,会降低编程的灵活和可复用的性能。但是面向接口编程不在乎轮胎的品牌,能转动就行。这样就大大增强灵活性和可复用性。

3.码云及PTA

题目集:面向对象2-进阶-多态接口内部类

3.1. 码云代码提交记录

  • 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 截图PTA题集完成情况图

需要有两张图(1. 排名图。2.PTA提交列表图)

3.3 统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。

周次 总代码量 新增代码量 总文件数 新增文件数
1 191 191 18 18
2 571 380 19 1
3 1027 456 20 1
4 0 0 0 0
5 1359 332 25 5
6 2061 702 35 10
posted @ 2017-10-21 08:37  吃碗拉面冷静冷静  阅读(255)  评论(5编辑  收藏  举报