OO第四单元总结
一、第四次作业
1、第一次作业
类图
这一次作业主要涉及UML类图的解析,考虑到UML类图中接口和类其实行为处理方式基本类似,因此我将接口和类写在同一份代码中,唯一有区别的是在顶层有两个不同的set记录接口和类,但这次作业我有一个地方没有考虑到,就是java中是支持接口的多继承的,因此最后的结果出现了错误。
2、第二次作业
类图
本次作业在上次的基础上增加了状态图和顺序图的查询,思路是将状态图和顺序图重新进行封装,同时进行索引,但在自己进行测试的时候却始终有一个地方测试过不去,后来才发现是一个类忘记写hashCode方法导致进行建立hashSet时查询出现问题。
二、架构设计及OO方法理解
1、第一单元
第一单元是正则表达式的处理,当时初次接触OO,整体思路还是很面向程序的,主要就是通过调用java内部的包实现一开始的功能,但到后面的时候发现前面的设计几乎已经用不了了,只能一次次的重构,后来回头想如果一开始就能做好设计也不会出现这些问题,所以一个好的设计还是非常有必要的。
2、第二单元
第二单元是电梯,主要难点就是多线程的安全,需要考虑到一些变量的保护,同时在保护时也需要考虑保护的范围以免时间过长,我们也在这单元初步接触一些设计模式,本质上电梯问题就是一个生产者消费者模式,在后面的优化中我主要使用的是捎带算法以及改进的Lock算法。
3、第三单元
第三单元是jml规格化设计,但其实从我自己的角度来说并没有学到很多jml的内容,首先是对于方法的实现我基本都是通过方法名对方法进行理解而不是通过课程组下发的jml规格,一方面是因为一些复杂方法的jml规格十分晦涩难懂,另一方面也是给定一个方法需要实现的功能以及可以访问修改的对象基本已经可以对内部进行实现了,我不知道是不是因为本单元内容还是规模太小使得我没有完全理解到jml的精髓,然后就是本单元其实最后的难点也不在于设计,因为设计架构是课程组已经完成了,反而难点是最后的算法优化,我感觉这一部分其实更面向程序而不是面向对象。
4、第四单元
第四单元是UML类图的处理,感觉是对前面学到的东西的一个总结,虽然方法难度没有很大的增加,但总体的工作量有一个提升,这次的作业我已经可以进行最简单的架构设计,相比于这门课学习之前有了一定的进步。
三、收获
学习这门课的收获主要是学习了一种全新的设计模式,不同于之前面向程序的以功能为主导地位的设计,这么课程让我们可以将需求进行抽象,通过设计将需求和数据进行分离使得我们对于一些复杂问题可以有更好的解耦。同时,我们的代码能力也有了一定能力的进步,因为之前主要是通过C语言和python进行编程,有几次作业的代码量还是比较大的,让在没有接触过java的我们对于jiava的编写能力有了一定的提升。
四、建议
1、对于第三单元可以考虑进行一些改进,目前感觉并没有学到很多jml的内容
2、对于课程和上机的时间希望能够调整,有时候刚学一个内容第二天就要上机给我们的时间有点太少了