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

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

1.本周学习总结

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

  • 接口,继承,多态
    1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来

2. 书面作业

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

内容:继续完善上次的大作业。
注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化较大的地方的是输入与输出部分。编码的时候,请不要将处理输入(System.in)与输出(System.out)的代码与某个业务处理方法绑死。
参考资料:
码云地址:https://gitee.com/LvXingZheDeMeng/java201621123087/blob/master/ShoppingCart.java
1.3 使用Java代码实现这个系统(不必很完善)。粘贴运行截图与关键代码。将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。合作完成:2-3人一个小组。

||||||||||
|:--|:--|:--|:--|
|学生|负责任务|博客地址|
|张恒|购物车|http://www.cnblogs.com/patriotic/p/7705048.html|
|宾钧荣|商品信息|http://www.cnblogs.com/binjunrong/p/7706135.html|

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

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

//改造前:
import java.util.Scanner;
public class Guess { public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
int number = (int) (Math.random() * 10);
    int guess;

    do {
        System.out.print("猜数字(0 ~ 9):");
        guess = scanner.nextInt();
    }
        while(guess != number);
       System.out.println("猜中了...XD");
}
}
//改造之后:
    public abstract class GuessGame {
    public void go() {
    int number = (int) (Math.random() * 10);
    int guess;
    do {
        print("输入数字");
        guess = nextInt();
    } while(guess != number);
    println("猜对了");
}

public abstract void print(String text);
public abstract void println(String text);
public abstract int nextInt();
}

改造后实现了类和方法分离,实现了多态,后期输入和输出都可以去继承抽象类,方便了操作。
2.2 GuessGame(改造后).java中有抽象方法与非抽象方法,你觉得抽象类中什么样的方法应该声明为abstract,什么方法不需要声明为abstract直接实现即可。

  • 抽象类中没有具体方法实现对对象进行描绘需要声明abstract
  • 一些直接可以实现的方法不需要声明abstract
    2.3 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract等概念进行说明。
  • 变化的是实现猜数字的方法,改造后引用抽象方法,可以在多数环境中输入用abstract创造了方法的原型,供以后使用。
  • 不变的是猜数字这个功能。

3. Comparable与Comparator

3.1 结合PTA 7-1中你的代码说明,为什么某个类实现了Comparable接口,就可以直接使用Arrays.sort对该类型的数组进行排序?
实现Comparable接口后,类中含有了copareTo方法,就用Arrays类中的sort方法是进行排序的
3.2 结合PTA 7-2 中你的代码说明,有了Comparable接口为什么还需要Comparator接口呢?
Comparable只能定义一种比较方法,但是有时候需要对一个集合进行不同的排序,就需要Comparator来对集合排序。因为omparator这个接口相当于一个比较器可以进行不同类型的比较。
3.3 以前的作业Shape, Rectangle,Cirlce中,Shape类中什么方法应声明为abstract?说出原因。
Shape类中计算形状的周长getPerimeter()和面积getArea()的方法应声明为abstract,因为不同形状的计算周长和面积的方法不一样,需要定义为abstract由它的子类去实现它的具体方法。
3.4 有很多Shape类型对象如Rectangle、Circle。希望使用Arrays.sort对他们进行排序,请写出相应代码。并简述应在哪个类上实现Comparable接口比较好?

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

4. 面向接口案例分析

阅读Case-StudentDao.zip案例
4.1 a.画出类关系图。b.StudentDao接口有什么用?

StudentDao接口定义了抽象方法,作用是供给继承该接口的类继承抽象方法。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何共同之处?有何区别?

  • 它们都继承了StudentDao接口,继承了Student类。
  • StudenDaoListImpl使用ArrayList的方法来存储,内存可变,而StudentDaoArrayImpl则是使用数组来存储,长度固定。
    4.3 结合Test.java中的main函数,简述面向接口编程的好处。
    1.程序结构清晰,使用方便
    2.接口经过合理设计后,有利于程序设计的规范化,并可以并行开发,提高工作效率
    3.实现了程序的可插拔性,对于不同的需求切换不同的实现,降低了耦合度,随着系统复杂性的提高这个优势会越来越明显
    4.允许多重实现,弥补了继承的缺陷

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

结合题目4案例中的Test.java的代码进行分析。不要百度原封不动照搬!
Test.java中是通过创建不同的对象来实现不同的存储方式。无论是用ArrayList方式存储还是用数组的形式存储,最终达到的效果都是一样的,抽象出来了一个接口。好处就是是程序更加灵活方便,结构清晰。

3. 码云及PTA

3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图


3.3 统计本周完成的代码量

||||||||||||||
|:--|:--|:--|:--|:--|
|周次|总代码量|新增代码量|总文件数|新增文件数|
|1|124|124|4|4|
|2|369|245|9|5|
|3|638|269|13|4|
|4|1067|429|18|5|
|5|1238|171|21|3|

posted on 2017-10-21 20:53  网络1613张恒  阅读(293)  评论(1编辑  收藏  举报

导航