OO第四单元总结(UML图)和课程小结

第四单元总结

这一单元要求我们编写程序来解析UML类图、顺序图和状态图,在这个过程中深化对UML图的理解,对其中的各个组件更加熟悉。经过这个单元的训练,深化了我们对类图、顺序图和状态图等的理解。

第一次作业

这一单元主要是解析UML类图,并用代码来解析他们,并且根据要求来计算一些统计信息。形式上来说是实现一个类,MyUmlInteraction,其中包含各种相应的函数。

针对这次作业,我的架构设计中,将各式各类的UmlElement的各种信息都放入Map和Set容器中。将id和name作为key,将对应的类的信息作为value简历索引用于查询不同的问题和需求。由于HashMap的查询性能很有优异,这种设计的效率比较高。

由于Class和Operation等结构在逻辑上是分层次的,所以建立了相应的类将对应的信息储存在类中。这次作业总的来说,因为课程组把解析UML文件的部分已经写好了,存在相应的数据结构中了,我们可以使用这部分数据结构来对有用的信息进行读取。由于本次作业还有性能需求,采取以空间换时间的方法,将可能被查询到的数据算好后储存起来。

这次出现的bug在于我忽略了接口可以多继承。架构中我将接口和类放在一种数据结构MyClass中储存,其中只包含一个父类或父接口的属性。因此当接口出现多继承的时候程序就会算错。这一点是我之前学习中的疏忽。

第二次作业

第二次作业总的来说,增加的部分可以分为两部分,一个是对顺序图和状态图的解析和查询,另一个是对类图邮箱性的检查。

第一部分我采取的办法是和第一次作业而类似的办法,就是建立相应的类来储存对应的数据结构,由于顺序图和状态图的组件比类图要少,因此代码的编写也比较顺利。而对于类图的有效性检查,则根据需求对之前的MyClass等部分的代码进行了更新,针对重名、循环继承和重复继承的问题进行了计算和储存。

对于这次作业的bug,我发现是由于我没有很好的理解什么叫做循环继承,同时还有些时候会发生NullPointerException的问题,这是由于我的get方法前面没有先判断是否存在造成的。

对课程的总结

一个学期的OO课结束了,经过四个单元的洗礼,也初步掌握了面相对象的思想,同时对java这个语言有了一定的了解。通过运用面向对象的思想,可以更好的管理我们的代码、减少工程化时的错误,更好的编写大型项目,这一点是我体会到的面向对象思想的好处。

这四个单元中,第一个单元多项式求导任务让我们初步了解java这个语言,以及对象、方法等基本概念,多项式求导这个任务是一个精心设计的层次感很强的任务,我们在编写代码的时候不断的进行重构,在这个过程中,代码的质量和设计逐渐进步,体会到如何从实际问题中抽象出对应的类并构造相应的结构,如何去实现高内聚、低耦合等等。

第二个单元为电梯调度,第一次编写多线程的程序,如何使用thread,如何debug,同步异步控制等等。同时对于算法性能上也花费了很多心思来做。

第三个单元为JML规格,这个单元的任务主要是如何读懂规格,写好规格,同时也在这个过程中熟练了对各种容器和数据结构的运用。

第四个单元是UML模型图,比较系统的学习了类图、顺序图和时序图,可以在设计架构的阶段就将程序的结构用图的方式清晰的表现出来。

对于测试方法上来说,我也从最开始,与同学们手写测试样例,互相交换,到编写一个“测评机”来验证输入输出是否正确,到后来的运用Junit对各个模块进行隔离测试。在这个过程中让我体会到了自动化测试的优越性,能够覆盖许多手动编写测试样例无法发现的错误。同时学习了JML规格后,我也尝试了一下如何自动生成数据,不过没能成功,这一点也许以后可以再进行尝试如果根据规格检查代码的正确性。

一些小建议

1、对于JUnit部分,我觉得是一个很好的debug工具,也许可以在课上增加相应的内容,而不是让我们自学,也许可以

2、课上实验的参考答案希望可以在课后给出,这样有利于我们在课后补上自己不足的地方。

3、最后一次作业中,类需要继承的方法就比较多,checkstyle的标准中500行的限制有些严格,与同学们交流后也发现普遍存在这个问题,也许可以适当放宽一下这个限制。

 

最后,一个学期的OO课程结束了,感谢这一个学期以来老师和助教们的辛勤付出,让我在这个过程中收获了代码经验。希望这门课原来越好!

posted @ 2019-06-24 17:04  张卓1037  阅读(170)  评论(0编辑  收藏  举报