作业05-继承、多态、抽象类与接口
1. 本周学习总结
1.1 写出你认为本周学习中比较重要的知识点关键词
接口 interface关键字 implements has-a;comparable comparator;
1.2 尝试使用思维导图将这些关键词组织起来。注:思维导图一般不需要出现过多的字。
1.3 可选:使用常规方法总结其他上课内容。
2. 书面作业
作业参考文件下载
PTA题集:面向对象2-进阶-多态、接口与内部类
1. 面向对象设计大作业(团队项目,2-3人)
内容:继续完善上次的大作业。
注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化较大的地方的是输入与输出部分。编码的时候,请不要将处理输入(System.in)与输出(System.out)的代码与某个业务处理方法绑死。
参考资料:
使用Processon画图
作业提交结构如下:
1.1 项目简介表格:
项目码云地址(点击后要求可直接跳到该项目首页)https://gitee.com/qianyecan/shop。
团队成员表格
|学生|负责任务|博客地址|https://gitee.com/qianyecan/shop
|---
|韩烨| user类|博客地址http://www.cnblogs.com/HYSOUL/|
|陈芳毅| 商品和购物车类|博客地址http://www.cnblogs.com/cfycfy/|
|袁德兴 |main函数和菜单类| 博客地址http://www.cnblogs.com/dycsy/|
1.2 系统常用功能框架图
提示:在XMind文本方框中,可通过按Shift+Enter将字竖起来。
1.3 系统总体类图
类图绘制参考资料:
UML类图几种关系的总结
1.4 购物车、商品、系统关键代码截图(主要截取自己负责的部分)
1.5 其他:跟上次的系统比较,系统的设计等有何修改。其他感想。
上次的大作业我没有做 其实对我来说做这个是比较困难的 但是个别的部分我自己也能写出来
比如这次我自己写的user的类 而且 时间比较紧 自己属于被别人带的那类
2. abstract:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法,看起来更复杂,这样的改造到底有什么好处呢?
改造前是没有办法使用抽象类的 只是在控制下输入输出 但是改造以后 有了抽象类 就是可以在多种情况不同界面下实现输入输出 更加有灵活性 当然也就减少了代码量
2.2 GuessGame(改造后).java中有抽象方法与非抽象方法,你觉得抽象类中什么样的方法应该声明为abstract,什么方法不需要声明为abstract直接实现即可。
当需要实现一种功能的时候但是此时有很多方式去实现这个功能 这个时候方法就是可以定义成为 abstract类 因为方法定义了抽象方法 所以类也必须是抽象类
当指明有具体的环境 有具体的使用的方法输入输出 明白是怎样具体实现的时候 此时就不能再用抽象类的方法
2.3 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract等概念进行说明。
不变的是游戏的流程 都是猜数字直到和系统随机抽取的数字相同的时候游戏停止
变的是运行的环境 以及如何进行用户的输入 如何显示输出
变化部分因为具体的实现的条件呢没有办法确定 所以需要定义成抽象方法 (抽象类)可以实现根据具体情况实现
3. Comparable与Comparator
3.1 结合PTA 7-1中你的代码说明,为什么某个类实现了Comparable接口,就可以直接使用Arrays.sort对该类型的数组进行排序?
因为compareable作为接口 当我们去比较复杂的东西时候 comparable接口就是去规定标准 以什么样子的方式去比较 ? 类实现了comparable 这个接口 就有了能比较的标准
3.2 结合PTA 7-2 中你的代码说明,有了Comparable接口为什么还需要Comparator接口呢?
comparable 是一个内部的比较器 但是当我们需要其他的比较器 我们就需要自己定义一个新的比较器 就可以让对象之间进行比较 comparator相当于我们又自己定义了一个外部的比较器
3.3 以前的作业Shape, Rectangle,Cirlce中,Shape类中什么方法应声明为abstract?说出原因。
计算周长面积的方法要声明是抽象类 子类的计算方法的并不一样 所以要重新编写
3.4 有很多Shape类型对象如Rectangle、Circle。希望使用Arrays.sort对他们进行排序,请写出相应代码。并简述应在哪个类上实现Comparable接口比较好?
因为两者比较都是从父类继承的 所以应该在父类实现接口
3.5 以3.4你编写的代码为例,简述面向Comparable接口编程、面向父类编程的好处。(注意:一定要结合自己编写的代码)
因为子类是可以继承父类 所以应该在shape定义比较器后子类就需要再重新定义 减少代码量
4. 面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 a.画出类关系图。b.StudentDao接口有什么用?
调用函数的时候面向接口编写的时候不要要再去考虑是List还是Array
让程序编写的更简单 也更有灵活性
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何共同之处?有何区别?
前者和后者 都实现StudntDao
但是两个本质都是数组的在存储有区别 前者有大小限制 后者没有限制
4.3 结合Test.java中的main函数,简述面向接口编程的好处
面向接口最大的好处就是我们只需要定义出方法 并不需要在意怎么实现的
写出来的的程序可以有很大的弹性
在修改某个模块的时候不需要引起其他的很大的改动 减少了代码量 在编写过程中更加便捷
5. 什么是面向接口编程?面向接口编程的好处是什么?
结合题目4案例中的Test.java的代码进行分析。不要百度原封不动照搬!
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。
我个人对于接口的理解和对继承的理解认为有点相似 但是继承是父类调用方法 两者都是多态的体现就用老师上课讲的我们日常用得USB接口 我们可以插U盘 也可以插鼠标 两种都实现了数据传输 但是两者并不是同类东西 也就是说我们通过这个接口实现了不同的设备实现了传输数据这个功能
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 | 386 | 386 | 5 | 5 |
4 | 882 | 496 | 11 | 6 |
5 | 1476 | 594 | 18 | 7 |