20172321 2017-2018-2 《程序设计与数据结构》第8周学习总结
20172321 2017-2018-2 《程序设计与数据结构》第8周学习总结
教材学习内容总结
- 后绑定
- 多态性引用能够随时间变化指向不同类型的对象。
- 对于多态性引用,方法调用与方法定义代码的绑定在运行时执行。
- 后绑定效率低于编译阶段的绑定效率,但更加灵活。
- 由继承实现的多态性
- 一个引用变量可以指向有继承关系的任何类的任何对象。
- 实际调用的方法版本取决于对象的类型而不是应用变量的类型。
- 利用接口实现多态性
- 接口名可以用于声明对象引用变量。
- 一个接口引用变量可以指向实现该接口的任何类的任何对象。
- 排序
- 以多态性方法实现的排列算法可对任何一组可比较的对象排序。
- 选择法排序:通过相继地将各值放在自己的最终位置来实现数值的有序排列。
- 插入法排序:不断地将一个新元素插入到以排列好的数列子集中。
- 两种方法效率相同,都是n^2阶算法,但选择法优于插入法。
- 搜索
- 线性搜索:从数列的起点开始,将目标元素依次与每一个值比较,找到目标元素。
- 二分搜索:二分搜索是从有序数列的中点开始搜索(二分搜索要求数据已做过排序)
教材学习中的问题和解决过程
- 问题1:我在自己看书学习多态性的时候总是觉得不可理解,很是迷惑。
- 问题1解决方案:我在网上找了一个比较通俗的例子
现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
在配合书上的例子和讲解,最后又有王老师的讲解,算是大致明白了。 - 问题2:在开始看书学习二分搜索法的时候,看到书上给的示例,发现如果要搜索的元素个数为偶数的话,就会有两个中点值的情况,那么这个时候要取哪个点为中点呢?当时不是很理解书上想要表达的意思。
- 问题2解决方案:王老师在上课的时候对这个问题进行了详细的解答,因为是取中点,所以对两个数取平均值在进行类型转换转换为int行,这时候小数部分就被忽略掉了,这也就是书上所说的取两个中点的第一个为新的中点。
- 问题3:不同排列方法是否有不同的意义
- 问题3解决方案:
- 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。
- 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短。
代码调试中的问题和解决过程
- 问题1:在完成pp10.1的时候不知道怎么用接口体现多态性。
- 问题1解决方案:最开始接口是这样的
Staff2 personnel = new Staff2()
,然后在课代表的提醒下改成了Payable personnel = new Staff2()
以体现多态性。 - 问题2:pp10.5还是有点东西的,比较名字排序还是有点迷,我是仿造10.4章节的例题,对它的对名字排序进行了改编,然后把它直接在Moive程序里添加了。
- 问题2解决方案:这样虽然可以按要求解决问题,但是总感觉有点知其然不知其所以然的感觉,不过我觉得这样还是比较机智的,我真是个小机灵鬼儿呢。
代码托管
上周考试错题总结
-
错题1及原因,理解情况
Polymorphism is achieved by
A . overloading
B . overriding
C . embedding
D . abstraction
E . encapsulation
正确答案: B 你的答案: A
这道问题我当时确实不是很理解,应该是平时看书的时候不仔细,漏掉了一些知识点。
Overloading只是为具有不同参数列表的方法提供了替代方案。
Overriding为多态性提供了条件,因为调用适当的方法取决于当前引用的对象。
Embedding是类内部的封闭。
Abstraction与多态性无关。
Encapsulation是使用可见性修饰符(公共的,私有的,受保护的)实现的。 -
错题2及原因,理解情况
A class reference can refer to any object of any class that descends from the class.
A . true
B . false
正确答案: A 你的答案: B
我当时做得比较急,把一个引用变量可以指向有继承关系的任何类的任何对象当作了这道题,于是选了正确。 -
错题3及原因,理解情况
Can a program exhibit polymorphism if it only implements early binding?
A . Yes, because one form of polymorphism is overloading
B . No, because without late binding polymorphism cannot be supported
C . Yes, because so long as the programs uses inheritance and/or interfaces it supports polymorphism
D . Yes, because early binding has nothing to do with polymorphism
E . none of the above
正确答案: A 你的答案: B
我当时以为要实现多态性,就必须后绑定。但是后来知道,虽然继承和接口支持多态性,只有具有后绑定时,它们才支持多态性。但是,overloading是多态性的一种形式(方法)名称,所以multiple bodies只要使用overloading,多态性就在使用中。
结对及互评
点评模板:
-
博客中值得学习的或问题:
- 对错题有自己的分析总结。
- 对教材的学习很到位,找出的问题也很典型。
- 博客排版很好看。
-
代码中值得学习的或问题:
- commit提交的解释很详细,以后的查找很方便节约时间。
- 完成的编程项目思考得很认真,很到位。
-
基于评分标准,基于评分标准,我给本博客打分:14 。
得分情况如下:
- 正确使用Markdown语法(加1分)
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程, 加4分
- 代码调试中的问题和解决过程, 加4分
- 本周有效代码超过300分行,加2分
6 其他加分,加2分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
点评过的同学博客和代码
- 本周结对学习情况
- 20172324
- 结对学习内容
- 讨论了第十章遇到的各种问题。
- 对四则运算的项目进行了深入的合作探讨。
- 对编程中遇到的问题相互帮助解决。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 189/189 | 1/1 | 18/18 | |
第二周 | 250/439 | 1/2 | 21/39 | |
第三周 | 437/876 | 2/4 | 25/64 | |
第四周 | 459/1335 | 2/6 | 21/85 | |
第五周 | 547/1882 | 1/7 | 20/115 | |
第六周 | 592/2474 | 2/9 | 25/150 | |
第七周 | 782/3256 | 1/10 | 29/179 | |
第八周 | 830/4086 | 3/13 | 40/219 |