面向对象的第二阶段学习小结
l 前言:
相较于第一阶段来讲,第二阶段的练习明显是在向面向对象的性质靠拢。“单一职责原则”、类设计的复用性、继承与多态、接口的调用、“开-闭原则”和“依赖倒置原则”等这些具有面向对象特征的设计理念开始出现在我们的设计要求中。
l 作业过程:
1) 第一次作业开始要求我们设计的类要满足“单一职责原则”。在写第一次作业的时候通过分析UML类图可以很直观的发现这一原则,每个类的功能都不冗余。第二次作业则是要求类设计的复用性以及继承与多态的使用。第三次作业则是要求实现接口的调用、“开-闭原则”和“依赖倒置原则”。三次作业的难度循序渐进,知识点连接的也很紧密。正则表达式校验也是贯穿了整个阶段的练习。
2) 在写第一次作业的时候,那个水文设计,开始的话不能理解UML类图中的功能和实现方式,后面仔细研究了一下给的类图才对每个类的功能有了一定的认识,然后再去写代码。一开始代码写的很长,方法之间的冗余量很大,再有就是CheckData类没设计好,导致后面大改了几次,最后才满足了封装性的要求。继承和多态的话我个人感觉理解起来还是很简单的,在代码实现上也没有费什么功夫。
3) 这个阶段遇到的第一个问题就是正则表达式的书写,一开始是怎么改都达不到预期的目的,后面只能通过把复杂的表达式拆成很多简单的表达式一步一步去校验,才慢慢克服了这个问题,而且就是每次正则表达式书写都要花费大量的时间。再有就是继承和多态,我开始在把子类向上转型之后发现子类自己的方法调用不了,后面查了下书才知道要向下转型才能调用子类中没有重写的方法。还有就是工厂的概念,我之前自己看书的时候理解错了工厂的概念,然后在不能使用的时候使用了工厂,就没达到预期的目的,然后也不知道问题出在哪,然后在这个阶段的学习中我就理解了之前思想上的问题。还有就是sort方法排序的问题,我开始是准备像c++那样重写比较器的,但是Java重写比较器要先建一个类然后调用接口,我开始没有新建类就直接用接口发现不行,后面查了一些博客找到了解决方法。
4) 这个阶段的每次的作业都花了大量的时间,具体比例记不到了,反正都是花了好几天去设计和修改。感觉这个阶段的作业难度整体上要远远超过第一阶段的作业难度,花费的时间是巨大的。
5) 就第一次作业的水文测试的那题,我开始的时候就没有考虑输入的一些特殊情况,然后等把正则表达式还有一些判断方法都写好了之后发现少考虑了很多点,代码改起来就工作量就很大了。那个正则表达式写写改改了n次,有半天时间都在写正则表达式。我记得我改了几次之后有几个方法多了几十行,还没过对应的测试点,然后直接全部删掉重新写过。第一次作业就是吃了不严谨的大亏,修改调试花了大量时间,还重写了ChackData类。后面的作业就吸取了教训,没有那么草率的动手了,都是认真想过了之后再一步一步调试过去的,就基本没有大问题,一两次提交就过了。
l 设计心得:
1) 我觉得对面向对象的三大技术特性是最重要的,设计是需要满足这些特性的,这些特性服务于Java的设计原则,同时基于Java语法,是我们在设计的时候要经常去想的。
2) 单一职责原则:我认为它是Java封闭性的一种表现,类的设计要满足单一职责使代码的实现不那么冗余,使类的复用性得到体现。
“开-闭”原则:我认为“开-闭”原则是面向对象设计的一个很重要的原则,Java很多语法的都是服务于“开-闭”原则的。
3) 这一阶段主要还是体现在面向对象设计的实现上面,只有最后的那次作业有算法设计的题目。
4) 要满足面向对象的三大技术特性,同时要去援护面向对象设计的基本原则,这样的设计才能满足面向对象设计的基本要求。
l 测试的理解和实践:
1) 测试对于代码来说是至关重要的,代码功能和稳定性的检测都需要靠测试来实现。代码不仅仅要完成对需求的功能上的实现,还应该对特殊情况给予相应的处理,要能在各种情况下提供反馈,Java也提供了异常处理的类和相关的方法。我们编写代码是功能上的实现,但是功能的实用性、稳定性、还有在其他因素影响下的可执行性都需要通过测试来调试。只有能通过数据的测试,代码才算完整。
2) 是可行的,但是要自己去想一些测试点,和一些很偏的特殊情况。其实主要还是我们要去思考需求和异常的一些情况,然后去设计测试点,再用Junit去测试。
l 课程收获:
对“单一职责原则”、类设计的复用性、继承与多态、接口的调用、“开-闭原则”和“依赖倒置原则”等这些具有面向对象特征的设计理念有了一定的了解,我感觉继承和多态和接口就像打开了面向对象设计的一扇窗户一样,就是为了维护面向对象设计的原则,Java在语法上给予了大量的支持,就是我们设计思路如果是按照Java设计的原则来,Java的语法就会提供给我们一定的解决方法。
l 课程建议:
1) 我觉得难度不要一上来就搞的太高,毕竟现在没有老师的UML类图,自己光是设计就要花很多时间,然后万一设计的不好要重写那就更麻烦了。所以我感觉难度开始的时候不要太高。题量的话就也尽量不要太多,两三题我感觉差不多了。
2) 我觉得老师可以多讲一点Java的那些原则的使用示例,最好是有代码可以给我们参考。
浙公网安备 33010602011771号