OO第一作业周期(前四周)总结

前言

   本篇博客主要针对前四周的Java的学习情况做一个总结。主要包括:

  1. 作业过程总结
  2. OO设计心得
  3. 测试的理解与实践
  4. 课程收获
  5. 对课程的建议
  6. 学习计划

作业过程总结

  1. 知识迭代关系

  第一次作业主要考察了Java的条件语句,如坐标点所在范围的判断、三角形类型的判断等;第二次作业则主要考察了Java的循环结构;第三次作业考察了Java的类。前两次作业是面向过程编程,第三次作业则由面向过程转为面向对象设计。

  1. 面向过程到面向对象

  前两次作业主要是面向过程,就是将题目解决了就可以;第三次作业通过UML图认识了类与类之间的几种关系,通过这种整体的设计达到面向对象设计。

  1. 问题及解决方法
  • 第一次作业

    • 7-4 判断三角形类型

      问题:第14个测试点(直角三角形的判断)答案错误

      解决办法:一开始考虑三角形的时候只考虑了边长为有理数的时候,没有考虑无理数,无理数在输入的时候有精度,所以在判断直角三角形的时候不能用以往的(a^2+b^2=c^2)去判断,要加上精度因素,代码为:

      if(Math.abs(a*a-b*b-c*c)<1.e-6||Math.abs(b*b-a*a-c*c)<1.e-6||Math.abs(c*c-a*a-b*b)<1.e-6)
      {
          System.out.println("Right-angled triangle");
      }
      
  • 第二次作业

    • 7-2 判断闰年及星期几

      问题:计算year-month-day0001-1-1的距离天数出错

      解决办法:由于一开始受到“历史上少了十天”这种说法的影响,在计算天数的时候减了十天,提交没过之后,就一直在犹豫减几天。最后发现不需要减十天,错误是在判断闰年的地方。

      for(i=1;i<year;i++)
      {
      	if((year%4==0&&year%100!=0)||(year%400)==0)		//把year改成i
      	{
      		days+=366;
      	}
      	else
      		days+=365;
      }
      
    • 7-4 求前n天

      问题:输出格式问题

      解决办法:题目要求的输出格式是n days ago is:年-月-日,我在n<0的时候是先把n取反后再去算结果,在输出的时候没有加"-"号,导致结果一直错误。

  • 第三次作业

    • 7-2 日期类设计

      问题:在整数型最大值测试时超时

      解决办法:在原来的基础上进行了算法的优化,把n先减小到小于366的情况。代码如下:

      while(n>=366)
      {
          if(isLeapYear(y))
          {
              y++;
              n-=366;
           }
           else
           {
               y++;
               n-=365;
           }
      }
      
  1. 时间比例

    第一次:8h;第二次:6.5h;第三次:5h

    时间比:16:13:10

  2. 认识及教训

  在编程时一定要先想好思路和方法,再去实现代码,如果一味的求快,就会出现一些低级错误,比如把i写成year、把"-"号忘掉等情况。在编程时一定要做到严谨性,这样既可以避免一些低级错误,也可以提高代码的正确性。

OO设计心得

  1. 面向过程与面向对象的比较

  目前我个人的理解是:面向过程就是单纯的把一个问题解决,而面向对象就是解决这一类的问题。当问题的要求发生改变时,面向过程的代码的复用性比较低,需要改动几乎全部的代码,而面向对象的代码的复用性很高,只需要改动一小部分代码就可以达到要求。总而言之,就是面向对象的代码的复用性比面向过程的高

  1. 面向对象设计的原则

  面向对象设计的原则就是代码要分工,不能将所要的代码都放在同一个板块,否则的话代码的复用性就十分低,只有将代码分工,各个板块的代码有自己独立的功能各个板块之间又可以相互调用。下面是百度上的:Java面向对象设计的六大原则

  1. OO编程思维的理解

OO编程最主要的方面就是将功能模块化、代码模块化。比如链表,之前一直是将每个功能都用一个函数去解决,现在会分链表->节点这种思维去设计,这就是将代码模块化。模块化最主要的体现就是有不同的类的设计,各个类之间又有紧密的联系。

测试的理解与实践

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

  一个题目需要考虑的情况往往有许多种,而人有时候考虑的情况往往不是很全,这时候就需要测试来检验代码的正确性。测试可以提高程序员的编码的质量,测试越全面,发现的漏洞可能就越多,通过不断的改进,可以提高一个人的编程水平,在编码质量上也会有巨大的提升。

  1. 设计测试用例

  测试的完整往往体现在对一个题目的不同情况是否有都有不同的测试用例。假如让我设计测试用例,我会先把题目的流程图画出来,针对不同的情况提供不同的测试有例。最后,会做一些特例的补充,比如:最大值、最小值。

课程收获

  通过这一段时间以来的学习,我对OO方面的理解也在不断提升。一开始学习OO,总是会用面向过程的思维去想问题,导致写出来的代码的复用性很低,也没有体现出OO编程的思维。但之后通过老师的讲解和作业的练习,慢慢的会用OO编程的思维去解决问题,比如链表,之前一直是将每个功能都用一个函数去解决,现在会分链表->节点这种思维去设计。这种思维的提升,对自己以后OO编程的能力会有很大的帮助。

对课程的建议

  1. 对作业(pta)的讲解:老师可以在我们做完一次作业后,提供老师自己的解题思路,这样同学们就可以发现自己与老师的思路上的差距,对自己的能力会有一定的提升。

  2. 班级可以建立一个答疑群,这样可以让同学们之间有自己的编程交流。

学习计划

  1. 提高OO编程的能力:在思维方面要逐渐从面向过程过渡到面向对象。
  2. 提高代码量:编程能力提高最好的方式就是提高代码量,在完成老师布置的作业外,可以自己找练习平台(各大OJ、牛客等)去练习。
原文地址:https://www.cnblogs.com/code-hacker/p/12635035.html