引言
随着OO第四次作业解析uml的完成,一个学期的面向对象学习也落下了帷幕。从第一单元的多项式的求导,到第二单元的电梯,再到第三单元的JML规格的理解与应用,最后到第四单元的解析UML,循序渐进,使我对java面向对象的的认识更加透彻理解更加深刻。这门课程从课上老师讲解,到上机实验和分享经验每星期交叉进行,再经过课下作业完成自己的代码、互测寻找别人的bug、修改自己的代码,这样的过程使得我一步一步更好理解课程的内容,收获颇丰。
一、架构设计
第一次作业(实现 )
类图:
度量分析:
设计思路:
新建Myclass类,存储类中的属性、方法、关联、实现接口和继承;
新建Mopration类,存储类中方法的属性;
新建Myinterclass类,存储接口中的属性、关联和继承;
新建Myassociationend类,存储关联端的对端和关联的类;
再根据传入的元素将之分类,并存到对应的数组中去,然后对分好类的元素进行相应的操作,实现UML的类解析。
bug分析:
产生bug的主要原因还是对于uml的理解不够深入,比如没有考虑到接口的属性,导致程序出错等。
还有一些细节的地方没有考虑到位,比如没有考虑到遍历的hashmap中没有元素的情况,或者存储内容时找不到对应的key值。
第二次作业(实现UML顺序图和UML状态图解析)
类图:
度量分析:
设计思路:
在原有的基础上,
新增Myinteraction类,存储顺序图的lifeline和message;
新增Mylifeline类,存储该参与对象的incomingmessage;
新增Myregion类,存储状态图的状态和迁移;
新增Mystate类,存储状态的直接后继状态;
然后进行元素的分类,最后再实现相应的uml解析函数。
bug分析:
这个单元bug比较多,
在实现UML009的有效性检查时,由于细节没有考虑清楚陷入死循环;
在实现UML008的有效性检查时,由于题目理解不到位,只会输出一组循环继承;
由于对于顺序图的参与对象的理解有问题,导致计算顺序图参与对象的个数时,多考虑了endpoint类。
二、总结自己在四个单元中架构设计及OO方法理解的演进
第一单元要完成多项式求导,目的是为了让我们学会父类的继承和接口的实现。但是我在实现的过程中并没有考虑很多,第一次作业考虑实现两个类,但主要还是面向过程的;第二次作业在第一次作业的基础上进行扩展,但是逻辑更加不清晰,也就更少考虑到面向对象了;第三次作业可以说改动很大,加入了新的递归的过程,逻辑较为清楚,但是依旧不是完美的面向对象程序。但即便如此,在这样三次作业的过程中,我逐渐体会到面向对象有趣之处,对类的继承,方法的使用有了更加深刻的理解。
第二单元要完成电梯,目的是为了让我们学习通过对象锁实现多个线程之间的同步与互斥。第一次作业的电梯很简单,也没有过多的考虑锁的使用,只是简单的套用,第二次作业的电梯复杂了很多,需要考虑一些细节的锁的使用,第三次作业的电梯非常复杂,在完成代码之后暴力修改也过了中测。这一单元的作业bug主要是由于CPU超时,显然我对于锁的理解还不是很到位但是通过几次作业我对于多线程也有了很多的了解和认识。
第三单元要根据给定的JML规格完成路线查询程序。经过这一单元的三次作业以及实验的学习,我了解并且掌握了一定的JML语法,知道JML的功能是规定方法的结果而非实现方法等。JML作为一种严谨的语言,对我们程序的实现很有帮助。
第四单元要实现UML类图、顺序图和状态图的解析。通过两次作业解析器的实现,我对于UML有了很深的了解,也加深了我对于面向对象编程的理解。在观察一个面向对象程序的时候,我们如果选择使用更加直观的类图或者顺序图或者状态图去观察,可能会有更加清晰的理解和认识。
三、总结自己在四个单元中测试理解与实践的演进
第一单元主要由于数据的复杂度比较低,通过各种情况的分析,人工造样例,人工测试,测试效率低下。
第二单元是关于多线程的问题,虽然测试数据造起来复杂,但是由于能力有限,手动投放乘电梯的人,也能找到很多bug包括很多不安全的线程、死锁等。
第三单元是线路查询程序,通过编写Junit测试数据进行测试,但是目前也只停留在最基础的阶段,更加复杂的Junit编写也不是很理解。
第四单元解析器的代码测试时,我选择自己构造UML图,然后再导出元素信息,进行测试。
四、课程收获
一学期的OO课程,对于我来说还是收获很大的。首先,我对于java语言的理解和使用有了很大的提升,然后对于面向对象的理解和使用也有了很大的进步。面向对象的思维能力,会让我在编写程序的时候,去思考整个程序的整理架构,会考虑采用继承、接口等来层次化自己的代码。然后是多线程的学习,虽然是学的最不到位的一个单元,但在这过程中,对于多线程的线程安全、同步和互斥等也有了一定的理解和认识。当然对于JML语言的学习,也使我认识规格化语言的强大之处,给出程序相应的规格能很大程度上减少代码的bug。最后一单元的uml模型,通过解析器的编写,我对于uml类图、顺序图、状态图的理解更加深刻。可以说一整个学期下来,我对于java面相队形编程的认识是质的飞跃,而且课程组对于课程的设计也很大程度上使我们的学习更加透彻更加深入。
五、改进建议
1、建议加强中测,目前中测过于简单,会导致即便过了中测,强测分可能很低。
2、课上实验可以给出一定的反馈,虽然通过实验我对于这个星期学习的东西有了一定的了解,但是没有反馈,感觉我们做的实验不知道正确性,会影响我们对于该单元的认知。
3、课上ppt内容可以更加详细一点,过于简洁的ppt看起来还是比较困难,也不是那么容易使我们看懂。