201621123021《JAVA程序设计》第五周学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了201621123021《JAVA程序设计》第五周学习总结相关的知识,希望对你有一定的参考价值。

201621123021《JAVA程序设计》第五周学习总结

1. 本周学习总结

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

  • 接口、comparator接口、comparable接口、has-a

1.2 尝试使用思维导图将这些关键词组织起来。

技术分享

 

2. 书面作业

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

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

1.1 项目简介表格

学生负责任务博客地址
简卓林 Store git[https://gitee.com/TongCan/ShoppingCart.git]
董明超 Good、ShoppingCart git

1.2 系统常用功能框架图

技术分享

1.3 系统总体类图

技术分享

 

1.4 购物车、商品、系统关键代码截图

购物车

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;

public class ShoppingCart {
    private ArrayList<Good> goods = new ArrayList<>();
    public void add(Good good){ //购买商品==将商品放入购物车
        goods.add(good);
    }

    @Override
    public String toString() {
        return "ShoppingCart{" +
                "goods=" + goods +
                "}";
    }
    public BigDecimal sum(){
        BigDecimal res = new BigDecimal(0);
        for (Good good : goods) {
            res=res.add(good.getPrice());
        }
        return res;
    }

    public void deleteGood(int index){
        goods.remove(index-1);
    }
    public void deleteGood(Good o){
        goods.remove(o);
    }
}

 

商品

import java.math.BigDecimal;

public class Good {
    private BigDecimal price;
    private String name;
    private int number;
    public Good(BigDecimal price, String name) {
        this.price = price;
        this.name = name;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Good{" +
                "price=" + price +
                ", name=‘" + name + ‘\\‘‘ +
                "}";
    }
    //数量编辑
    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

 

商家

import java.math.BigDecimal;

public class Good {
    private BigDecimal price;
    private String name;
    private int number;
    public Good(BigDecimal price, String name) {
        this.price = price;
        this.name = name;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Good{" +
                "price=" + price +
                ", name=‘" + name + ‘\\‘‘ +
                "}";
    }
    //数量编辑
    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

 

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

  • 更上一次系统相比本次系统的功能变得更多,更加强大。通过本次大作业我明白了面向对象的重要性。

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

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

  • 使用抽象类、抽象方法能够使子类更加方便的实现多态。

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

  • 当我们想要一个类实现不同的功能时可以使用抽象类。
  • 当我们想要对类实现特定功能时可以不适用抽象类。

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

  • 变化的是类从非抽象类变成了抽象类。
  • 不变的是游戏的猜数字功能并没有发生改变。

3. Comparable与Comparator

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

public PersonSortable(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

 

  • 因为Comparable接口中包含着对于数组的创建,所以可以使用Arrays.sort进行排序。

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

  • 因为本题需要进行两种排序方式,一种按照年龄排序,一种按照姓名排序,此时Comparable接口被占用,则还需使用Comparator接口进行比较。

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

  • Shape重计算周长的函数getPerimeter()和计算面积的函数getArea()应声明为abstract,因为面积和周长在不同的图形中实现功能的方法不一样。

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

public int CompareTo(Shape o){
    if(this.getPerimeter()-o.getPerimeter()<0)
    return -1;
    else if(this.getPerimeter()-o.getPerimeter()>0)
    return 1;
    else
    return 0;
}
Array.Sort(Shape);

 

  • 应在Shape中实现Comparable接口比较好,应为不管是周长还是面积都是包含在Shape类中。

3.5 以3.4你编写的代码为例,简述面向Comparable接口编程、面向父类编程的好处。

  • 面向接口编程和面向父类编程可以提高函数的灵活性,如题3.4中我对于面积、周长的比较程序灵活的选择比较方法。

4. 面向接口案例分析

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

技术分享

 

  • b.StudentDao的作用是作为程序的接口,进行读、写、输出功能。

4.2 StudenDaoListImplStudentDaoArrayImpl有何共同之处?有何区别?

  • 共同之处:都是用来存储学生信息的类。
  • 区别:StudenDaoListImpl通过列表的方式来存储数据,而StudentDaoArrayImpl通过数组的方式来存储数据。

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

  • 面向接口编程提高了程序了灵活性,如Test.java中数据的后台来源可能不一样,但是却可以正确使用。

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

  • 面向接口编程即不管后台数据是怎样的形式,程序都可以对这些数据进行正确的处理,如题目中Test.java,我们有两个数据后台一个是List另一个是Array,接口可以对他们进行正确的处理,来实现对学生信息的正确处理。
  • 面向接口编程的好处是提高程序运行的广度,能够让数据对象成为一个集合,然后再进行统一处理。

3.码云及PTA

3.1. 码云代码提交记录

技术分享

 

3.2 截图PTA题集完成情况图

技术分享

技术分享

 

3.3 统计本周完成的代码量

周次总代码量新增代码量总文件数新增文件数
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 437 437 7 7
5 905 468 13 6

以上是关于201621123021《JAVA程序设计》第五周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

20175317 《Java程序设计》第五周学习总结

20155335俞昆《Java程序设计》第五周总结

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

20175304 《JAVA程序设计》第五周学习总结

Java第五周学习总结

20175322《Java程序设计》第五周学习总结