20182306 2019-2020-1 《数据结构与面向对象程序设计》第六周学习总结

教材学习内容总结

多态是指一个引用变量在不同时刻指向不同对象。多态实现的基础是后绑定
面向对象的原则是面向对象设计的核心, 面向对象五大原则有SRP、OCP、LSP、DIP、ISP
SRP(Single Responsibility Princple单一职责原则)一个设计元素只做一件事。之前一直在讨论这件事,(上帝类与小类)小类容易复用.
高内聚低耦合:与自己无关的拿出去,使用时调用,灵活

OCP(Open Close Princple)
“Closed for Modification; Open for Extension”:对扩充开放 对修改封闭
OCP背后的机制:抽象和多态
软件实体(类。模块。函数)应该对

LSP:(Liskov Substitution Principle 里氏替换原则)Liskov是这个原则的提出者。理解起来就像大于5的数一定大于2,子能存在的地方父一定可以。

DIP(Dependence Inversion Principle 依赖倒置原则)要依赖于抽象,不要依赖于具体。
子类可以被基类替代 不能滥用继承

ISP:(Interface Segregation Principle 接口分隔原则)一个接口相当于剧本中的一种角色,而此角色在一个舞台上由哪一个演员来演则相当于接口的实现。因此一个接口应当简单的代表一个角色,接口隔离原则讲的就是同一个角色提供宽、窄不同的接口,以对付不同的客户端。

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

  • 问题1:接口是否可以实现接口
  • 问题1解决方案:不可以,接口的成员方法具有抽象性,但不具有方法体,无法实现继承的接口。
  • 问题2:多态的实现有什么必要性
  • 问题2解决方案:有继承,有重写,还要父类引用指向子类的对象

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

  • 问题1:

  • 问题1解决方案:因为粗心没注意到文件的名称不统一

代码托管

上周考试错题总结

  • 错题1
    What does the following code do? Assume list is an array of int values, temp is some previously initialized int value, and c is an int initialized to 0.
    for (j=0; j < list.length; j++)if (list[j] < temp) c++;
    A .It finds the smallest value and stores it in temp
    B .It finds the largest value and stores it in temp
    C .It counts the number of elements equal to the smallest value in list
    D .It counts the number of elements in list that are less than temp
    E .It sorts the values in list to be in ascending order
    正确答案: D 你的答案: B
    解析:语句if(list[j]<temp)c+将列表中的每个元素与temp进行比较,并且只有当元素小于temp时才将一个元素添加到c,因此它计算列表中小于temp的元素数,将结果存储在c中。
  • 错题2
    Which of the following lists of numbers would accurately show the array {9,4,12,2,6,8,18} after the first pass through the Selection Sort algorithm?
    A .9, 4, 12, 2, 6, 8, 18
    B .4, 9, 12, 2, 6, 8, 18
    C .2, 4, 12, 9, 6, 8, 18
    D .2, 4, 6, 8, 9, 12, 18
    E .2, 4, 9, 12, 6, 8, 18
    正确答案: C 你的答案: B
    解析:在每次连续传递选择排序时,都会找到最小的未排序值,并与当前数组索引进行交换(当前索引从0开始,一直到数组中的第二个到最后一个位置)。在第一遍中,最小的元素2用索引0、SO2和9个交换位置交换。
  • 错题3
    Both the Insertion Sort and the Selection Sort algorithms have efficiencies on the order of ________ where n is the number of values in the array being sorted.
    A .n
    B .n * log n
    C .n^2
    D .n^3
    E .Insertion sort has an efficiency of n and Selection Sort has an efficiency of n^2
    正确答案: C 你的答案: B
    解析:两种排序算法都使用两个嵌套循环,每个循环执行大约n次,这两种算法的复杂度都为n*n或n^2。
  • 错题4
    What are the main programming mechanisms that constitute object-oriented programming?
    A .encapsulation, inheritance, polymorphism
    B .encapsulation, abstraction, inheritance
    C .inheritance, polymorphism, recursion
    D .polymorphism, recursion, abstraction
    E .none of the above
    正确答案: A 你的答案: C
    解析:封装是对代码部分的隔离,以便它们不会被意外地修改;继承提供代码重用;多态性提供一个名称,多个语义。抽象是一个有用的属性,但它不是一种机制。递归是一种控制结构,提供了一种表示循环或重复的不同方式。
  • 错题5
    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
    解析:虽然继承和接口支持多态性,但只有在绑定晚的情况下才支持。但是,重载是一种多态形式-一个(方法)名称,多个体-所以只要程序使用重载,多态就在使用中。
  • 错题6
    What is the efficiency of binary search?
    A .n^2
    B .n
    C .log2 n
    D .n/2
    E .none of the above
    正确答案: C 你的答案: D
    解析:通过每次比较,二进制搜索消除了大约一半的剩余数据。这一过程一直持续到查找元素被找到或所有可能的数据都被删除为止。由于有n个数据元素,所以在数据量小于一个元素之前,可以将数据减半的次数是log2n。

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分)

  2. 模板中的要素齐全(加1分)

  3. 教材学习中的问题和解决过程, 3个问题加3分

  4. 代码调试中的问题和解决过程, 2个问题加2分

  5. 本周有效代码超过300分行的(加2分)

  6. 感想,体会不假大空的加1分

  7. 排版精美的加一分

  8. 进度条中记录学习时间与改进情况的加1分

  9. 有动手写新代码的加1分

  10. 课后选择题有验证的加1分

  11. 错题学习深入的加1分

  12. 点评认真,能指出博客和代码中的问题的加1分

  13. 结对学习情况真实可信的加1分

点评模板:

  • 博客中值得学习的或问题:

    • 排版很好
  • 代码中值得学习的或问题:

    • 代码增长量多,说明结对的同学这周很努力的在学习Java,我也要努力学习Java了
    • 仓库有点混乱
  • 参考示例

点评过的同学博客和代码

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

Java的学习内容越来越多,任务量也是越来越大,我还要建设

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90
第五周 1526/2986 2/9 20/115
第六周 837/3823 2/11 20/135

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

参考资料