代码改变世界

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

2019-10-07 21:05  BBIowa  阅读(239)  评论(1编辑  收藏  举报

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

教材学习内容总结

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

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

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

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

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

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

  • 错题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

参考资料