一、测试和正确性论证
两个方法各有优缺点,在我看来应当合理结合使用。
测试关注的是结果,论证关注的是过程。在测试的过程中,我们往往采用给定一些样例的形式来让程序自我运行,并判断输出的结果;准确性论证则是要求从程序员的角度出发,论证代码的合理性和正确性。二者其实也有一定的相同之处,即都需要程序员对代码运行的所有情况有一个统一的认识,并提出合理的覆盖。测试在使用时较为方便也较为直接,是很多人乐意去采用的方式,相比之下论证可能会显得没有那么一针见血。当然,真正保证代码的正确性,还是需要两者的合理结合。在写代码的过程中,并不是所有的代码都适合测试或只适合论证,而在这时如果只是机械的重复一种方法可能不会取得什么效果。根据情况做出合理判断,完成对方法的取舍,更能提高验证的效率。
在本课程中,我们也学习到了一系列测试和论证的方法,在这个过程中收获的可能不仅是那几个方法,还有一些重要的思想,这些思想也可以应用到写程序的其他环节当中。
二、OCL与JSF
通过查询资料,我也加深了对规格的了解。
而二者是有很多相似之处的。从根本上看,它们都是为了对类和方法的规范而提出的,通过一系列借用数学思想的符号,来限定类和方法的工作方式。
区别在于,OCL在设定上更加丰富,而JSF更加简单易学。
三、第十四次作业
1.类图
本次作业没有对之前的代码进行重构。
2.时序图
3.状态图
四、总结
1.关于四个模块
四个模块之间是一脉相承的,大体上可以分为两大段,前半段为一二模块,后半段为三四模块。一二模块主要在于OO程序设计的入门以及多线程的设计,这方面可能也是在本学期收获最多的,面向对象的思想看再多的介绍都是一个很虚的东西,只有练了那么几次编程才理解的透彻。三四模块主要是对开发的正确性的保证,把作业上升到了另一个高度,这也是为更好的开发而着想的吧。总体来看,课程的四个模块按照合理的顺序让我们接收了写OO代码最需要注意的一些问题,从设计上、从正确性上,其实从头到尾都是一直贯彻的,在这点看来四个模块并不割裂。
2.自己的程序
感觉对于编程能力来说,大部分其实还是在前半学期提高的,确实提高了不少,并不是掌握多少用法,可能就是那一些敲代码的感觉吧。很鲜明的例子就是,在这之前我印象当中一直认为大一下的数据结构的代码量已经挺大的了,所以在写完几次OO作业之后也甚至认为当初好像也是几百行代码的量,结果打开当时的代码,发现代码量其实很小……另外的例子就是写出租车的时候,关于图的一些算法很快就写出来了而且没什么bug,这在当时可能是做不到的吧。在OO方面,当然是最开始接触的了,包括多线程也是,这些就是增加了知识储备。感觉在很多方面理解的还不是很透彻,原因是前半学期一直因为比较菜,每次写作业都比较费力,所以学得不是特别透。
3.工程化开发
这方面的感受是,老师讲的好。至于自己的接受能力可能是另一方面了,比较有限。首先是设计方面,其实自己的设计也不太好,不过这一学期下来还是有了一些改观,今后还需努力。至于后半学期的内容,当然是很重要的,不过当下我的主要任务可能还是提高敲代码的能力。在一些基本问题上都没掌握,就提不了工程化开发了。
4.期望
其实自己的能力是有限的,也无法在技术层面为课程提出一些良好的建议。但是只有一个希望,就是在精神和心理方面上能有一些大家所期待的改善。一方面是对于一些基础比较薄弱的同学,在学期初是很困难的,可以想办法多帮帮他们,减轻他们的心理负担,这是第一个想法;其二是在指导书和issue方面,以及互测方面会出现一些大家比较常抱怨的内容,这个我觉得大家肯定也都说了。总之还是希望OO越办越好,大家多提升能力,少一些烦恼~