第六周作业

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

教材学习内容总结

  1. 多态引用在运行时才将方法调用与他的定义绑定在一起
  2. 接口是一组抽象方法,所以不能被实例化
  3. 方法的参数可以是多态的,这样使方法具备了对其参数进行控制的灵活性
  4. 不论是正常退出try块,还是因抛出一个异常而退出,都要执行finally子句
  5. 从Exception类或它的一个后继类派生一个新类,就可以定义新的异常
  6. 方法头中的throws子句必须包含本方法中没有捕获及处理的必检异常
  7. 面向对象的原则是面向对象设计的核心, 面向对象五大原则有SRP、OCP、LSP、DIP、ISP
    SRP(单一职责原则)一个设计元素只做一件事。之前一直在讨论这件事,(上帝类与小类)小类容易复用.
    高内聚低耦合:与自己无关的拿出去,使用时调用,灵活
    OCP:“Closed for Modification; Open for Extension”:对扩充开放 对修改封闭 OCP背后的机制:抽象和多态
    软件实体(类。模块。函数)应该对
    LSP:(里氏替换原则)Liskov是这个原则的提出者。理解起来就像大于5的数一定大于2,子能存在的地方父一定可以。
    DIP(依赖倒置原则)要依赖于抽象,不要依赖于具体。
    子类可以被基类替代 不能滥用继承
    ISP:(接口分隔原则)一个接口相当于剧本中的一种角色,而此角色在一个舞台上由哪一个演员来演则相当于接口的实现。因此一个接口应当简单的代表一个角色,接口隔离原则讲的就是同一个角色提供宽、窄不同的接口,以对付不同的客户端。

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

  • 问题一:接口可以继承接口和实现接口吗?
  • 问题一解决过程:接口可以继承接口,并且可以继承不只一个接口,但是不能实现接口。因为接口的成员方法都具有抽象属性,不具有方法体,无法实现继承的接口。
  • 问题二:对多态性这个概念不太理解
  • 问题二解决过程:通过在网上资料的查找,算是有了一个更加清晰的认识:多态性指的是不同的类的对象可以对同一信息进行不同的反应,信息指的是调用方法。
  • 问题三:为什么要自定义异常?
  • 问题三解决过程:我们不可能期待虚拟机自动抛出一个自定义异常,也不能期待它自动处理一个自定义异常,所以发现异常和解决和异常还是需要我们自己完成

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

  • 问题一:在运行代码时不但不成功,还跳出了其他的代码文件,报出一连串错误
  • 问题一解决过程:新建一个Project,将几个FileTest文件单独放进去运行就可以了

代码托管

上周考试课题总结

  • 错题一: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
    解析:在选择排序的每个连续过程中,都会找到未排序的最小值,并与当前数组索引交换(当前索引从0开始,一直到数组中最后一个位置)。在第一个过程中,最小的元素2与索引0交换,所以2和9交换位置。

  • 错题二: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
    解析:两种排序算法都使用两个嵌套循环,每个循环都执行大约n次,这给两者都带来了N*N或N ^ 2的复杂性。

  • 错题三: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
    解析:封装是代码部分的隔离,这样它们就不会被意外地修改;继承提供了代码重用;多态提供了一个名称和许多语义。抽象是一个有用的属性,但它不是一种机制。递归是一种控制结构,提供了不同的方式来表示循环或重复。

  • 错题四: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
    解析:虽然继承和接口支持多态性,但它们只在具有后期绑定的情况下才支持多态性。但是,重载是多态性的一种形式,一个(方法)名,多个体只要程序使用重载,多态性就在使用中。

  • 错题五:To swap the 3rd and 4th elements in the int array values, you would do:

    values[3] = values[4];

    values[4] = values[3];
    A .true
    B .false
    答案:B
    解析:此代码首先将值[4]复制到值[3]中,然后将值[3]复制到值[4]中。结果是存储在值[4]中的内容现在同时存储在值[3]和值[4]中。为了适当地执行交换,需要将第三个变量用作临时存储位置,如int temp=值[3];
    值[3]=值[4];
    值[4]=温度;
    14个

  • 错题六:Assume Exceptionname is a checked exception. If a method uses a class that can generate Exceptionname, then either the method must include try and catch statements where a catch statement catches Exceptionname, or the method header must include the statement
    A .throw Exceptionname
    B .throws Exceptioname
    C .catch Exceptionname
    D .catches Exceptionname
    E .implements Exceptionname
    答案:B
    解析:必须在某个地方捕获选中的异常,因此,如果在可能生成异常的方法中未捕获到异常,则必须将该异常抛出给任何调用该方法的对象。这是通过声明方法抛出exceptionname来实现的。

  • 错题七:A processing stream is a data stream that
    A .can manage both input streams and output streams at the same time
    B .performs some manipulation or process on the data
    C .can only manage input streams
    D .operates on input and output devices but not files
    E .can manage byte streams and character streams at the same time
    答案:B
    解析:数据流表示特定的源或目标流,用于输入或输出。一个处理流就像一个数据流,其中一些额外的过程被添加到输入或输出中。例如,处理字节流可以从文件中输入所有项,并删除任何不是数字的ascii字符,以便预期为数字的输入不会引发numberformatexception。

  • 错题八:When a program terminates because a thrown exception is not handled, the program
    A .starts up again automatically
    B .opens a dialog box, which asks the user whether the program should start again, end, or enter a debugging mode
    C .saves all output to a disk file called the "runStackTrace.txt"
    D .opens a dialog box for the user to specify a disk file name, and all output is stored to that disk file
    E .outputs a message indicating what and where the exception was thrown
    答案:E
    解析:如果在程序中的任何地方未捕获抛出的异常,程序将终止,并显示运行堆栈跟踪的内容。运行堆栈跟踪上的第一个项是抛出的异常及其抛出位置(引发异常的类的方法的行号)。

结对及互评

  • 博客中值得学习的或问题
    排版清晰简洁,但是这次相对缺乏一些自己的理解
  • 基于评分标准,我给本博客打分:15分 得分情况如下:
    1.正确使用Markdown语法(加1分)
    2.模板中的要素齐全(加1分)
    3.教材学习中的问题和解决过程(加2分)
    4.代码调试中的问题和解决过程(加3分)
    5.感想,体会不假大空(加1分)
    6.排版精美(加1分)
    7.进度条中记录学习时间与改进情况(加1分)
    8.有动手写新代码(加1分)
    9.错题学习深入(加1分)
    10.点评认真,能指出博客和代码中的问题(加1分)
    11.结对学习情况真实可信(加1分)
    12.本周有效代码超过300分行(加2分)

点评过的同学博客和代码

  • 本周结对学习情况
    20182306
  • 结对学习内容:
    接口实现多态
    通过继承实现多态
    异常与异常处理

感悟

这一周学习感觉略显吃力,尤其是进行了一次期中测试,让我认识到自己还有更多的不足,尤其是对代码的理解,不够深入,不能够活学活用,要多多注意

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 171/171 2/2 20/20
第二三周 415/586 3/5 42/62
第四周 587/1173 2/7 22/84
第五周 1706/2879 2/9 19/103
第六周 547/3426 2/11 21/124

参考资料

posted on 2019-10-15 22:50  20182313-刘尧  阅读(242)  评论(1编辑  收藏  举报