20162301 张师瑜《程序设计与数据结构》第五周学习总结

时间:2023-02-21 14:34:32

20162301 2016-2017-2 《程序设计与数据结构》第5周学习总结

教材学习内容总结

第5章编写类
  • 1.再谈类与对象(类和对象的确定,分配职责)
  • 2.类的剖析(实例数据,UML类图)
  • 3.封装(可见性修饰符,访问方法和设值方法)
  • 4.方法的剖析(return语句,参数局部数据,再次讨论构造方法)
  • 5.静态类成员(静态变量,静态方法)
  • 6.类关系(依赖,同一类中各对象之间的依赖,聚合,this引用)
  • 7.方法设计(方法分解,再次讨论方法参数)
  • 8.方法重载
  • 9.测试(审核,缺陷测试,单元测试,集成测试,系统测试,测试驱动的开发)
  • 10.调试(使用print语句进行简单调试,调试概念)

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

  • 问题1:教材中所说的三个可见性修饰符(public,private,protected)的具体用法。
  • 解决方案:
    public:具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。private:访问权限仅限于类的内部,是一种封装的体现,例如,大多数成员变量都是修饰符为private的,它们不希望被其他任何外部的类访问。protected:主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西。

  • 问题2:书本P106中UML类图,书本中的解释有点模糊,看的时候没有很明白。

  • 解决方案:查看了几个对于UML类图比较详细的解释的博客。比较常用UML类图几种关系的小结 ; UML类图、关系及其JAVA代码
    在UML类图中,比较常用的几种关系有:泛化、 实现、 关联、 聚合、组合、依赖。

  • 问题3:return语句的具体用法

  • 解决方案:return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。如图所示。
    20162301 张师瑜《程序设计与数据结构》第五周学习总结

    20162301 张师瑜《程序设计与数据结构》第五周学习总结

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

  • 问题1:在学习return语句时候所写的代码错误,提示少分号(;)
  • 解决方案:for循环的循环头含有用分号分隔的三个部分,所以在我所写的for循环中,缺少了一个分号,加上即可。
    20162301 张师瑜《程序设计与数据结构》第五周学习总结

代码托管

20162301 张师瑜《程序设计与数据结构》第五周学习总结

上周考试错题总结

  • 问题1:判断:An array cannot hold object types.(数组中不能包含对象类型) (×)

  • 原因:An array can be declared to hold references to objects.(可以声明数组以保存对对象的引用)

  • 问题2:单选题:Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如我们有一个名为names的String对象数组,下面哪个for循环不能遍历数组中的每一个元素?)
    A.for(int i = 0; i < names.length; i++)
    B.for(String name : names)
    C.for(int i = 0; i < names.length(); i++)
    D.none of these will correctly process each element(以上都不能遍历)
    E.all of these will correctly process each element(以上都能遍历)

  • 原因:这道题首先排除了B(根据上周的学习内容知道:for循环体的用法),但在A和C中犹豫不决。后来询问刘伟康同学,知道了length在数组中是数组对象的属性是一个常量,和类中的length方法不一样,不需要加括号。

  • 问题3:判断:An infinite loop is not a compile-time error.(无限循环不会产生编译时错误) (√)

  • 原因:An infinite loop is usually caused by a logical error, and will not be caught by the compiler.(无限循环通常由逻辑错误引起,不会被编译器捕获。 )

  • 问题4:判断:In Java, a boolean expression is limited to having exactly 2 logical operators.(在Java中,布尔表达式中最多有两个逻辑运算符) (×)

  • 原因:A boolean expression can have any number of logical operators, so it is possible to construct sophisticated conditions using a single boolean expression.(布尔表达式可以有任意数量的逻辑运算符,因此可以使用单个布尔表达式构造复杂条件。)

  • 问题5:The ___________________ statement causes execution of a loop to stop, and the statement following the loop to be subsequently executed.(_________ 语句会导致退出循环,然后顺序执行循环后面的语句)

  • 原因:答案为break。一开始选的是continue,原因是学习书本P86时,将两者搞混。break语句使一回路停止执行,转去执行循环之后的语句。break语句是结束这次循环,不再执行该循环块或者程序块,而continue语句的作用是中断当前的这次循环,继续后面的循环。举个例子,如图所示。
    20162301 张师瑜《程序设计与数据结构》第五周学习总结
    20162301 张师瑜《程序设计与数据结构》第五周学习总结
    20162301 张师瑜《程序设计与数据结构》第五周学习总结
    20162301 张师瑜《程序设计与数据结构》第五周学习总结

  • 问题6:Suppose we wanted to process a text file called “input.txt” using the Scanner object.Which of the following lines of code correctly creates the necessary Scanner object?(假如我们想用Scanner对象处理文件名为“input.txt”的文本文件,下面哪行代码正确的创建了Scanner对象)
    A.Scanner inputFile = new Scanner(“input.txt”);
    B.Scanner inputFile = new Scanner(new InputFile(“input.txt”);
    C.Scanner inputFile = new Scanner(new File(input.txt);
    D.Scanner inputFile = new Scanner(new InputFile(input.txt);
    E.Scanner inputFile = new Scanner(new File(“input.txt”);

  • 原因:答案选择E。he Scanner constructor needs to take a reference to a File object as a parameter, so choice a, b and d are incorrect. The constructor for a File object takes in a String, so choice c is incorrect.Therefore, choice e is correct.(构造函数需要引用的文件对象作为参数,所以选择A,B和D都是不正确的。 为文件对象的构造函数将一个字符串,因此选项C是不正确的。 因此,选项E是正确的。 )

  • 问题7:输入"cd"命令并按回车键后,将会出现什么情况?
    A.从当前目录切换到根目录
    B.屏幕显示当前目录
    C.从当前目录切换为上一级目录
    D.从当前目录切换到用户主目录

  • 原因:答案为D。cd 等价于cd ~,也就是cd /home/userXXX

结对及互评

点评过的同学博客和代码

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

经过上周一周两章的挑战后,这周的一周一章相对来说要轻松一些。这周的课上,娄老师教给了我们一周学习java的时间安排。虽然这周没有完全按照这个节奏学习,但是按照这个节奏学习,周一到周五可以学习大部分内容。虽然周六上了整天的课,依旧可以完成这周的作业。这让我知道恰当的、适合的学习方法要比花大量的时间更加有效。希望自己能够在接下来的学习中,尽量按照老师所给的建议,并且结合自己的自身情况,找到适合自己的学习方法和学习节奏。另外,在这几周的考试中,我的错题数量明显增加,与优秀的同学之间差距逐渐变大。而我所错的题大部分涉及到以前的知识,这就说明我应该在平时的学习中学会“温故知新”,在掌握新知识的同时,也要对旧的知识加强记忆。在清明节的三天假期中,要在休息的同时,弥补自己在java学习上的漏洞,增强自己的实践能力,尽量跟上老师和同学的步伐。(书后PP还是先看的同学的码云!!我急需提高自己的动手写代码的能力!!)
20162301 张师瑜《程序设计与数据结构》第五周学习总结

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 57/57 1/1 24/24 绪论
第二周 338/395 1/2 18/42 数据和表达式
第三周 497/892 1/3 18/60 使用类和对象
第四周 839/1731 1/4 30/90 条件与循环
第五周 1018/2749 1/5 10/98 编写类

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:12小时

  • 实际学习时间:10小时

  • 改进情况:提高自己的学习效率,脚踏实地的学习

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料