OO第二阶段作业总结
0.前言:本次主要是针对第二阶段的三次作业的总结,这三次作业主要是抽象、继承、多态展开的针对性练习,所以在此阐述在练习过程中的问题以及感悟。
1.作业总结
1. 三次作业的难度逐步增加,由浅及深。由继承再逐步深入到多态以及抽象类的学习。第二阶段的第一次作业的前两题还没有涉及到继承,只是加深对单一职责原则的理解和体会。第三题才开始了简单类继承的使用,让我们初步认识体会继承的实现和使用。第二次作业就在第一次作业的基础上加了多态的使用,进一步加深理解继承和体会多态的使用。第三次又在第二次的基础上增加了抽象类和接口的使用,体会抽象类和接口的实现方法和使用,以及“开–闭”原则的实现方法及其作用。层层深入,让我们从中学习以及理解。
2.第一次作业的水文校验相对比较麻烦的就是数据校验部分,需要用到正则表达式来匹配输入数据的格式,整个类的设计也是利用类的单一职责将每一部分封装成一个类,且一个类只负责该类的职责,类与类之间的聚合来实现整个过程,加深了我对单一职责的理解。后面的图形继承才开始接触继承,Circle类和Rectangle类继承Shape类,Ball类继承自Circle,Box类继承自Rectangle,如果不用继承就会发现其实他们之间很多代码都是重复的,用了继承给他们之间建立一个联系,这样就可以减少代码的冗余,而且也能更加体现他们之间的关系,更加符合实际。接下来的第二次就涉及到了多态的训练,通过这次作业让我了解到多态的作用,多态就是同一个行为表现为不同的形式或形态。比如同样是求面积,分别调用Circle、Rectangle及Triangle类,面积就不一样,需要的属性参数也不同,使得代码的灵活性也大大提高。一元多项式求导中出现了抽象类,抽象类可以让类的设计有很好的扩展性和复用性。第三次也是抽象类的使用,以及“开-闭”原则的使用,开闭原则就是不会对已有的类,设计做修改,而是将它们继承抽象类实现扩展性和复用性,这就是对修改关闭,对扩展开放。
3.第一次作业的水文校验中由于没有仔细看题,就一直漏了一个很重要的点,没有考虑到存在多余的空格。后来才发现是这个问题才一直通不过测试点,去百度了方法了解到了string.trim()方法可以去除字符串首尾多余空格。所以仔细看需求分析还是很有必要,可以减少后期的大量检查错误的时间。
蒙特卡罗方法求圆周率这题中就只是说内存超限,原因是我把new Circle放在了循环里面,跟着循环重复了多次该步骤就导致了内存超限,以后还是要多注意这一点。
第二次作业的图形继承与多态一开始我只是简单地对所有面积进行排序,而并不是题目要求的由对象面积对对象进行排序,一时之间也不理解怎么对它们进行排序,通过查阅资料发现了compare to接口可以实现对象交换,其实它是通过冒泡排序中比较固定的步骤封装成一个类演变而来实现的。一元多项式求导中出现最多的就是空指针错误,这个错误只能回到具体的代码当中才能更好地描述以及解决,对于这个问题我也描述不太出来。由于有了前两次作业的基础,第三次就会显得比较容易,基本上没有花费多久时间。
4.三次花费时间比例为5:3:2。
5.编程首先就得仔细看清楚需求分析,这个很有必要,看的越仔细,后期就会花更少的时间来检查这方面的问题;其次需要屡清楚你要做的是什么,怎么做,需要什么,怎么分解成一个个小问题,把这些小问题逐个封装成单独的类,再通过接口以及它们之间的联系建立相应的关系,完成初步设计,在对其针对单一职责和“开-闭”原则对设计作进一步的调整,达到复用性高,设计严谨;再者就是需要提前对异常情况做预判以及处理,亦或者规避,保障程序在任何情况都能正常运行,因为测试的工作总是巨大而且相对片面的,并不能完全检测出所有的异常情况,所以及时做一些异常处理的规避还是很有必要的。
2.OO设计心得
1.每一个单独的部分通过封装成类,封装的类可以通过继承抽象类或者通过接口来实现多态性。多态必须要求有继承,抽象类就是为了继承而生,而它们的基础都是类的封装。
2.单一职责原则:一个类就做一件事。“开-闭”原则:对修改关闭,扩展开放,就是一般某个类的方法不满足需求了,不会对其方法进行修改,而是对其扩展,也就是说创建一个抽象类,另外写一个子类继承它来实现新的需求。
3.面向对象的思想就是在解决问题过程中分解成一个个小问题,再把这些小问题作为一个单独的个体来对它们进行处理,它们有自己的功能和状态以及与其他个体之间的联系,然后它们之间相互作用来解决问题。这样的设计方法还是比较符合现实的,从小我们就被教育大难题都是由一个个小问题组成的,所以只要把它们分解成小问题,再逐个解决就可以解决大问题了。这也是类似的道理。
4.类主要还是要坚持单一职责原则,一个类就干一件事,分工明确才有秩序,不会乱成一团。当然也要考虑到“开-闭”原则,增强代码复用性以及扩展性,使得设计更加灵活多变。
3.测试的理解与实践
1.通过测试可以检查程序的功能是否能在各种状况下正常运行,保障功能正常运行,当然测试的目的并不是单纯的为了找错误,而是通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进,这样可以保障代码的质量以及程序功能的稳定。只有编码质量有保证,功能才能稳定,才能受到广大用户的好评。所以测试是保障编码质量的重要手段。
2.使用Junit进行程序的测试是可行的,它可以通过编写一系列的测试来对项目所有的接口或者方法进行单元测试,启动后,自动化测试,并判断执行结果, 不需要人为的干预。只需要查看最后结果,就知道整个项目的方法接口是否通畅。并且各个测试之间是相互独立,互不干扰的。所以使用Junit进行测试还是一个不错的可行方法。
4.课程收获
这四周的OO编程训练,一次次的加深我对其思想和设计的理解和体会,更加理解面向对象的含义。在练习过程中也会碰到很多问题,逐步认识到自己的不足 。学习到OO编程需要始终遵循单一职责原则和“开-闭”原则,这样可以更好地检查代码的错误以及使你设计的代码有更好的复用性和扩展性,减少代码冗余,保证代码的质量。测试也是不能少的,它可以帮你更加全面的检查代码功能问题,减少自己逐篇检查代码逻辑的时间和工作量。
5.对课程的建议
1.对于第三阶段作业的难度可以稍微提高一点,但是题量少点。
2.对于课程内容讲解方面,希望老师可以提供更多学习资源,或者分享一些查找资源的心得和经验。
6.今后学习安排
后期应该进行有针对性的学习,大体的知识基础已经有了,接下来就是学习新的知识和进一步完善每一次设计,保证代码的扩展性和灵活性。
相关文章