zoukankan      html  css  js  c++  java
  • java第五周作业

    一. 本周学习总结

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

    • 接口
    • interface关键字
    • 接口的定义和实现
    • has-a
    • 实现Comparable
    • Comparator接口

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

    二. 书面作业

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

    1.1 项目简介表格:

    购物车系统项目地址

    学生 负责任务 博客地址
    黄子颖 (类名)Shoppingcart;Taobao;Taobaothings;IAO;Main 黄子颖博客
    翁华辉 (类名)User;UserList;Goods;GoodsList;CartInformation; 翁华辉博客
    1.2 系统常用功能框架图

    1.3 系统总体类图

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




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

    首先有很多增加的部分,写了用户注册和登陆,还增加了购物车中增删商品的方法,改正了一部分之前错误的设计思路,比如直接在购物车中定义商品信息。现在而是改为老师推荐的方法,多写一个类用来保存商品信息。

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

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

    答:改造后时候抽象类抽象方法后的输入输出,不和控制台绑定,可以实现更多功能。

    2.2 GuessGame(改造后).java中有抽象方法与非抽象方法,你觉得抽象类中什么样的方法应该声明为abstract,什么方法不需要声明为abstract直接实现即可。
    • 应该声明为abstract:输入输出之类的方法、没有具体内容实现的方法。
    • 不需要声明为abstract:有具体内容实现的方法。
    2.3 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract等概念进行说明。
    • 变化的:输入输出改为抽象类(具体修改内容如下),不和控制台绑定。
        public abstract void print(String text);
        public abstract void println(String text);
        public abstract int nextInt();
    
    • 不变的:程序的最终结果实现是不变的。

    3. Comparable与Comparator

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

    答:Arrays.sort()可对所有实现的Comparable接口的对象进行排序,具体排序的逻辑是依靠方法compareTo()
    以下是PTA7-1中的compareTo()方法的代码,Arrays.sort()依靠此方法定义的逻辑进行排序。

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

    一个类一旦实现了Comparable,比较的方式就固定了。那如果像PTA 7-2中需要按照姓名或者名字,甚至多种方式来实现呢?这时候Comparable就不适用了,就应该使用Comparator
    PTA 7-2中姓名的Comparator代码如下:

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

    public double getArea()
    public double getPerimeter()
    因为在子类Rectangle,Cirlce中,这两个方法都有不同的实现,Shape中没有具体实现,所以需要声明为abstract。

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

    要用Arrays.sort可以排序必须把Shape类上实现Comparable接口,并在其中写出compareTo方法

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

    面向Comparable接口编程、面向父类编程的好处:

    • 在此3.4例子中,把Shape类实现了Comparable接口,这样main函数直接使用Arrays.sort就可以直接进行排序了,而不需要多写一个繁琐的函数对其进行排序。
    • 同时Shape类对于Rectangle、Circle来说也是他们的父类,当Rectangle、Circle里的方法进行了修改,因为Rectangle、Circle是面向父类编程所以Shape的代码是不需要进行修改,这提升了系统的灵活性。

    4. 面向接口案例分析

    阅读Case-StudentDao.zip案例

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

    • StudentDao接口是interface的,他的作用是把下面的三个方法集合起来

    	public boolean writeStudent(Student student);
    	public Student readStudent(String name);
    	public void diplayAllStudent();
    
    4.2 StudenDaoListImpl与StudentDaoArrayImpl有何共同之处?有何区别?
    • 共同点:StudenDaoListImpl与StudentDaoArrayImpl都是接口
      ,都有public Student readStudent(String name)public void diplayAllStudent();public boolean writeStudent(Student student)方法
    • 不同点:虽然有相同的方法,但是其中public Student readStudent(String name)public boolean writeStudent(Student student)具体实现是不一样的,因为一个使用数组实现,一个是使用列表实现。在StudenDaoListImpl中还多了一个构造函数public StudentDaoArrayImpl(int size)
    4.3 结合Test.java中的main函数,简述面向接口编程的好处。

    main函数中使用public Student readStudent(String name)public void diplayAllStudent();public boolean writeStudent(Student student)的时候无需在乎一开始是数组还是List。就像老师在Test.java中加的那个注释

    //往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、List)
    //因为这里是面向StudentDao接口

    这就是接口编程的好处。

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

    • 面向接口编程的定义:每个层次不是直接向上层提供服务的,是通过定义一组接口,只向上层暴露接口功能。在Test.java中,StudenDaoListImpl与StudentDaoArrayImpl就是两个接口,main函数直接通过接口来调用其中的方法。
    • 面向接口编程的好处:这对系统的灵活型有好处。下层需要改变的时候,只要接口的关系是不变的,只要修改下层就好了,上层不用改变。在Test.java中,如果StudenDaoListImpl或StudentDaoArrayImpl中的方法需要进行修改,那就直接在StudenDaoListImpl或StudentDaoArrayImpl中进行修改就好了,而main函数不需要进行修改。

    三.码云及PTA

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

    3.1. 码云代码提交记录

    3.2 截图PTA题集完成情况图


    3.3 统计本周完成的代码量

    周次 行数 新增行数 文件数 新增文件数
    1 115 115 17 17
    2 421 306 24 7
    3 698 277 30 6
    5 1085 387 38 8
    6 1497 412 48 10
  • 相关阅读:
    SVN服务器搭建(一)
    排序算法二:冒泡排序
    【LeetCode】136. Single Number
    【LeetCode】217. Contains Duplicate
    【LeetCode】189. Rotate Array
    【LeetCode】122. Best Time to Buy and Sell Stock II
    【LeetCode】26. Remove Duplicates from Sorted Array
    【LeetCode】20. Valid Parentheses
    【LeetCode】680. Valid Palindrome II
    【LeetCode】345. Reverse Vowels of a String
  • 原文地址:https://www.cnblogs.com/yellower/p/7704053.html
Copyright © 2011-2022 走看看