代码改变世界

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

2019-09-30 16:16  BBIowa  阅读(178)  评论(1编辑  收藏  举报

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

教材学习内容总结

1.进一步了解类与对象(类、属性、操作)。简单点理解就是好多个对象组成了一个类。
2.对于编写类的分析。(实例数据、封装、可见性修饰符、访问器和修改器)。
3.用来描述类的结构及类间的关系:UML类图。
4.方法的分析。(return语句、参数、局部数据、构造方法)。
5.软件开发的四个过程。
6.明确类和对象(对象的类命名一般是名词,类的行为一般是动词。)
7.静态变量和静态方法。(方法内的局部变量不能声明为static,静态变量可以由所有的类实例共享;静态方法可以通过类名称来调用,不必实例化类的对象。)
8.类间关系(这章主要讲了依赖关系和聚合关系。)
9.经常使用在构造方法中的this语句。
10.包含常量和抽象方法的接口(Comparable接口和Iterator接口)。

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

  • 问题1:变量的作用域是什么?

  • 解答:变量的引用范围是该变量在程序中可以引用的区域。声明在类级的实例变量,可以被类中的任何方法引用。声明在一个特定方法中的局部变量(包括形式参数),都只能被该方法引用。

  • 问题2:return语句怎么使用?为什么不能一次返回多个实际参数?

  • 解答:方法的返回值类型必须与方法声明首部中规定的返回值类型一致。当方法不返回任何值时,用void作为返回值类型。一条return语句由保留字return和后续的可选表达式组成。执行return语句时,控制立即返回到调用方法,并返回表达定义式的返回值。

  • 问题3:静态变量和静态方法有什么区别?

  • 解答:
    静态变量有两种情况:
    静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就可以直接使用
    静态变量是一个引用。这种情况比较特殊,主要问题是由于静态变量是一个对象的引用,那么必须初始化这个对象之后才能将引用指向它。
    因此如果要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
    静态方法:与类变量不同,方法(静态方法与实例方法)在内存中只有一份,无论该类有多少个实例,都共用一个方法。
    静态方法与实例方法的不同主要有:
    静态方法可以直接使用,而实例方法必须在类实例化之后通过对象来调用。

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

  • 问题1:使用IDEA输出中文为乱码。

  • 问题1解决方案:右下角选择GBK就可以正常输出中文。

  • 问题2:comparable接口的实现

  • 问题2解决方案:
    本来思路为,利用格式化将double型转化为string,接着再次转化为double型。但事实证明,本题核心还是在于实现接口,回顾书本,再结合网上。这样即可解决。

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题1:Inheritance through an extended (derived) class supports which of the following concepts?(继承通过扩展(派生)类来支持下列概念中的哪一个?)
    A.interfaces
    B.modulary
    C.information hiding
    D.code reuse(代码复用)
    E.correctness
    错误解析:通过扩展一个类并继承它,新类不需要重新实现任何继承的方法或实例数据,从而节省了程序员的工作量。因此,代码重用是重用他人代码的能力,通过扩展它来满足您的需求。通过继承父类可以大大的缩减代码的重复,对于自己选择接口类的问题,表示自己当时很迷,不知道怎么回事就选择了接口。

  • 错题2:Which of the following is true regarding Java classes?(对于Java类,下面哪个选项是正确的?)
    A.All classes must have 1 parent but may have any number of children (derived or extended) classes(所有的类都必须有一个父类,但是可能有任意数量的子类(派生的或扩展的)类。)
    B.All classes must have 1 child (derived or extended) class but may have any number of parent classes
    C.All classes must have 1 parent class and may have a single child (derived or extended) class
    D.All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes
    E.All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes
    错误解析:Java支持继承,但不支持多重继承,因此Java类可以有任意数量的子元素,但只有一个父类。此外,由于所有Java类都直接或间接地从对象类继承,所有Java类都只有一个父类。在做此题的时候,考虑了终极父类--Object类,因为它没有父类,所以选择则了E选项,但是,老师说可以把Object类看作自己是自己的父类的问题,我也表示很无奈。心疼这一分......

  • 错题3:A variable declared to be of one class can later reference an extended class of that class. This variable is known as(声明为一个类的变量稍后可以引用该类的扩展类。这个变量被称为。)
    A.protected
    B.derivable
    C.cloneable
    D.polymorphic(多态)
    E.none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class
    错误解析:术语多态意味着变量可以有多种形式。在一般情况下,Java被强烈定义为,一个变量,一旦被声明为一个类型,就永远不会改变为另一种类型。例外的是,多态变量可以是任何类型的派生类(尽管不是同时,变量可以从一种类型转换为另一种类型)。多态的问题,在看过第十章之后,明白了此题的答案,通过声明为父类的对象,就可以引用继承父类的子类的方法,这种灵活的操作就是通过继承实现的多态。

  • 错题4:In order to determine the type that a polymorphic variable refers to, the decision is made(为了确定多态变量所指的类型,做出了决策。)
    A.by the programmer at the time the program is written
    B.by the compiler at compile time
    C.by the operating system when the program is loaded into memory
    D.by the Java run-time environment at run time(通过运行时的Java运行环境。)
    E.by the user at run time

  • 错误解析:多态变量可以包含许多不同的类型,但是在程序执行之前,它不知道是哪一种类型。在引用变量时,必须做出决策。这个决策是由运行时环境根据变量的最新分配而做出的。这道题也是有关多态的问题,所以看过第十章之后,是动态绑定的问题,效率较早期绑定低,但是动态绑定,体现了多态的灵活性。

  • 错题5:Using the reserved word, super, one can(使用保留字super,可以)
    A.access a parent class'constructor(s)
    B.access a parent class'methods and instance data
    C.access a child class'constructor(s)
    D.access a child class'methods and instance data
    E.none of the above
    错误解析:保留字super提供了一种机制,用于访问父类的方法和实例数据(不管它们是否隐藏)。此外,可以使用super来访问父类的构造函数。正确答案是A和B的组合选项。

  • 错题6:If you instantiate an Abstract class, the class or object you wind up with(如果您实例化一个抽象类、类或对象会得到)
    A.is also an Abstract class
    B.is a normal class
    C.is an Interface
    D.is a reference to an Object
    E.can't exist you cannot instantiate an Abstract class(不能存在不能实例化一个抽象类)
    错误解析:您只能实例化具体的类而不是抽象类。但是您可以扩展抽象类和接口。
    抽象类其实是可以实例化的,但是他的实例化方式不是通过new方式来创建对象,而是通过父类的引用来指向子类的实例来间接地实现父类的实例化(因为子类要实例化前,一定会先实例化他的父类。这样创建了继承抽象类的子类的对象,也就把其父类(抽象类)给实例化了).但是:接口是不能被实例化的(接口压根就没有构造函数)。

  • 错题7:A derived class has access to all of the methods of the parent class, but only the protected or public instance data of the parent class.(派生类可以访问父类的所有方法,但只访问父类的受保护或公共实例数据。)
    A.true
    B.false
    错误解析:由于方法也可以声明为私有的,因此派生类无法访问任何私有方法。因此,派生类只能访问父类的受保护和公共方法和实例数据。没有看到访问所有方法,所以通过后半句就直接认为对了。

  • 错题8:If class AParentClass has a protected instance data x, and AChildClass is a derived class of AParentClass, then AChildClass can access x but can not redefine x to be a different type.(如果类AParentClass有一个受保护的实例数据x,而AChildClass是一个派生类的AParentClass,那么AChildClass可以访问x,但不能重新定义x为另一种类型。)
    A.true
    B.false

  • 错题9
    Aside from permitting inheritance, the visibility modifier protected is also used to
    A. permit access to the protected item by any class defined in the same package
    B. permit access to the protected item by any static class
    C. permit access to the protected item by any parent class
    D. ensure that the class cannot throw a NullPointerException
    E. define abstract elements of an interface
    正确答案: A 我的答案: B
    解析:受保护的可见性修饰符用于以受保护的方式控制对项目的访问。保护是访问限于当前类(如私人项目),同一包中的类或此类的扩展类。

  • 错题10
    Which of the following is an example of multiple inheritance?
    A. A computer can be a mainframe or a PC
    B. A PC can be a desktop or a laptop
    C. A laptop is both a PC and a portable device
    D. A portable device is a lightweight device
    E. Macintosh and IBM PC are both types of PCs
    正确答案: C 我的答案: E
    解析:多重继承意味着一个给定的类继承了多个父类。在上面列出的那些中,笔记本电脑继承了来自PC和便携式设备的特性。A,B和E中的答案都是单个继承的例子,其中一个班级至少有两个孩子(在A中,计算机有儿童大型机和PC,B,PC有儿童台式机和笔记本电脑,E,PC有孩子Macintosh和IBM PC)。答案D表示一个类的属性。

  • 错题11
    A variable declared to be of one class can later reference an extended class of that class. This variable is known as
    A. protected
    B. derivable
    C. closeable
    D. polymorphic
    E. none of the above, a variable declared to be of one class can never reference any other type of class, even an extended class
    正确答案: D 我的答案: A
    解析:多态意味着变量可以有多种形式。在普通情况下,Java被强烈定义,即一旦声明为某个类型的变量永远不会变为不同的类型。这是一个例外,多态变量可以是任何类型的派生类(尽管不是同时,变量可以从一种类型变为另一种类型)。

  • 错题12
    Using the reserved word, super, one can
    A. access a parent class ‘constructor(s)
    B. access a parent class ‘methods and instance data
    C. access a child class ‘constructor(s)
    D. access a child class ‘methods and instance data
    E. none of the above
    正确答案: E 我的答案: B
    解析:super保留字提供了访问父类的方法和实例数据(不管它们是否隐藏)的机制。另外,可以使用super访问父类的构造器。所以正确的答案是A和B的组合,这不是一个选项,所以正确答案是E.

  • 错题13
    Why shouldn't an abstract method be declared final?
    A. There's nothing wrong with doing so
    B. Abstract methods cannot be overridden and they must be if a concrete class ever is to be instantiated
    C. So long as the Abstract method never actually is used in by any other method, there's no problem with doing this
    D. As long as the Abstract method is declared in a Class (not an Interface), there's nothing wrong with doing this
    E. None of the above
    正确答案: B 我的答案: E
    解析:为了使抽象方法变得具体,它必须被覆盖。声明一个方法是最终的,因此不可能覆盖它。这是一个矛盾,是被禁止的。

  • 错题14
    If class AParentClass has a protected instance data x, and AChildClass is a derived class of AParentClass, then AChildClass can access x but cannot redefine x to be a different type.
    A. true
    B. false
    正确答案: B 我的答案: A
    解析:派生类可以重新定义父类的任何实例数据或方法。父类的版本现在隐藏了,但是可以通过使用super来访问,就像在super.x中一样。

  • 错题15
    Although classes can be inherited from one-another, even abstract classes, interfaces cannot be inherited.
    A. true
    B. false
    正确答案: B 我的答案: A
    解析:接口具有普通类所具有的所有继承属性。因此,您可以创建一个Interface继承层次结构,就像您可以创建一个Class继承层次结构一样。然而,你不能做的是实例化他们必须实现的接口。

结对及互评

评分标准

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

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

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

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

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

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评

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

    • 同学们已经有意识的遇见错误就截图,给后面写博客的各种方便很多,我一直忘记只能重新敲一遍。
  • 代码中值得学习的或问题:

    • 条条大路通罗马,好多同学可以曲线思维弄出代码,听他们讲解后真的很佩服。
  • 基于评分标准,我给本博客打分:11分。得分情况如下:正确使用Markdown语法+1.教材学习中的问题和解决过程+2.代码调试中的问题和解决过程+2.感想,体会不假大空+1.错题学习深入+1.点评认真,能指出博客和代码中的问题+1.结对学习情况真实可信+1.课后题有验证+1,进度条有记录+1.

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

    • 20182305
    • 结对照片
    • 结对学习内容
      1.明确类和对象(对象的类命名一般是名词,类的行为一般是动词。)
      2.静态变量和静态方法。(方法内的局部变量不能声明为static,静态变量可以由所有的类实例共享;静态方法可以通过类名称来调用,不必实例化类的对象。)
      3.类间关系(这章主要讲了依赖关系和聚合关系。)
      4.经常使用在构造方法中的this语句。
  • 上周博客互评情况

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

  • 每节课的考试让我十分吃不消,不只是英语单方面的问题,Java也有许多问题亟待解决,因为课本版本不同,找起知识点来比较麻烦。
  • 第四周过去,已经可以独立使用IDEA编写一些程序,但是仍然复杂的不会,命令字符类还很生疏,还得多看多练。
  • 在完成课后练习时甚至一度忘记git和junit的配置,只能重复配置后再git,还有UML的使用还亟待熟练。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 350/500 2/4 24/38
第三周 512/1000 3/7 22/60
第四周 1158/1300 4/9 35/90

参考资料