1 2 3 4

20172310 2017-2018-2 《程序设计与数据结构》第八周学习总结

20172310 2017-2018-2 《程序设计与数据结构》第八周学习总结

教材学习内容总结

我的总结主要是按照课本的顺序,对一些重要的知识点做出的总结和记录,方便后期的查看,当然其中还有一些自己的理解。

后绑定:

  • 多态引用是可以在不同时间指向不同类型对象的引用变量。
  • 程序执行的某时刻产生一个请求,要求执行某段代码来完成一个方法调用,这称为一个方法调用与ー个方法定义的绑定。
    对于多态性引用,这种绑定要延迟到程序运行时才能执行、并且要绑定的方法定义取决于当时引用变量所引用的对象。这一被延迟的请求事件称为后绑定或动态绑定。

实现多态性:

可以用两种方式建立多态引用:继承和接口。
利用继承实现多态性:
  • 一个引用变量可以指向有继承关系的任何类的任何对象。
  • 任何类都是Object类的后代类,它的引用可以指向任何对象。
  • 实际将调用的方法版本取决于对象的类型而不是引用变量的类型。(考试里有碰到哦)
  • 父类可以用作方法参数的类型
利用接口实现多态性
  • 接口名可以用于声明对象引用变量
  • 一个接口引用变量可以指向实现接口的任何类的任何对象。
  • 实现类与其实现接口的关系,就如同子类与父类的关系。一种“是”关系,这种关系奠定了多态的基础。
  • 当使用接接口引用变量时,只能调用定义在接口中的方法、即使接口引用変量所指向的对像还有其他一些可用方法,也不能调用。
  • 接口名也可以用作方法参数的类型。

排序

  • 选择法排序: 在一个列表中,从第一个数开始,从左向右进行扫描,遇到最小的,将其与第一个数字进行对调,
    再从下一个个数字开始,继续重复上面的操作,不断地找出最小的,直到最后一个数完成排序,形成有顺序的排列。
  • 插入排序法:不断地将一个新元素插入到已排好序的数列子集中。在每一轮排序中,将一个未
    排序的新元素插到已排序子集中的适当位置,直到整个数列有序排列为止。从只含有一个元素的“已排序”数列开始,对数列的前两个值排序
    如果必要则交换这两个值的位置,再将第三个值插入到相对于前两个值(已排序的值)的适当位置。每当完成一次插入操
    作,已排序子集中的值的个数增1不断重复这一过程,直到所有的值都插到自己的适当位置,数组中其他值会移动位置以空出位置空间插入位置元素,
    这时就完成了整个数列的排序。
  • 排序算法的比较:
    • 选择算法时有性能标包括算法的简易性、效率及存储空间需求量。
    • 选择法排序和插人法排序实质上有同等的效率。二者都有类似性质的外层循环和内层循环,两种算法都执行大约n²次比较操作。
    • 虽然两种算法执行的比较操作的次数相同,但选择法排序所执行的交换操作的次数更少,因此选择法优于插入法。

搜索

  • 线性搜索:从一个端点,以线性方式描整整个搜索池,因此称为线性搜索。
  • 二分搜索:如果一个数组中的元素是有序的(升序或降序),则二分搜索比线性搜索算法的效率高得多。
    二分搜索利用搜索池是有序的这一事实,减少了大量的比较操作。
  • 排序算法的比较:
    • 二分搜索比线性搜索的效率高,但是要求数据已做过排序。
    • 算法选择取决于具体条件。排序容易活数据量大,则二分搜索比较合适。

多态设计

  • 多态性允许用一致性的方法实现不一致的行为。
  • 应该训练自己的软件设计敏感性,善于识别能利用多态性解法的潜在问题。

教材学习中的问题和解决过程

  • 问题1:继承是如何支持多态性的呢?

  • 问题1解决方案:观察课本的例题发现,多态其实就是以不同的方式,但又有着一样的行为或是说目的来完成一个指定目标的过程。
    然后,在Java中,用父类声明的一个引用变量可以指向一个子类对象。如果两个类具有两个相同签名的方法,则这个父类引用就具有多
    态性(因为同样的方法名会有不同的版本)。
    就像课本的例题Exployee类中有一个pay()方法,继承他的子类也都有pay()方法,这样在staff类中实例化对象时就出现了多态性。

  • 问题2:课本上有提到一句“如果在Volunteer类中不重载pay()方法,则应将StaffMember设计成不能实例化的抽象类。”
    那么重载、重写和多态性有什么关系?

  • 问题2解决方案:当一个子类重载了其父类方法的定义时,实际上该方法的两个版本都存在。重写提供了多态性,因为适当的方法是根据当前被引用的对象而调用的,如果用一个多态性引用调用该方法,那么被调用方法的版本由执行方法调用的对象的类型。
    比如有一只鸟A和小鸟B,A教会了B吃饭和飞翔。
    对于飞翔,A是这样理解的,无非就是振动翅膀,而B有更深刻的理解,振动翅膀和利用好风。这样就是一个重载。B给飞翔增加了一个参数
    对于吃上,A喜欢吃虫子,B喜欢吃草,这就是重写。B重写了吃饭这个方法。
    而A和B正是多态的一个很好例子。

