20182316胡泊 第5周学习总结

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

教材学习内容总结

第八章:继承

定义:是从已有的类派生出一个新的类的过程。
目的:复用已有的转件,比从零开始更快、更容易、也更经济。

  • 原有类成为父类、基类或超类,派生的类成为子类。
  • 在uml图中,用空箭头由子类指向父类。
    关系:is-a关系。

protected修饰符:

  • 前提:父类中任何的共有变量和方法,都可在子类中显示的通过子类的对象名来访问,而父类中私有的变量却不能在子类中访问,由此产生了一个矛盾:想要访问就要设置为共有,但共有又破坏了父类的封装性。
  • 保护可见性:可以访问,但同时保留了一部分封装性。
  • 构造方法不能继承,是一种特殊的方法,用来创建某个类型的对象。

super引用:

  • 用在一个类中,用来指向他的父类
  • 可用super引用来调用父类的构造方法
  • 为什么要用super来调用父类的构造方法
    • 子类构造方法要做的事有一部分已经存在于父类的构造方法了
    • 秉着每个类只对自己负责的态度,尽量不要让父类与子类存在相同的变量。
      方法的重写(覆盖)
  • 条件
    • 在具有父子关系的两个类中
    • 父类和子类都定义了一个相同的方法(返回值类型、函数名、参数列表完全相同)
      类的层次
  • 公共特性应该放在类层次中尽可能高的位置上。
    Object类
  • Object类:所有类的父类,定义在java.long包中。
 String toString()

 boolean equals(Object obj)
 
 Object clone    //创建并返回这个对象的副本
  • 当类中定义了toString或equals方法时,实际上是重写了方法。
    抽象类
  • 定义:抽象类中含有能被后代继承的描述(含有一些没有定义的方法)
  • 特征:
    • 抽象类不能被实例化
    • 在类的头部包含abstract修饰符(由抽象方法的类一定要声明abstract,而声明了abstract的类,不一定要含有抽象方法。
      可见性
  • 间接引用私有成员
  • 私有成员也被继承,但是无法通过名字直接引用。
  • 方法:不添加具体的功能或数据,通过在构造方法中使用super引用来调用父类的构造方法,没有创建父类的对象。

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

1.什么是静态方法
静态方法可以通过类名来调用,不需要为了调用方法而实例化一个对象。

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

  • 问题1:在编写继承类的题目时,运行驱动程序后,发现参数没有传过来,结果为0。

  • 问题1解决方法:在Basketball类中,实例化一个整形数,然后接收传过来的参数,就可以正常使用了。

  • 问题2:编写书上程序5.5 FlipRace时,发现会随机出现无线循环TAILS的结果

  • 问题2解决方法:发现硬币结果并没有每次都随机,而是只有第一次随机了,将coin.flip放进循环体内,让他每次都随机。

  • 问题3:在写书上的程序5.11 RationalNumber 时,发现原程序在处理分母为0的分数时,只是将分母赋值为1,并没有进行报错处理。

  • 问题3解决方案:增加了一个getreal方法,来得到denom的值,并在驱动程序中加入了判断语句,来纠错。

代码托管

上周考试错题总结

  • 问题1:Which of the following reserved words in Java is used to create an instance of a class?
    A.class
    B.public
    C.public or private, either could be used
    D.import
    E.new

  • 解析:保留字“new”用于实例化一个对象,声明new后面跟着的是类名,这就是类的构造方法。如
    Car x = new Car( );
    将会实例化一个car类,并赋予一个变量X。

  • 问题2:A class' constructor usually defines(一个类的构造函数通常定义:)
    A.how an object is initialized(对象如何初始化)
    B.how an object is interfaced(对象是如何交互的)
    C.the number of instance data in the class(类中的实例数据)
    D.the number of methods in the class(类中的方法)
    E.if the instance data are accessible outside of the object directly(实例数据是否能被类外部的对象直接引用)

  • 解析:构造函数(constructor)是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。

  • 问题3:Instance data for a Java class
    A.are limited to primitive types (e.g., int, float, char)
    B.are limited to Strings
    C.are limited to objects(e.g., Strings, classes defined by other programmers)
    D.may be primitive types or objects, but objects must be defined to be private
    E.may be primitive types or objects

  • 解析:实例数据是组成类的实体,它可以是任何可用的类型,无论是原始的还是对象的,public型还是private型。

  • 问题4:Java methods can return only primitive types (int, double, float, char, boolean, etc).
    A.true
    B.false

  • 解析:Java方法同样可以返回一个对象,如字符串String。

  • 问题5:Formal parameters are those that appear in the method call and actual parameters are those that appear in the method header. (形式参数是在方法调用中出现的参数,实际参数是在方法头中出现的参数。)
    A.true
    B.false

  • 解析:实际参数是在方法调用中出现的参数,形式参数是在方法头中出现的参数。

  • 问题6:All Java classes must contain a main method which is the first method executed when the Java class is called upon.(所有的Java类都必须包含一个main方法,这是在调用Java类时执行的第一个方法。)
    A.true
    B.false

  • 解析:只有驱动程序需要一个main方法。驱动程序是在任何Java程序中首先执行的,但是它可以根据需要调用其他类,而这些其他类不需要main方法。

  • 问题7:Every class definition must include a constructor.
    A.true
    B.false

  • 解析:Java允许在没有构造函数的情况下定义类,然而,在这种情况下,有一个默认的构造函数。

  • 问题8:During program development, software requirements specify
    A.how the program will accomplish the task
    B.what the task is that the program must perform
    C.how to divide the task into subtasks
    D.how to test the program when it is done
    E.all of the above

  • 解析:软件需求指定了程序必须完成的功能,指明了程序应当执行的任务,而不是描述如何执行所规定的任务。通常,任务需求用一个称为功能说明的文档来描述。

  • 问题9:An object that refers to part of itself within its own methods can use which of the following reserved words to denote this relationship?(一个在自己的方法中引用自身部分的对象可以使用下列保留的词语来表示这种关系?)
    A.inner
    B.i
    C.private
    D.this
    E.static

  • 解析: this引用允许对象引用自己。非静态方法需要通过具体的对象和类来引用,this引用可用于引用当前正在运行的对象。

  • 问题10:Inheritance through an extended (derived) class supports which of the following concepts?
    A.interfaces
    B.modulary
    C.information hiding
    D.code reuse
    E.correctness

  • 解析:通过延长一个类并继承它,新类不必重新实现任何继承的方法或实例数据,从而为程序员节省了一项工作。因此,代码复用是通过将其扩展为需要而复用其他人的代码的能力

  • 问题11:Java does not support multiple inheritance, but some of the abilities of multiple inheritance are available by
    A.importing classes
    B.implementing interfaces
    C.overriding parent class methods
    D.creating aliases
    E.using public rather than protected or private modifiers

  • 解析:由于类可以实现任意数量的接口,所以该类本质上是使用接口类,就好像这些接口是在该类中定义的那样。因此,该类继承了接口的方法和常量。此外,该类还可以扩展另一类,从而直接或间接地从多个类继承。这与多重继承并不完全相同,但它与Java的概念非常接近。

  • 问题12:The goal of testing is to
    A.ensure that the software has no errors
    B.find syntax errors
    C.find logical and run-time errors
    D.evaluate how well the software meets the original requirements
    E.give out-of-work programmers something to do

  • 解析:测试是必需的,因为所有的软件都有错误。复杂的系统在发布之前尤其需要测试。所寻找的错误类型是逻辑错误和运行时错误。所有的语法错误都将在实施过程中被识别和修复。

  • 问题13:Interface classes cannot be extended but classes that implement interfaces can be extended.(接口类不能被扩展,但是实现接口的类可以被扩展。)
    A.true
    B.false

  • 解析:任何类都可以被扩展,无论它是一个接口,还是实现一个接口,或者两者都没有。唯一的例外是,如果该类被显式地用“final”这个词进行修饰,在这种情况下,它不能被扩展。

  • 问题14:All objects implement Comparable.
    A.true
    B.false

  • 解析:可比性是一个接口,类必须定义compareTo方法,并声明它实现了可比较性。大多数类没有实现可比性。

  • 问题15:In black-box testing, the tester should already know something about how the program is implemented so that he/she can more carefully identify what portion(s) of the software are leading to errors.
    A.true
    B.false

  • 解析:如果测试人员确实知道程序是如何工作的,那么测试人员的测试用例可能是有偏见的。

结对及互评

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

    • 对上周的错题进行了仔细的更正和课后复习,我对上周考试题的复习较为草率。
    • 博客撰写详细,有理有据。
    • 在撰写博客的过程中可以加入更多自己的理解。
  • 代码中值得学习的或问题:

    • 代码风格良好,便于阅读。
  • 基于评分标准,我给本博客打分:13分。得分情况如下:

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

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程(2分)

  4. 代码调试中的问题和解决过程(2分)

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

  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分

点评过的同学博客和代码

  • 本周结对学习情况
    • 结对同学学号2332

    • 结对照片

    • 结对学习内容
      对上周及本周的考试内容进行了探讨,并通过上网查询等方式深入分析,直到将问题理解。
      一起制作博客,markdown,遇到问题相互询问,并解决。

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

  • 程序的错误有时就是很细小,但是如果找不到,就会白费大量时间在没用的地方,反复检查,但如果静下来,跳出程序,整体一步步分析,才能更快发现问题(留下心酸的泪水)。
  • 这周是国庆假期,除了玩的时间其他基本都在学java,这次的实验感觉很难,基本都在自学,对自己的自学能力以及百度能力有很大提高。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行
第一周 119/119 3/3 20/20
第二周 302/300
第三周 780/800
第四周 1500/1300
第五周 3068/2500
  • 计划学习时间:30小时

  • 实际学习时间:25小时

参考资料

原文地址:https://www.cnblogs.com/hp12138/p/11632944.html