zoukankan      html  css  js  c++  java
  • 201621123037 《Java学习设计》 第五周学习总结

    Week05-继承、多态、抽象类与接口


    1. 本周学习总结

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

    关键词:接口、"has-a"、多态、comparable、Comparator

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

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

    • Comparable还有Comparator的实现和他们的区别:
      Comparable接口:
      提供了int compareTo(To)方法
      调用包java.util,需要导入java.util.Comparator类。
      Comparator接口
      只提供了int compare(To1,To2)方法
      调用包java.lang,不需要导包。

    • "is-a" 用继承,"has-a"用接口。


    2. 书面作业

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

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

    作业提交结构如下:

    1.1 项目简介表格:

    码云大作业地址

    团队成员表格

    学生 负责任务 博客地址
    秦玉 商品类和购物车类的实现以及主函数的搭建 秦玉的博客链接
    姚雯婷 商品类和商品类的实现以及主函数的搭建 姚雯婷的博客连接
    黄秋菊 菜单类以及主函数的美化 黄秋菊的博客链接

    测试数据:

    5
    沙茶面 2 10
    猪肉饺子 1 13
    黑胡椒牛排 3 35
    田鸡火锅 3 30
    抹茶蛋糕 1 99

    抹香奶绿 3 6
    可乐 3 3

    PS:最后整体小组成员代码对接时,一同完成的代码数据测试

    1.2 系统常用功能框架图

    1.3 系统总体类图

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

    商品类和购物车类:



    主函数:


    测试数据:





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

    答:
    修改:
    上次系统没有使用ArraysList来动态储存,所以对整个数组进行修改的实现比较麻烦,这一次改成了动态数组,实现商品的修改就很容易了。
    方法也有了一点的更改,这次在购物车类里面加入了一个clear购物车的方法。
    对整个界面和主函数进行了优化。
    设想:
    准备在下次的合作中对购物车进行细化,加入一个当前要购买的动态数组,此数组选择购物车里面的商品进行选择性购买,再求总价。

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

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

    改造前:

    改造后:

    答:
    改造前的码和控制台绑定了,只能在控制台输入输出;而改造后用abstract修饰输入输出,这样就不会只能在控制台输入,也可以对图形界面等进行操作。

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

    答:
    当需要多种方式或平台来使用的时候,用abstract实现不同环境的输入。
    而某些类特有的具体方法,不用声明为abstract,可直接实现。

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

    答:
    变化的:
    继承的子类中复写父类的所有方法,也就是输入输出的方式没有被锁定,比较之前更加灵活。
    不变的:
    父类抽象类方法的定义是不改变的,因为定义时没有具体的内容。

    3. Comparable与Comparator

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

    答:
    7-1中,Arrays.sort中用到了Comparable,而Comparable接口只含一个compareTo(T o)方法。
    所以,通过PersonSortable类继承Comparable接口的方法,实现对该类型数组的排序。

    Comparable接口用途:
    重写comparaTo()方法进行覆盖,再用Arrays.sort(Object[] a)实现对对象的排序。

    原因:
    一个类使用Comparable接口,就说明它具备整体排序的功能,使用或覆盖重写comparaTo()方法后,Arrays.sort可以根据重写的方法对每个类的对象进行整体排序。

    排序条件:
    所有元素必须可以相互比较的。

    也就是说,对于数组中的任何 e1 和 e2 元素而言,e1.compareTo(e2) 不得抛出 ClassCastException[ClassCastException - 如果数组包含不可相互比较的的元素(例如,字符串和整数)]

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

    答:
    Comparable接口对类的对象进行的整体排列,如果只想对该类的某几个属性进行单独排序,比如7-2中,题目要求实现两种排序方法,就只能用Comparator接口来实现了。

    Comparable接口好用但是形式单一,如果需求只是要求按照特定的比较顺序进行排序,则是完全没有问题的;但是如果有多种排序的需求,比如某一个属性排序,就只能用Comparator接口来实现。
    Comparator接口是一个独立的比较器,当一个对象需要比较的时候,把比较器和对象一起传递过去就可以完成大小的比较了,并且在Comparator中用户可以自己编写各样的需求。
    作用:ArrayList.sort将比较对象按照接口规定的排序规则来实现
    格式调用:Arrays.sort(比较的对象, 实现Comparator接口的类)

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

    答:
    public abstract double getArea(); public abstract double getPerimeter();

    原因:shape为抽象类,要被继承以及实例化。
    而周长和面积作为Rectangle,Cirlce的共同特性,被声明为abstract的话,可以实现多态,即具有相同的形态,但是不同的定义,可以满足更多变化复杂的输入需求。

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

    答:
    放在Shape类里面实现比较好。
    因为Comparable接口是对整体进行排序,而且要求为可相互比较的的元素,这样想对各种需求的形状(如Rectangle、Circle)进行比较,就应该在它们共同父类Shape上实现。

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

    答:
    面向接口编程好处:
    在很多情况下,需求都比较复杂,比较的类的对象也会有所不同,如果对于每次更改的类的对象都写一个对应的排序方式就比较繁琐,而用Comparable接口编程就可以提供好排序的方法,对于不同的类的对象只要重写compareTo()方法,比较元素符合即可,这样编写方便且省了大量的代码,简化阅读量。
    面向父类编程的好处:
    在本题中,Rectangle、Circle类的共同特性均为图形,都有周长和面积,继承自Shape父类,这样面向Shape编写代码,将接口在父类中实现,即可完成同时对两个子类的排序。

    4. 面向接口案例分析

    阅读Case-StudentDao.zip案例

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

    答:
    StudentDao接口:定义了三个抽象方法,分别为写入、读取和显示学生数据。

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

    答:
    共性:
    属性都是students
    都具体实现了三个抽象方法

    区别:
    StudenDaoListImpl类型为Student[]
    StudentDaoArrayImpl类型为List
    StudentDaoArrayImpl类型另开了size大小的数组

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

    答:
    采用StudentDao接口,用于读取、写入、显示学生数据。这样使得test.java看起来逻辑清晰,更便于修改内容。同时也实现了多态性质。

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

    结合题目4案例中的Test.java的代码进行分析。不要百度原封不动照搬!

    答:
    面向接口编程:
    是通过接口的实现来进行功能函数的调用。
    好处:
    一个类不能继承多个类,但是可以有多个接口。
    接口易于修改,实现了多态,整个逻辑看起来更加清晰明了。


    3.码云及PTA

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

    3.1. 码云代码提交记录

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

    3.2 截图PTA题集完成情况图

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

    3.3 统计本周完成的代码量

    需要将每周的代码统计情况融合到一张表中。

    周次 总代码量 新增代码量 总文件数 新增文件数
    1 0 0 0 0
    2 0 0 0 0
    3 0 0 0 0
    4 0 0 0 0
    5 1167 1167 26 26
    6 1830 663 32 6
  • 相关阅读:
    中国历史朝代公元对照简表
    [Solved] DashBoard – Excel Service: The data sources may be unreachable, may not be responding, or may have denied you access.
    Delete/Remove Project from TFS 2010
    Sharepoint site showing system account instead of my username on the top right corner.
    你的成功在于你每天养成的习惯
    Internet Information Services is running in 32bit emulation mode. Correct the issue listed above and rerun setup.
    Prepare to back up and restore a farm (Office SharePoint Server 2007)
    Word中字号与磅值的对应关系
    How to: Change the Frequency for Refreshing the Data Warehouse for Team System
    UI Automation in WPF/Silverlight
  • 原文地址:https://www.cnblogs.com/qin-yu/p/7704318.html
Copyright © 2011-2022 走看看