第四周学习总结
20182313 2019-2020-1 《数据结构与面向对象程序设计》第四周学习总结
教材学习内容总结
- 可以使用compareTo方法来判定字符串之间的相对顺序
- 迭代器是一个对象,可用来处理一组相关的数据项
- UML类图有助于呈现程序中类的内容和类之间的关系
- 大多数对象含有访问方法和设值方法,允许客户按可控方式管理数据
- 聚合对象由其他对象组成,形成has-a关系
- 方法的返回值类型应该与方法头中规定的返回值类型一致
- 对象应该是封装的,以防对数据的不合适的访问
- 变量的作用域依赖于变量声明的位置,作用域决定在哪里可以使用变量
教材学习中的问题和解决过程
- 问题一:对于封装的访问器与修改器的具体使用方法不是很清楚
- 问题1解决方案:通过反复阅读课本定义并结合4.1、4.2例题进行理解后知道了set和get如何使用
- 问题二:为什么比较浮点值的相等性时要小心?
- 问题二解决方案:浮点数在内部是以二进制数保存的,所以只有当每一位都相等时,这两个数才相等,但是最好应设置一个误差值来判断两个数是否相等。
- 问题三:构造方法的问题。
- 问题三解决过程:通过阅读课本学习到构造方法是一个类的主体,主要规定了基本参数,从而使得新的对象在实例化的过程中输入相应的参数并且依次读取相应参数,而构造方法中的参数是主要数据,所以在编写时应当围绕其展开。而至于类中其他的方法,则是围绕设计需求所展开。如果需要调用其他方法的参数,可以在类首中申明或在方法中使用return语句返回该值。
代码调试过程中的问题和解决过程
- 问题一:在编写PP5.3时,根据例题的格式进行编码,创建了枚举类型,却不会根据题目具体语境进行输出
- 问题一解决方案:通过阅读课本基础定义以及参考别的同学的输出方式,大致明白了如何输出数据
- 问题二:编译出现错误,又找不到明显的语法错误
- 问题二解决方案,仔细检查发现是对象名写错了,与此类似的还有另外两道一道main写错,以及一道类名和文件名差了一个字符,都浪费了我大量的时间,此处就贴这一道以示警示。
代码托管
上周考试课题总结
- 错题一:In order to preserve encapsulation of an object, we would do all of the following except for which one?
A .Make the instance data private
B .Define the methods in the class to access and manipulate the instance data
C .Make the methods of the class public
D .Make the class final
E .All of the above preserve encapsulation
答案:D
解析:封装意味着类包含操作数据所需的数据和方法。为了正确地保留封装,实例数据不应该直接从类外部访问,因此实例数据被设为私有,并定义方法来访问和操作实例数据。此外,访问和操作实例数据的方法被公开,以便其他类可以使用该对象。保留字“最终”用于控制继承,与封装无关。 - 错题二:If a method does not have a return statement, then
A .it will produce a syntax error when compiled
B .it must be a void method
C .it can not be called from outside the class that defined the method
D .it must be defined to be a public method
E .it must be an int, double, float or String method
答案:B
解析:所有的方法都是隐含的,因此必须有一个return语句。但是,如果程序员希望编写一个不返回任何内容的方法,因此不需要返回语句,那么它必须是一个void方法(其头具有void作为其返回类型的方法)。 - 错题三:A variable whose scope is restricted to the method where it was declared is known as a(n)
A .parameter
B .global variable
C .local variable
D .public instance data
E .private instance data
答案:C
解析:局部变量是那些已被声明的方法的“局部变量”,也就是说,只能在该方法内访问。全局变量是可以从任何地方访问的变量,而参数是传递到方法中的变量。实例数据可以看作是整个对象的全局变量。 - 错题四:An example of passing message to a String where the message has a String parameter would occur in which of the following messages?
A .length
B .substring
C .equals
D .toUpperCase
E .none of the above, it is not possible to pass a String as a parameter in a message to a String
答案:C
解析:长度和ToupPARSE消息不具有参数,子串具有两个int参数。对于相等,必须将字符串作为参数传递,以便接收消息的字符串可以与作为参数传递的字符串进行比较。 - 错题五:Consider a method defined with the header: public void doublefoo(double x). Which of the following method calls is legal?
A .doublefoo(0);
B .doublefoo(0.555);
C .doublefoo(0.1 + 0.2);
D .doublefoo(0.1, 0.2);
E .all of the above are legal except for D
答案:E
解析:在a的情况下,值0(int)被加宽为double。在c的情况下,执行加法得到0.3,然后调用doublefoo。D中的参数列表是非法的,因为它包含两个双参数而不是1个。 - 错题六:The expressions that are passed to a method in an invocation are called
A .actual parameters
B .formal parameters
C .formal arguments
D .formals
E .any of the above
答案:A
解析:形式(形式参数,形式参数)是在一个方法的报头中声明的形式。实际参数(实际值、实际参数)是实际上在调用中传递给方法的表达式。 - 错题七:What happens if you declare a class constructor to have a void return type?
A .You'll likely receive a syntax error
B .The program will compile with a warning, but you'll get a runtime error
C .There's nothing wrong with declaring a constructor to be void
D .The class' default constructor will be used instead of the one you're declaring
E .None of the above
答案:A
解析:声明任何类型的构造函数甚至是无效的都是语法错误,因此会收到语法错误。 - 错题八:Formal parameters are those that appear in the method call and actual parameters are those that appear in the method header.
A .true
B .false
答案:B
解析:这个问题颠倒了这两个定义。形式参数是方法头中出现的参数,实际参数是方法调用中的参数(传递给方法的参数)。 - 错题九:The following method header definition will result in a syntax error: public void aMethod( );
A .true
B .false
答案:A
解析:实例数据对所有类的方法都是全局可用的,因此方法不需要接收它们作为参数或在本地声明它们。如果在方法内本地声明了与实例数据同名的变量,那么实例数据将在该方法中被“隐藏”,因为引用将指向局部变量。
结对及互评
- 博客中值得学习的或问题
- 对上周错题学习较为深入,在整理总结的过程中融入了自己的思考过程
- 代码书写比较规范,看起来可以说是一目了然,值得我学习
- 基于评分标准,我给本博客打分:15分 得分情况如下:
1.正确使用Markdown语法(加1分)
2.模板中的要素齐全(加1分)
3.教材学习中的问题和解决过程(加2分)
4.代码调试中的问题和解决过程(加3分)
5.感想,体会不假大空(加1分)
6.排版精美(加1分)
7.进度条中记录学习时间与改进情况(加1分)
8.有动手写新代码(加1分)
9.错题学习深入(加1分)
10.点评认真,能指出博客和代码中的问题(加1分)
11.结对学习情况真实可信(加1分)
12.本周有效代码超过300分行(加2分)
点评过的同学博客和代码
- 本周结对学习情况
20182306 - 结对学习内容:编写自定义类,绘制UML类图,共同理解各种循环的异同之处,学习封装的基本概念并做一一些浅显的实践。
感悟
这一周的学习可以说非常紧张,因为周一的实验内容比较多,没能当天完成,往回拖了两天,这就导致学习任务连的非常紧凑,压力山大,忙于打代码做实验却忘了多看一看课本上的基础知识,导致这一周的学习留下许多疑问和漏洞,这就又需要花费额外的时间来补救,下周一定要注意这个问题
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 171/171 | 2/2 | 20/20 | |
第二三周 | 415/586 | 3/5 | 42/62 | |
第四周 | 587/1173 | 2/7 | 22/84 |