20172305 《程序设计与数据结构》第七周学习总结

20172305 2017-2018-2 《程序设计与数据结构》第七周学习总结

教材学习内容总结

本周内容主要为书的9.1-9.5的内容

  • 第九章

    1.子类和父类的关系、抽象类

    2.保留字super和可见性修饰符protected

    3.类的层次结构及继承方式

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

  • 问题1:保留字super和可见性修饰符protected

  • 问题1解决方案:针对super的作用,一直没有理解到底是什么意思,调用父类的构造方法,有什么作用,父类的构造方法内包含的参数,在子类的构造方法内去创建不也是可以的么?但是,通过在打PP9.3的例子,发现自己通过编写ReadMaterial父类和novel等五个子类的过程发现,super在实际编写过程中的简便,针对和父类构造方法中相同的参数,可以省去很大一部分去编写相关的方法,通过继承的方式就可以,而且这样的调用构造方法,省去了不少力气。很大程度上的细化了父类方法,使子类有更强的针对性。好比生物界的分类一样,把各种各样的生物分为域、界、门、纲、目、科、属、种,层层细化,域好比是最最原始的父类,不断通过继承细化父类的方法、扩充父类的方法,成为一个继承一个的子类。可见性修饰符protected是一种不同于可见性修饰符public和private的独特一种。

    • 使用super引用可以调用父类的构造方法。
    • 当一个变量或方法声明为protected可见性时,子类就可以引用它,并且使父类保持了一定的封装性。protected可见性时的封装性不如private可见性严格,但比public可见性更强。
  • 问题2:父类和子类

  • 问题2的解决方案:父类和子类的关系是一种通过继承来实现的一种更细化的子类,基于父类实现的一种“扩充”,就像我在上一个问题中说的那样,通过一个个继承的方式不断“扩充”子类使其方法不断的细化,不断的贴近具体的目标。省去了对于父类和子类的共同方法,可以避免重复。

  • 问题3:抽象类和接口

  • 问题3的解决方案:抽象类与接口的问题,理解的并不是很深刻。

    • 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
    • 不同点:抽象类可以含非抽象的方法和常量、数据。
    • 相同点:两者都不能实例化。

    问题4:类的层次结构及继承方式
    问题4的解决方案:所谓类的层次结构就是类的不断继承,不断发展,但是类的继承是单向的,所以父类是一个简单的,相同性方法的一个集合。通过一个又一个的子类不断实现具体化(终于体会到面向对象的简便)。类的继承方式,通俗点说就是用extends连接父类和子类,用于子类的继承(简简单单的一个单词就可以把有共同特征的内容仅写一遍就可以了。)

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

  • 问题1:PP9.1

  • 问题1解决方案: 这个编程项目的要求是要在第五章的Coin类上进行派生,但是对于Coin类的理解,它只不过是返回为硬币的正面或反面,但是本题的要求是要返回硬币的面值,那么“面值”究竟是什么意思?是指硬币的正面和反面,还是硬币所代表的价值。蓝墨云班课答疑内,赵乾宸同学的提问中,被判定为是正面和反面,但是我更倾向于返回的面值,所以我在继承父类方法后,进行修改父类的flip方法,进行重写方法,对于父类中原有的方法进行改写。在改写的同时我又进行了NumberFormat类的添加,使其输出的面值带有人民币符号。(可能与老师的要求有些相违背,但是在大方向上还是一致的。)

  • 问题2:PP9.3

  • 问题2解决方案:针对9.3的编写,自我感觉没有什么太大的问题,就是要编写一堆的类,通过继承达到符合题意。所以这就要在编写之前要进行伪代码的编写:
    阅读材料的共有属性:书页数、作者(主编)、书的类型等几方面。通过UML的建模,进行了简单的构图进行表示。同时,我在针对不同的子类进行了不同的方法扩充、构造方法内参数的添加,进行更具体的表述。 通过这些子类的编写,更加感受到面向对象的开发究竟是什么意思了,就像我的初中数学老师说“数学来源生活,又高于生活。”java语言是服务于人类的一种高级语言,存在的意义就是便利生活中的繁琐事情,就像这道题目一样,感觉在此基础上进行一部分的修饰和改写,就可以形成一个图书馆丛书的信息管理,通过输入输出就可以把丛书进行整理与规划。

  • books子类中进行是否带有图片或拼音,进行判断适合的人群读此书
  • magazine子类中增添杂志内文章数量的参数
  • definitions子类中增添学术刊物发表范围、学术学科,通过发行范围是国家还是全球进行判断该学术刊物的影响力及可信度、价值等
  • novel子类进行添加作者的国籍
  • textbook子类进行单元的计数、丛书适合的学习科目,什么语文、数学、自然等。
  • 用UML表述的PP9.3
  • 小说
  • 图书
  • 杂志
  • 学术刊物
  • 课本

代码托管

