OO第四次作业

  1. 前言

主要说明本次博客针对的作业情况。

第一次作业是检验前一学期的内容并熟悉JAVA语言,主要内容为选择结构、逻辑运算等。在这一部分,JAVA语言的语句与C语言别无二致。只有输入输出时,能明确显示两种语言的不同。

第二次作业为定义方法,解决问题。这一过程与C语言声明函数相同,先明确作用域、返回值类型、方法名、参数类型等,再对方法执行过程进行编程。

第三次作业为用定义类的方式解决问题。区别于面向过程编程,面向对象编程需要在一开始就明确对象的属性与功能,再据此通过定义方法将功能的逐一实现。

 

  1. 作业过程总结

①总结三次作业之间的知识迭代关系;

第一次作业主要考察算法,即底层代码的实现。将题目给的条件与计算方式转化为计算机语言,实际上是由具体对象转化为抽象代码的过程。

第二次作业将一个功能分解成多个子功能,再据第一次作业的经验编写多个方法,最后用一个主方法将其串联起来,实现最终的目标功能。相比于前一次作业的编程方式,分解目标的做法使得编程的目标更加明确,思路更清晰,效率更高。

第三次作业中引入新的概念——类,这是面向对象编程中“对象”的“模板”。与前次作业不同的是,本次作业从实际对象的功能出发,如:对于一个一元二次方程对象,它的功能是判断根的存在与否、存在数量以及求出根的值。在编写类时需要根据蓝图设置成员变量与方法,也就是前两次作业涉及的内容。

 

②如何通过作业逐步从面向过程过渡到面向对象;

面向过程编程是从底层代码开始,自下而上的编程,要过渡到面向对象编程,需从实际对象的功能出发,逐层分解成多个类,再根据各个类所需的功能编写底层代码。

 

③作业过程中遇到的问题及解决方法

  1. Eclipse中可以正常运行、且运行结果无误的代码,复制至PTA的提交框中提交后,弹出无法编译的错误提示。解决方法:去除代码顶端的包(package)语句。
  2. 在主类的主方法中调用自定义类时编译错误。解决方法:在自定义类的声明前添加static,将其设置为静态类。

3.在第三次作业的第二题中,我设计的用于求当前日期与date之间相差天数的方法 getDaysofDate实际上是用两次遍历法先算出两个日期分别与默认初始日期(即1820年1月1日)相差的天数,再取两者差的绝对值返回。在用这种方法编写求前N天日期的方法和求后N天日期的方法时,当所求的日期在默认日期之前,将出现错误。解决方法:将初始日期的年份设为-5881445,之后在闰年判断方法isLeapYear加入公元前闰年的判断算法。

4.当给定的参数N达到整型数据最大值时,求后N天日期的方法getNextNDays返回了一个数字极大的公元前日期。解决方法:将保存给定日期与默认初始日期相差天数的变量设置为长整型变量(即long型)。

 

④每次作业花费的时间比例

如果按平均一题1小时的时间算,其中只有前15分钟在完成代码,后45分钟在进行调试以满足所有目标需求。

 

⑤对编程过程的逻辑严谨性的认识及教训

  1. 当一个所给参数可能达到数据类型的范围最大或最小值时,需要用范围更大的数据类型来保存它。
  2. 定义一个类时最好给其成员变量设置一个默认值。
  3. 如果时间充裕,在完成一个底层方法的编写时,应该对其进行单独测试。
  4. 如果定义了两个名称相似,但功能完全不同的方法,在使用时需多加注意。

 

2.OO设计心得

①面向过程与面向对象的比较

在面向过程编程时,我需要想好解决问题要执行什么命令,再按顺序编写下去。而面向对象编程中,我先想好解决问题的对象是什么,有什么功能,再将其功能分配给几个方法去完成。

②面向对象设计的基本原则理解

每个类只需要做一种工作,强调分工合作。

③OO编程思维的理解

把一类具有相同属性和功能的对象抽象成计算机里的类(即对象的模板),然后把属性和方法封装进这个类中。

3.测试的理解与实践

①测试对于编码质量的重要性

编码的价值在于其实现的功能,测试的作用在于确保其功能在所有情况下能够正常实施。

②假如让你设计测试用例,你会如何做

  1. 参数范围有限制时,应有在参数范围外的测试用例。
  2. 参数范围无限制时,应有处于数据类型范围两端的测试用例。
  3. 用随机数方法在参数范围内随机取多个数据作测试用例。

4.课程收获

总结这四周来在OO方面的教训及收获

不要先编写包含子类的类,应该先编写最基本的类。

方法的名称由多个单词组成时,尽可能使有实际意义的单词首字母大写。

尽可能不要套娃。(指一个类里套子类,子类里套孙类,孙类里再套曾孙类)

5.对课程的建议

可以的话,多帮同学们看看作业里存在的问题。

posted @ 2020-04-04 16:14  fps_AAA  阅读(119)  评论(0)    收藏  举报