OO第四阶段总结

一、测试与正确性论证

程序测试是指通过编写测试样例来针对性的验证程序功能的正确性,而正确性论证则严格的多,正确性证明的基本思想是证明程序能完成预定的功能。因此,应该提供对程序功能的严格数学说明,然后根据程序代码证明程序确实能实现它的功能说明。由于测试样例对程序功能难以做到百分百覆盖,难免有点以偏概全,而正确性证明则试图通过严格的数学证明严谨的论证程序功能的正确性和可靠性,那正确性证明那么好为什么我们还要测试呢?这就有时间成本的考量,试想你写一道数学证明题要多久?自己随便找两个例子往那要证明的式子里一带,发现是对的,这又要几秒钟呢?测试和正确性证明最大的差别就在这。如果你有无穷的时间,那么对每个类进行正确性证明好了,但现实是程序员编写一个程序,参与一个项目是有完整的时间规划的,哪来那么多时间进行正确性证明,这时候只能通过有限的几个样例来大概保证程序执行的可靠性。虽然测试的覆盖面不大,但往往能较大程度上保证程序的可靠性,这也是测试几乎是每个程序员必修技能的原因。

二、OCL语言与课程使用的JSF语言

OCL语言和JSF语言一样,都是约束性语言,对面向对象模型或系统中的一个或一些值进行约束,约束的形式也大体相同,都是不变式、前置条件和后置条件,两者采用的表达方式也是相似的,都是折中的采用自然语言与数学语言以期望达到逻辑严谨易于阅读的效果,二者同样都不关注一个方法或一个类的实现细节,都是宣示式语言。二者大体上是相近的,OCL语言作为UML的表达约束的语言,用途更广泛,使用更标准,JSF作为教学使用的语言,使用效果参差不齐,局限性还是比较大的。

三、UML的使用

四、总结

经过一个学期的面向对象程序设计训练,从无到有从难到易,一步一个脚印也是收获良多。从博客题目可以看到,训练分为四个阶段,循序渐进。第一阶段初识面向对象,主要是学习面向对象的设计思想,实践面向对象的程序设计方法,编写自己的第一个面向对象程序,入门面向对象;第二阶段编写较为复杂的面向对象程序,通过实现电梯系统来加深对面向对象的理解;第三个阶段就是实践多线程程序的设计方法,多线程电梯、多线程出租车,理解多线程实现的方法论;第四阶段认识面向对象程序的设计标准设计方法,从总体上把握面向对象程序的设计约束,我们为每个类配置了JSF规范,又用UML图描述了类方法之间的种种关系,从更高层次上理解了面向对象的设计理念。

四个阶段下来,自己的程序设计能力也获得了显著的提升,从原来的写一段百吧行的程序都要折腾老半天,到现在能够编写上千行的程序,十几次编程作业的积累,让自己的编程能力实现了从量变到质变的提升,能够很流畅的将自己的想法用程序实现,同时,在与BUG的艰难斗争中,自己的调试DEBUG能力也得到了很大的锻炼,懂得了单线程到多线程调试的方法。

其实,这么多次的训练都是自己折腾自己吧,并没有过多工程化的内容,在我看来,工程化更加注重的是团队合作,在这里,面向的最大对象不再是自己而是客户,如何在最短的时间内与自己的teammate更好的实现设计需求,才是工程化的最大目标,一个工程肯定不是模拟电梯、模拟出租车,而是就是你的团队写出个滴滴来,写出个电梯系统来,还要保证安全可靠,这涉及到一整套的从团队协作、任务分工、后期整合测试的程序设计体系,过于宏大,难以在教学中实践与锻炼,但写好自己的那一个功能,尽可能让自己的程序成为黑盒,将所有的接口、限制告诉自己的mate,就是对工程化最大的贡献了。

其实,这么多次训练下来,自己的能力也能获得这么大的提升,已经说明面向对象的课程体系足够完善了,从任务下发到评测再到验收查重等等,环环相扣,要说是建议的话,我觉得可以加一些团队协作的内容在里面,让同学们能够亲身体会一下在团队里编写一个程序里是怎么样的,肯定能有不一样的收获,当然,这涉及到一整套配套的课程体系设计,希望课程组能越做越好。

 

posted @ 2018-06-25 16:33  Nipo  阅读(117)  评论(0编辑  收藏  举报