给大家两个参考:

重载与重写的区别
重写、覆盖、重载、多态几个概念的区别分析

代码调试中的问题和解决过程

  • 问题1:在完成PP10.1的课后练习时,我没有修改staff类直接就创建了一个接口,然后就是

  • 问题1解决方案:那接口实现多态性该怎么实现呢?
    之前是想将所有有关的含有payday方法的所有类实现接口,以达到目的,但是最后在Firm中实例化的对象只是Staff类,那我就直接改写了staff,

发现这样就可以实现多态性。(主要是课本上没有例子,所以理解的不是很清晰)

代码托管

上周考试错题总结

  • 错题1及原因,理解情况

多态性是由什么来实现的?
解析:这个题目其实上面我也有一些总结。重载只是为具有不同参数列表的方法提供了备选方案。
重写提供了多态性,因为适当的方法是根据当前被引用的对象而调用的。嵌入是类中包含的类。抽象与多态没有
任何关系。封装是使用可见性修饰符(公共的、私有的、受保护的)实现的。

  • 错题2及原因,理解情况

    Upcasting是完全安全的,它是Java支持的单一继承结构的产物。相比之下,向下转换必须由程序员显式地完成。
    Java只在一个方向上自动转换。在使用的可见性修饰符方面,Upcasting和downcasting的规则并不依赖于任何方式。

那么upcast到底是什么意思呢?

一)向上转型
(1)定义: 把对某个对象的引用视为对其基类引用的做法被称为“向上转型”。
这主要是由于子类的对象可以看成是基类的对象这原因而得来的,也就是具有is-a关系。
比如:
Useful useful = new MoreUseful();//右边是一个子类的对象,而左边是一个父类类型
//的变量,指向右边的子类对象。
(2)基类可以接收发给导出类的任何消息,因为二者有完全相同的接口,我们只需要
从导出类向上转型,永远不需要知道正在处理的对象的确切类型,这也就是多态性决
定的。利用多态性,具有同样方法名和方法特征的方法根据调用方法的对象的类型,
可以产生不同的动作,这极大地增加了程序员的表达能力。

这是一篇参考资料
java中向上转型(upcast)和向下转型(downcast)

  • 错题3及原因,理解情况

虽然继承和接口支持多态,但只有在有后期绑定时才会这样做。但是,重载是多态性一(方法)名的一种形式,多个主体,
只要程序使用重载,多态就在使用中。

  • 错题4及原因,理解情况

  • 解析:
    之前是因为认为println()方法能够处理如此广泛的对象,并正确地打印它们,这是println()方法的重载,而重载不是多
    态性的体现。其实这题会错和上一题原因是一样的。虽然继承和接口支持多态,但只有在有后期绑定时才会这样做。但是,
    重载是多态性一(方法)名的一种形式,多个主体,只要程序使用重载,多态就在使用中

结对及互评

点评:

  • 博客中值得学习的或问题:
    • 队友的教材内容总结一直都很详细,并且能够根据自己的理解举出新的例子,使自己的理解更加深刻。
    • 对于教材问题的提出和解决记录的很好,而且问题相应的得到了解决。
    • 在代码问题和教材问题的总结中有些地方有重复,可适当删减。

点评过的同学博客和代码

  • 本周结对学习情况

    • 20172309
    • 结对学习内容
      • 教材第十章——多态性的学习与问题讨论。
      • 四则运算相关知识的学习。
      • 讨论栈的用法和进行四则运算出题和计算的编程。
  • 上周博客互评情况

其他(感悟、思考等,可选)

实话觉得这周的任务量有点大,而且恰逢五一假期,之前就已经安排好了出游的计划,所以得知这周有两篇博客时,心情是有些
烦躁的。一遇到问题,就有点急,在老师上第十章的课程时,我的自主学习都没有完成。好在后来我和队友都加紧了节奏,完成
了我们的任务。学习Java需要时间,我要更好地来安排我的时间,高效的学习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 127/127 1/1 25/25
第二周 278/405 1/2 20/45
第三周 442/847 1/3 20/65
第四周 1063/1910 2/5 30/95
第五周 840/2750 1/6 27/122
第六周 631/3381 1/7 20/142
第七周 914/4295 1/8 20/162
第八周 2534/6829 2/10 30/192

参考资料

posted @ 2018-05-02 19:34  qx2017  阅读(221)  评论(4编辑  收藏  举报
页尾