JAVA课程第一单元总结

零,前言

   本次博客针对JAVA第一单元课程内容及三次作业进行总结,本单元作业对编程语言三大结构进行针对复习,并对JAVA的对象知识进行练习。现针对本单元知识进行总结。

 

一, 作业过程总结

  1. 作业知识迭代关系分析

             本单元第一次作业对编程中常见的三大结构进行复习巩固。第二次作业,在第一次三大结构的基础上,设计算法解决相应问题,对问题进行分析并通过代码实现,本次作业主要         依托三大结构进行实现,并未实际涉及对象及类的使用。主要在于算法思路的设计,同时为第三次作业提供算法思想。第三次作业在第二次作业基础之上,依托于不同类,并创建相         应对  象来解决实际问题。第三次作业由易至难,来练习对象的使用。第一题对于对象首次使用熟悉。第二题在第二次作业基础上进行相应修改,以适应本次作业要求。第二三题通过       不同 的聚合关系来熟悉类之间的关系。本次作业主要侧重类与对象的使用、构造方法的重载与使用、类间关系。由于以对类之间关系进行规定,本次作业未涉及类的具体设计操作。   2. 从面向过程过渡到面向对象过程总结

             面向过程与面向对象相比,三大结构并未改变。通过第一次作业及第二次作业进行复习。在第三次作业中对于对象进行练习。第三次作业第一题首次使用对象,用过创建对象,         并通过对象的引用来解决实际问题。在初始使用时,将类抽象看作C语言中结构体理解,将类中方法抽象为结构体内容。对于对象的创建及对象的引用均抽象为结构体的创建与使用理       解。通过阅读JAVA教材对类与对象进行理解,理解构造器及重置。理解对象创建的实际意义。在第三道题的解答中,通过层层调用加深对于面向对象概念的理解。第四题仅在第三题       基础上略加修改便可使用。

  3. 作业中主要问题

      1). 在第二次作业中,由于题目要求较为简单,仅需计算正负十天的日期,未考虑对于较大偏移情况的考虑。在第三次作业中无法计算较大偏移情况。在第三次作业中,通过第二题对            计算方法进行修改,,但由于未考虑偏移量n为整形最大值是的情况而无法对问题进行全面解决。现通过对三次修改进行论述来展示修改过程。

              第一次的方案:主要利用n天后日期的合理性的不同情况进行划分讨论,首先解决特殊的边界问题,后处理一般问题。对于日期的判断,主要判断是否到达当月末,是否到达年                                          末来划分。具体实现流程如图所示:

             

           (本流程图为闰年情况,平年同理;leapMonth数组记录闰年每个月最大天数)

              本流程缺陷:由于本流程只能对当前日期的周围进行判断,若偏移大于一个月,无法通过循环实现递减,来得到相应日期。因此不适用于第三次作业。

 

             第二次方案:受第二次作业启发,首先计算当前日期到1-1-1的天数all Day。在对总天数加减偏移量。由新得到的天数从1-1-1开始计算结果日期。计算到1-1-1的流程如图所示,                                      计算从1-1-1开始all Day天后的日期为其逆过程。

             

              (本流程图假定年份为闰年,平年同理;leapMonth数组记录闰年每个月最大天数)

               本流程缺陷:由于未考虑偏移量的最大范围情况,导致当偏移量为整形最大值时,无法准确操作。

             第三次方案:将偏移量赋值给allDay,首先判断allDay包含多少个整数年分;在此基础上判断当前日期加上剩余偏移量后是否超过一年,超过一年则在当前基础上前进一年;否则                                    对整数月进行增加;最后获得答案日期。流程图如下所示:

             

 

 

 

       2). 第三次作业第三题由于各个类之间相互嵌套,在构造器初始过程中由于参数顺序传递错误导致代码未能正常运行。通过Debug过程发现参数传递错误。

       3). 在第三次作业第二题改进方法过程中,在计算前n天日期方法中,由于未考虑清楚当减去整月的实际含义,导致最终日期错误。后将减去整月当作从月末移动至月前来解决问题。

       4). 在初始编写中由于考虑疏忽在日期回退时导致数组越界。后通过规范判断条件来阻止发生。

  4. 每次作业花费的时间比例

             第一二次作业耗时较短,第三次作业第二题由于修改算法导致耗时较长,第三题由于调用过程较复杂,出现错误未能及时发现,修改调试耗时较多。

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

            应考虑代码的普遍可用性,对于极大极小等特殊情况的判断。在条件判断时应遵循顺序判断,合理设置判断条件,进行合理分类以减少不必要的判断。缩短判断时间。对于特殊情       况寻求普适解以减少代码繁杂性。

二. OO设计心得

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

           面向过程侧重过程分析,之后通过编写函数实现相应步骤,在使用时通过依次调用函数解决问题;

面向对象侧重将问题拆分为独立的对象个体,通过建立对象来描叙相应行为。

 

  2. 面向对象设计的基本原则及OO编程思维理解

           JAVA中将一切都视为对象,通过操控对象的引用来控制对象。通过对引用进行实际操控,让引用来调控对象。

           JAVA设计的单一原则保证每一个对象只执行具体的动作,将一个复杂动作有效分解为多个简单的叠加,从而简化。

           JAVA通过过创建抽象的接口,并通过继承来对接口进行详细描述。使得问题由一般到特殊。通过接口的设计来描述不同对象之间的普遍规则,再在导出类中进行详细描述。实际代码中,只需要使用父类编写,便可省去为每一个对象编写方法,抽象化的编写是的代码具有普遍适应性,即使后期新建子类也无需做较大调整。

 

三. 测试的理解与实践

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

           通过测试可以发现代码存在的潜在问题并进行修复,由于编程中可能存在的逻辑性错误或输入错误,编译器无法识别并报错,所以需要用过系统性测试来验证整体的质量。在编写        过程中通过测试可以发现编写代码的有效范围和对于特殊问题的处理能力,有助于后期更好的修改完善代码。

  2. 对于测试用例选取的考虑

           测试用例应对临界问题进行测试,例如有效数据的最大值,最小值,边界值,常见特例等。例如对于特殊情况的考虑2020-2-29日的前后366的判断。2020-2-27日后2天的判断。对       于年末年初的判断,例如2020-12-1日后31的判断,2020-1-31日前32天的判断。

 

四. 课程收获

           本单元首次接触JAVA编程,首次接触面向对象编程的理念。了解到面向对象编程的基础知识,通过作业进行练习掌握。在作业中认识到对于问题的全面分析,对于特殊问题的处理        的重要性。在之后学习中应加强逻辑分析处理,合理规划条件层次,减少不必要操作,通过抽象过程来增强对于普遍问题的处理。

 

五. 对课程的建议

           MOOC视频大多只对概念进行简答论述,简单示范。相比阅读相应参考书籍,未能有较清晰认知。望丰富MOOC内容,能在课前有较为系统性认知。或鼓励自我阅读学习。

posted on 2020-03-31 15:08  -王宇轩-  阅读(137)  评论(0)    收藏  举报