0.前言:本次主要是针对第三阶段的三次作业以及整个课程学习的总结,这三次作业主要是针对对程序进行重构使得程序可以对功能进行扩展的训练以及对类的设计,所以在此阐述在练习过程中的问题以及感悟。

1.作业总结

  1. 三次作业的难度相差不大,但由于这三次没有给出参考UML类图,全部类的设计都需要自己思考设计所以会比给了类图的相对麻烦一点。前两个阶段的作业主要注重基础知识的训练以及理解,如继承封装、多态以及类的聚合等等。该阶段的三次作业都是自己设计类并且对程序进行重构使得可以对功能进行扩展,加深对单一职责原则和“开-闭”原则以及对面向对象过程的理解和体会。层层深入,让我们从中学习以及理解。

  2.第一次作业的雨刷程序功能扩展设计相对比较麻烦的就是功能扩展部分,需要用到抽象、接口、继承,整个类的设计也是利用类的单一职责将每一部分封装成一个类并且继承各自的抽象类,且一个类只负责该类的职责,类与类之间的聚合来实现整个过程,加深了我对单一职责和“开-闭”原则的理解。Dial类、Lever、Brush类、Agent类各自继承自自己的抽象类,如果不用继承就会发现其实他们之间很多代码都是重复的,用了继承给他们之间建立一个联系,这样就可以减少代码的冗余,而且也能更加体现他们之间的关系,更加符合实际,且能够对功能进行扩展,需求变了只需再new一个新的Agent类就可以了,不会影响之前的需求,这就是“开-闭”原则。接下来的第二次是自己设计类实现统计Java程序中关键词的出现次数,通过这次作业加深了我对于字符串的相关方法以及知识点的学习以及运用,还有让我对于面向对象的设计有了更深的体会。第三次在第二次的基础上更加麻烦一点,需要使用堆栈以及正则表达式,用正则表达式来判断表达式的合法性,用堆栈来计算表达式的值,并且对设计做修改,将它们继承抽象类实现扩展性和复用性,这就是对修改关闭,对扩展开放的“开-闭”原则。总之,三次作业最主要的就是学会自己设计类,以及运用“开-闭”原则使程序的功能完善且实现扩展性。

  3.第一次作业的雨刷程序功能扩展设计中总是报空指针和数组越界的错误,这两个错误相信并不少见,经常都能碰见,是真的烦人。所以异常处理的优势就凸显出来了,一个异常处理就可以解决,让他遇到异常跳出继续执行下面代码,不对异常处理,可以规避很多异常情况,非常方便。

  第二次作业的统计Java程序中关键词的出现次数一开始我始终通不过全部关键字测试,后来发现我的53个关键字中有一个不是关键字,也就是关键字找错了一个才导致这个测试点过不了。还有两种注释的测试也没过,几次检查发现是少考虑了/**这种情况。最后一个正常测试到最后也过不了,目前还没发现是哪里的问题,各种测试都没有问题,但是就是过不了该测试点,很是无奈。

  第三次作业的表达式求值开始的时候堆栈使用不太好,总是报错,不然就是出现空栈的错误,一次次尝试,一次次修改,终于能够正常运行了,由于之前的多次作业都运用过正则表达式判断,所以在判断过程花费的时间不多,也相对熟练了一点,总体上也没有很大问题就写完了这次作业。

  4.三次花费时间比例为2:6:2。第二次花费时间主要是在最后一个测试点上反复修正,仍然没有发现到底问题出在哪。

  5.编程首先就得仔细看清楚需求分析,这个很有必要,看的越仔细,后期就会花更少的时间来检查这方面的问题;其次需要屡清楚你要做的是什么,怎么做,需要什么,怎么分解成一个个小问题,把这些小问题逐个封装成单独的类,再通过接口以及它们之间的联系建立相应的关系,完成初步设计,在对其针对单一职责和“开-闭”原则对设计作进一步的调整,达到复用性高,设计严谨;再者就是需要提前对异常情况做预判以及处理,亦或者规避,保障程序在任何情况都能正常运行,因为测试的工作总是巨大而且相对片面的,并不能完全检测出所有的异常情况,所以及时做一些异常处理的规避还是很有必要的。当然保证功能的完整正常还不够,还需要对程序进行改善,对功能设计分工明确,使得代码的能够实现复用性以及可扩展性,减少冗余。

2.OO设计心得

  1.每一个单独的部分通过封装成类,封装的类可以通过继承抽象类或者接口来实现多态性。多态必须要求有继承,抽象类就是为了继承而生,而它们的基础都是类的封装。

  2.单一职责原则:一个类就专注地做一件事。“开-闭”原则:对修改关闭,扩展开放,就是当某个类的方法不满足需求了,不会对其方法进行修改,而是创建一个抽象类让其继承于该抽象类,再另外写一个子类继承它来实现新的需求。

  3.面向对象的思想就是在解决问题过程中分解成一个个小问题,再把这些小问题作为一个单独的个体来对它们进行处理,它们有自己的功能和状态以及与其他个体之间的联系,然后它们之间相互作用来解决问题。这样的设计方法比较符合现实,其实每个大难题都是由一个个小问题组成的,所以只要把它们分解成小问题,再逐个解决就可以了。这也是类似的道理。

  4.类主要还是要坚持单一职责原则,一个类就干一件事,分工明确才有秩序,不会乱成一团。当然也要考虑到“开-闭”原则,增强代码复用性以及扩展性,使得设计更加灵活多变。

3.测试的理解与实践

  1.通过测试可以检查程序的功能是否能在各种状况下正常运行,保障功能正常运行,当然测试的目的并不是单纯的为了找错误,而是通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进,这样可以保障代码的质量以及程序功能的稳定。只有编码质量有保证,功能才能稳定,才能受到广大用户的好评。所以测试是保障编码质量的重要手段。

  2.使用Junit进行程序的测试是可行的,它可以通过编写一系列的测试来对项目所有的接口或者方法进行单元测试,启动后,自动化测试,并判断执行结果,

不需要人为的干预。只需要查看最后结果,就知道整个项目的方法接口是否通畅。并且各个测试之间是相互独立,互不干扰的。所以使用Junit进行测试还是一个不错的可行方法。

4.课程收获

   这三个阶段的OO编程训练,一次次的加深我对其思想和设计的理解和体会,更加理解面向对象的含义。在练习过程中也会碰到很多问题,逐步认识到自己的不足

。学习到OO编程需要始终遵循单一职责原则和“开-闭”原则,这样可以更好地检查代码的错误以及使你设计的代码有更好的复用性和扩展性,减少代码冗余,保证代码的质量。测试也是不能少的,它可以帮你更加全面的检查代码功能问题,减少自己逐篇检查代码逻辑的时间和工作量。

 5.课程学习总结

  课程对每个重要的知识点进行有针对性的学习和训练,让我们在训练中学习理解,能够学以致用,更好的掌握它们。大体的知识基础有了后,接下来就是学习新的知识和进一步完善每一次设计,保证代码的扩展性和灵活性,让我们对于面向对象有了更深的理解和感悟。该门课程区别于其他课程,是一个需要日积月累的代码量堆积起来的,达到一定量才会对OO编程有更深一层的理解和感悟,光靠理论知识的堆积是远远不够的,当然也要是有质量的代码量才能够提高自己的编程水平。我们在课堂上能够学到的,学进去的也不太多,仍然需要课后的学习积累以及训练才能更好的学习该门课程。

版权声明:本文为wyb0805原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wyb0805/p/13052923.html