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

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

教材学习内容总结

  • 一、继承
    继承是从已有类派生一个新类的过程
    继承的目的之一是复用已有的软件
    继承在父类与子类之间创建了is-a的关系
    类的继承格式
    class 父类{};
    class 子类 extends 父类{};
    interface 父类{};
    class 子类 implements 父类{};
    super和this
    super:能够经过super来实现对父类的访问,用来引用当前对象的父类
    this:指向本身的引用html

  • 二、抽象类的子类将对从父类继承的抽象方法提供具体定义——方法重写特殊状况
    可见性
    私有成员也被子类继承,但不能经过名字直接引用。不过能够间接引用他们。
    设计继承
    每次派生操做都应是一个is-a关系。子类应该是更具体的父类对象
    设计类层次是为了复用,或是未来能够复用
    在问题域中标出类和对象时,找出他们的共性。共性处于越高层次,越能保持一致性,进行维护。
    适当地重写方法来知足子类性能
    按需给子类添加新的变量,但不要隐藏继承的任何变量
    容许每一个类管理它本身的数据。因此使用super引用来调用构造方法,能够用它调用被重写的方法
    设计类层次来知足应用需求,须要注意未来如何使用
    即便目前并不使用,也要适当地在子类重写toString和equals这类的通常方法,以便未来派生的类不会出现问题
    使用抽象类来为类层次中的具体类指定一个公共类接口
    谨慎使用可见性修饰符,在派生类中提供不违背封装原则访问便可。java

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

  • 问题1:静态变量和静态方法有什么区别?
  • 解答:
    一、静态变量有两种状况:
    静态变量是基本数据类型,这种状况下在类的外部没必要建立该类的实例就能够直接使用
    静态变量是一个引用。这种状况比较特殊,主要问题是因为静态变量是一个对象的引用,那么必须初始化这个对象以后才能将引用指向它。
    所以若是要把一个引用定义成static的,就必须在定义的时候就对其对象进行初始化。
    二、静态方法:与类变量不一样,方法(静态方法与实例方法)在内存中只有一份,无 论该类有多少个实例,都共用一个方法。
    静态方法与实例方法的不一样主要有:
    静态方法能够直接使用,而实例方法必须在类实例化以后经过对象来调用。git

  • 问题2:迭代器
  • 问题2解决方案:
    迭代器(Iterator)
    迭代器是一种设计模式,它是一个对象,它能够遍历并选择序列中的对象,而开发人员不须要了解该序列的底层结构。迭代器一般被称为“轻量级”对象,由于建立它的代价小。Java中的Iterator功能比较简单,而且只能单向移动:使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。使用next()得到序列中的下一个元素。使用hasNext()检查序列中是否还有元素。使用remove()将迭代器新返回的元素删除。程序员

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

  • 问题一:凯撒密码的程序须要在主函数带参运行。
  • 问题一解决方法:换位思考,编了个test程序验证。算法

  • 问题二:加密(解密)算法与加密(解密)密钥有什么区别
  • 问题二解决方法::密钥使用的背景是开放式环境,也就是说,若算法公开,解密的关键就在于双方使用相同或对称的密钥。简单来讲,密钥是一种参数(它是在明文转换为密文或将密文转换为明文的算法中输入的数据)
    加密算法是明文转换成密文的变换函数,是算法。设计模式

  • 问题三:在System.out.println()中想要打印字符型,可是却打印出了它的ASCII码值。
  • 问题三解决办法:使用String.valueOf('字符')的方法,就能将字符型以字符串形式返回。数据结构

    代码托管

上周考试错题总结

  • 错题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
    错误解析:经过扩展一个类并继承它,新类不须要从新实现任何继承的方法或实例数据,从而节省了程序员的工做量。所以,代码重用是重用他人代码的能力,经过扩展它来知足您的需求。经过继承父类能够大大的缩减代码的重复,对于本身选择接口类的问题,表示本身当时很迷,不知道怎么回事就选择了接口。ide

  • 错题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
    解析:受保护的可见性修饰符用于以受保护的方式控制对项目的访问。保护是访问限于当前类(如私人项目),同一包中的类或此类的扩展类。

结对及互评

评分标准

  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.

  • 本周结对学习状况
  • 上周博客互评状况

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

  • 每节课的考试让我十分吃不消,不仅是英语单方面的问题,Java也有许多问题亟待解决,由于课本版本不一样,找起知识点来比较麻烦。
  • 国庆在无尽的代码实验中抽空看了阅兵,感受祖国强大了,我打代码也有信心了。这个国庆打了前面几周代码量的总和,好多同窗好牛,本身好菜,各类把打好的代码推翻重来,参考别人代码改来改去把本身的程序变成了四不像,运行不了,本周更加熟悉了运行一个目的堆了四五个程序的Java常态,继续虚心学习吧。
  • 实验做业愈来愈难,我愈来愈菜,随时gg。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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
第五周 2905/3000 4/5 24/24

参考资料

相关文章
相关标签/搜索