上周考试错题总结

  • 错题1:The "off-by-one" error associated with arrays arises because(与数组相关的“逐一个”错误出现是因为)

    • A.the first array index is 0 and programmers may start at index 1, or may use a loop that goes one index too far(数组索引是0,程序员可以从索引1开始,也可以使用一个索引过远的循环。)

    • B.the last array index is at length + 1 and loops may only iterate to length, missing one

    • C.the last array element ends at length - 1 and loops may go one too far

    • D.programmers write a loop that goes from 0 to length - 1 whereas the array actually goes from 1 to length

    • E.none of the above, the "off-by-one" error has nothing to do with arrays

    • 错误解析:数组被初始化为= new type[x],其中x是数组的大小数组内存放的长度。然而,该数组的索引为0到x - 1,因此,程序员的off-by-one的问题是因为程序员将编写代码来尝试访问索引1到x,所谓的边界检查就是数组的长度与索引值之间的差1进行的检查。

  • 错题2:if a and b are both int arrays, then a = b; will(如果a和b都是int数组,那么a = b;

    • A.create an alias(创建一个别名)

    • B.copy all elements of b into a

    • C.copy the 0th element of b into the 0th element of a

    • D.return true if each corresponding element of b is equal to each corresponding element of a (that is, a[0] is equal to b[0], a[1] is equal to b[1] and so forth) and return false otherwise

    • E.return true if a and b are aliases and return false otherwise

    • 错误解析:针对这道题,我在做的时候有点蒙,所以在百度上进行搜索,查到一个博客的内容就是针对此题的,通过对博客的快速理解,我认为我应该选择B,但是却错误了。通过解析:“=”是一个赋值运算符。如果两个变量都是原语,比左边的变量副本右边变量(如果a和b是int值,b = 5,然后将成为5)。然而,因为a和b是数组的引用变量设置为参考变量b,导致a和b都引用同一个数组在内存中,或者他们现在彼此的别名。是第三章的别名的知识点,就像书中所示图例一样,相互成为别名,指向相同的地址、相同的对象。

  • 错题3:A Java main method uses the parameter (String[ ] variable) so that a user can run the program and supply "command-line" parameters. Since the parameter is a String array, however, the user does not have to supply any parameters.(Java主方法使用参数(String[] variable),以便用户可以运行程序并提供“命令行”参数。由于参数是一个字符串数组,因此用户不必提供任何参数。)

    • A.true

    • B.false

    • 错误解析:主方法需要参数,以防程序员希望允许用户提供命令行参数。在java命令之后,在命令行输入的任何内容都将被接受为命令行参数。如果是由空格分隔的几个单词,那么每个单词都作为一个单独的字符串数组元素存储。例如,“java foo。class hi there“将在variable[0]中存储“hi”,variable[1]中存储“there”以供程序使用。

  • 错题4:So long as one is only accessing the elements of an ArrayList, its efficiency is about the same as that of an array. It's only when one begins to insert or remove elements towards the front portion of an ArrayList that its efficiency deteriorates.(要只访问ArrayList的元素,它的效率与数组的效率差不多。只有开始在ArrayList的前部分插入或移除元素时,它的效率才会恶化。)

    • A.true

    • B.false

    • 错误解析:ArrayList是作为数组实现的,只要其中一个只是访问ArrayList的元素,效率与数组的效率是一样的。但是,当对ArrayList的前部分进行插入或删除时,就会发生大量的元素复制,从而降低其效率。

  • 本章内容相对易于理解,对数组的理解掌握的也比较好,明显比上次考试考的顺手,但是也有几道题做错,说明还是有书上内容没看到位的地方。对于错误4的问题想到了ArrayList类是以数组的形式进行存储的,但是对于“效率”的问题就没有意识上去,还是自己仅仅局限于表面,没有细探究其中内容导致的。

结对与互评

点评(方艺雯)

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

    • 问题和详细的解答、同时在博客开头位置进行了各种的概念的解释,有助于对本章的理解。
    • 截图特别详细,但是很少见到用IDEA进行的截图,所以建议下次使用IDEA,你会发现那个会好用的。
    • 博客排版仍相对单调,方艺雯--<span style="color:颜色">方艺雯--<font face="STCAIYUN">都可以成为增添博客亮点的方式
  • 代码中值得学习的或问题:

    • commit的提交粒度详细,会一直向你学习的。
    • 代码写的规范、而且针对错误代码有深刻的认识和独到的理解,特别是虚拟机和IDEA 之间的运行同种代码出现的“\t”问题。
  • 基于评分标准,我给本博客打分:15分。

  • 得分情况如下: - 正确使用Markdown语法(加1分)

    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 五个问题加5分
    • 代码调试中的问题和解决过程, 四个问题加4分
    • 感想,体会不假大空的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 代码规范加1分
    • 有动手写新代码的加1分

点评(王禹涵)

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

    • 截图不是很全面,希望下次可以改正。
    • 博客排版相对单调,与之前的风格相比,开始走下坡路(喜欢以前的风格)。
  • 代码中值得学习的或问题:

    • 建议可以更详细的写一些代码出现的问题。
    • 问题4的内容有些问题,建议修改一下。
  • 基于评分标准,我给本博客打分:9分。

  • 得分情况如下: - 正确使用Markdown语法(加1分)

    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 两个问题加2分
    • 代码调试中的问题和解决过程, 四个问题加4分
    • 感想,体会不假大空的加1分
    • 代码规范加1分

互评对象

  • 本周结对学习情况
    • 20172304方艺雯

    • 20172323王禹涵

    • 结对学习内容

      • 第九章(继承的问题)
        • 1.子类和父类的关系、抽象类

        • 2.保留字super和可见性修饰符protected

        • 3.类的层次结构及继承方式

感悟

第九章的内容是基于第四章和第七章继续讲解如何自创类、更简便的使用类,通过继承的方式,可以把相同特征的有关方法进行集中作为父类,但是通过本周的编写也发现自己在类的编写方面有很大不足,对于简单的可以很清晰编写成功,但是对于有些复杂的就不得不写写伪代码、照着书上的例子进行敲码。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 136/136 1/1 15/15
第二周 570/706 1/2 20/35
第三周 613/1319 1/3 23/58
第四周 1249/2568 1/5 30/88
第五周 904/3472 1/6 30/118
第六周 540/4012 1/7 30/118
第七周 826/4838 1/7 30/178

参考资料

posted @ 2018-04-22 15:52  三金哥  阅读(335)  评论(8编辑  收藏  举报