201621123062《java程序设计》第五周作业总结

时间:2023-03-09 01:51:47
201621123062《java程序设计》第五周作业总结

1. 本周学习总结

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

关键词:interface、Comparable、comparator

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

201621123062《java程序设计》第五周作业总结

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

1.Arrays.sort的具体用法

2.第四次作业讲解

3.不同接口之间的区别

2. 书面作业

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

内容:继续完善上次的大作业。

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

2.1.1 项目简介表格:

项目码云地址

团队成员表格

学生 负责任务 博客地址
吴雅思 商品类、购物车类 吴雅思的博客链接
林诗乐 账户类、收货人类 林诗乐的博客链接

2.1.2 系统常用功能框架图

201621123062《java程序设计》第五周作业总结

2.1.3 系统总体类图

201621123062《java程序设计》第五周作业总结

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

201621123062《java程序设计》第五周作业总结

201621123062《java程序设计》第五周作业总结

201621123062《java程序设计》第五周作业总结

结果

201621123062《java程序设计》第五周作业总结

201621123062《java程序设计》第五周作业总结

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

修改:购物车不应该继承商品类,一些类的命名也规范了一点。写了一些主函数,我想做商品的添加操作,但是!!!添加一直实现不了,有个问题解决了好久一直不行,百度类似的问题是出在输入的数据上,但是我感觉输入这一块的数据类型都是对的。。。。

感想:发现写一个小系统都好难,比如商品件数到底应该放在商品类还是购物车里,这些小细节都需要考虑。目前还没有实现能够脱离控制台的代码,,慢慢写吧。。。。。

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

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

好处:阅读改造前代码可以发现未定义抽象类时代码与控制台是绑定的,而改造成抽象类后,不需要与控制台绑定,在其他地方也能实现这段代码。

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

应该声明为抽象方法:方法的类型暂时不确定,该方法放到子类中才会有具体的代码。

直接实现:方法的类型是确定的,且该方法的实现是具体的,不抽象。

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

变化: Guess定义成了抽象类,print()、println()、nextInt()都是抽象方法,利用抽象类,猜数字游戏可以在很多种环境下执行,不受控制台限制。

不变:随机数字的操作并不改变

2.3. Comparable与Comparator

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

查找资料

Arrays类有一个静态方法sort,利用这个方法可以传入我们要排序的数组进去排序,因为我们传入的是一个数组的引用,所以排序完成的结果也通过这个引用来更改数组。对于整数、字符串排序,jdk提供了默认的实现,如果要对一个对象数组排序,则要自己实现 java.util.Comparator接口。

代码截取

class PersonSortable implements Comparable<PersonSortable>{
public int compareTo(PersonSortable o){
if(name.compareTo(o.name)==0){
if(age>o.age)
return age-o.age;
if(age==o.age)
return 0;
else
return -1;
}
else return name.compareTo(o.name);
}

原因:通过编写接口方法,实现了对排序的要求,从而实现 java.util.Comparator接口,就能直接使用Arrays.sort。(这题不是很清楚)

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

原因:Comparable接口并不适用于多种方式的排序,而Comparator接口则适用于多种方式的排序。本题要求名字和年龄的排序,用Comparator接口。

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

方法:getArea()

原因:并不知道getArea()方法的类型,定义为抽象类后就能在子类的代码中具体实现。

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

相应代码:(本题有参考同学代码)

201621123062《java程序设计》第五周作业总结

结果

201621123062《java程序设计》第五周作业总结

201621123062《java程序设计》第五周作业总结

Comparable接口:shape是所有形状的父类,如果在shape类上实现接口,其他相应的子类都可以在各自的方法中用具体代码实现。

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

好处:面向接口编程可以不用管后台的数据是什么样的,有了共同的方法就可以操作。而面向父类编程可以使子类继承父类的基础上,对同一种方法有不同实现。例如本题的shape父类,它的其他子类,都有求周长排序的方法,但是实现起来是各不相同的。

2.4.面向接口案例分析

阅读Case-StudentDao.zip案例

2.4.1 a.画出类关系图

201621123062《java程序设计》第五周作业总结

b.StudentDao接口有什么用?

作用:通过StudentDao接口,StudenDaoListImpl与StudentDaoArrayImp分别用各自的不同代码实现了接口中的三个函数。

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

共同之处:都使用了StudentDao接口,都有三个函数:

       public boolean writeStudent(Student student);
public Student readStudent(String name);
public void diplayAllStudent();

区别:实现三个函数的代码是不一样的。

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

好处:在main函数中定义了StudentDao接口的类,面向接口编程后,用户可以使用统一的接口,然后各自编写不同代码实现自己的需求。接口也是一种多态的体现。

2.5什么是面向接口编程?面向接口编程的是什么?

面向接口编程:从Test.java的代码分析:


StudentDao sdm = new StudentDaoArrayImpl(50);//使用数组实现
StudentDao sdm = new StudenDaoListImpl();//使用列表实现

可见面向接口编程应该是使用者用一个共同的方法使用接口,可以实现自己的需求,并且不需要知道接口里面具体是怎么操作的。(不知道理解的对不对?)

百度资料

指的是系统每部分的实现和实现之间,通过interface所确定的协议来共同工作。

好处:使用者可以往后台写数据,无需考虑后台是什么,各自编写不同代码实现自己的需求。

3.码云及PTA

3.1. 码云代码提交记录

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

201621123062《java程序设计》第五周作业总结

201621123062《java程序设计》第五周作业总结

201621123062《java程序设计》第五周作业总结

3.2 截图PTA题集完成情况图

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

排名图:

201621123062《java程序设计》第五周作业总结

PTA提交列表图:

201621123062《java程序设计》第五周作业总结

3.3 统计本周完成的代码量

周数 行数 新增行数 文件数 新增文件数
1 57 57 5027 5027
2 400 400 10 10
3 508 508 23 13
5 609 609 31 8
6 612 612 40 9