201621123041java程序设计第五周学习总结
1. 本周学习总结
2. 书面作业
1. 面向对象设计大作业(团队项目,2-3人)
1.1 项目简介表格:
学生 | 负责任务 | 博客地址 |
---|---|---|
林裕恒 | 注册类编写 | 博客地址 |
罗志凯 | 用户类编写 | 博客地址 |
1.2 系统常用功能框架图
2. abstract:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法,看起来更复杂,这样的改造到底有什么好处呢?
- 改造前的Guess未使用抽象类,只能由控制台输出;改造后的Guess使用了抽象类既可以在控制台输入,也可以在对话框输入。好处就是,我们可以不去实现类,只需要声明方法,用于指向一个实例;同时使用抽象类更加方便和稳定,不需要专门去为一个环境写一个相适应的代码,也不许重复声明一些具有相似特点的类,大大的简化了代码。
2.2 GuessGame(改造后).java中有抽象方法与非抽象方法,你觉得抽象类中什么样的方法应该声明为abstract,什么方法不需要声明为abstract直接实现即可。
- 类中拥有共同行为的,可以将其声明为abstract,但是比如在圆形和矩形的类中,面积和周长都有其不同的计算方式,此时就要定义抽象类,这时候就不需要声明为abstract直接实现。
2.3 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract等概念进行说明。
- 输入的输出的数据时变化的,但是猜数字的方法是不变的即逻辑不变,声明的方式改变了,但是其中的方法是不变的。这个例子中的抽象类是不能直接使用的,要选择一个类或者环境去实现abstract。
3. Comparable与Comparator
3.1 结合PTA 7-1中你的代码说明,为什么某个类实现了Comparable接口,就可以直接使用Arrays.sort对该类型的数组进行排序?
-
Comparable接口可以告诉计算机你所想要的排序规则,然后通过Arrays.sort进行排序。
-
Arrays类有一个静态方法sort,利用这个方法我们可以传入我们要排序的数组进去排序,因为我们传入的是一个数组的引用,所以排序完成的 结果也通过这个引用的来更改数组.对于整数、字符串排序,jdk提供了默认的实现,如果要对一个对象数组排序,则要自己实现 java.util.Comparator接口。
-引用自Java数组排序Arrays.sort,以及Comparator接口的用法
3.2 结合PTA 7-2 中你的代码说明,有了Comparable接口为什么还需要Comparator接口呢?
- 如果只是单独的只对姓名或数字排序,那么Comparable接口久已经足够,但是如果对多个条件排序,多个对象进行比较,这时候Comparable接口已经不能满足我们的需求,就需要使用Comparator接口。
3.3 以前的作业Shape, Rectangle,Cirlce中,Shape类中什么方法应声明为abstract?说出原因。
-
例如计算圆和矩形的周长面积,因为圆和矩形的面积周长计算方法不同,所以应声明为abstract。
-
用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。 引用自Java中的abstract方法和abstract类的问题
3.4 有很多Shape类型对象如Rectangle、Circle。希望使用Arrays.sort对他们进行排序,请写出相应代码。并简述应在哪个类上实现Comparable接口比较好?
- 在Circle类上实现Comparable接口比较好,在Circle类上实现Comparable接口可以在比较周长的前提下实现面积的比较。
3.5 以3.4你编写的代码为例,简述面向Comparable接口编程、面向父类编程的好处。(注意:一定要结合自己编写的代码)
- Comparable接口编程、面向父类编程可以简化我们的代码,它能给我们提供一个比较方法,不需要我们自己再去一个一个的定义新的方法去比较,例如,在PTA形状继承中,我们需要比较圆形和矩形,此时我们只要使用Comparable接口就可以实现两个类的比较。
4. 面向接口案例分析
4.1 a.画出类关系图。b.StudentDao
接口有什么用?
- b.
StudentDao
接口定义了三种方法:1.输出学生信息;2.读取学生信息;3.输入学生信息
4.2 StudenDaoListImp
l与StudentDaoArrayImpl
有何共同之处?有何区别?
- 两者都是用来储存学生信息。
StudenDaoListImpl
使用ArrayList
存储学生信息,而StudentDaoArrayImpl
是使用数组存储学生信息。
4.3 结合Test.java中的main函数,简述面向接口编程的好处。
- 接口隐藏了实际功能,但给用户提供统一的操作界面和使用方式。在这题的代码中
sdm.diplayAllStudent();
接口就是这样,我们不用去了解它是如何运行的,只要调用他实现功能就可以了。面向接口编程大大的简化了代码,子类只能继承一个父类
却可以继承多个接口,功能区分清晰,改起来方便。
5. 什么是面向接口编程?面向接口编程的好处是什么?
- 面向接口编程指的是系统每部分的实现和实现之间,通过interface所确定的协议来共同工作。不同类之间的通信,各模块之间的联通,在系统设计都是要考虑的,这也是系统设计的最主要工作内容。面向接口编程就是指按照这种思想来编程。在这题的代码中
sdm.diplayAllStudent();
接口就是这样,我们不用去了解它是如何运行的,只要调用他实现功能就可以了。面向接口编程大大的简化了代码,子类只能继承一个父类却可以继承多个接口,功能区分清晰,改起来方便。
3.码云及PTA
3.1. 码云代码提交记录
3.2 截图PTA题集完成情况图
3.3 统计本周完成的代码量
- |周次|总代码量|新增代码量|总文件数|新增文件数|
|-😐-😐-😐-😐-😐
|5|221|221|4|4|
|6|487|226|10|6|