OO第四次总结

Posted jy0205

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OO第四次总结相关的知识,希望对你有一定的参考价值。


写在前面

   不知不觉,难忘的OO课程就快结束了!在学习的过程中有欢笑有委屈,令人无法忘怀。现在,是时候该好好地总结一下这路走来的点点滴滴了!


一、 测试与正确性论证的效果差异

  测试代码和进行正确性都是我们这学期所完成的重点任务。从整体上来看,测试主要偏向通过实践(测试程序)去验证程序的正误,而正确性论证则是从逻辑理论上去证明程序的可行性。在一次测试中,我们首先要针对程序的具体功能和方法,去对程序的输入进行划分。然后根据划分去构造测试集,然后去比较程序的实际运行结果和期望结果,反复多次去进行验证。在测试中发现bug,要及时进行修复,做到尽可能的去覆盖所有的情况。测试不仅仅可以找到程序存在bug,还可以测试程序的效率、复杂度、可移植性等指标。而正确性论证则需要我们对类的实现有效性以及各方法的正确性进行论证,直到各个类被证明正确。在这一过程中,主要是基于类的repOk以及JSF中的各项。其通过严格的逻辑推理来证明程序实现的正确性。两者都是为了使得程序更加完善。

  那么测试和正确性论证有什么优缺点呢?

  测试的优缺点:

  优点:

  (1) 不仅可以测试程序的功能正确性,还可以在测试程序的效率等多项特性。

  (2) 不像正确性论证那样从理论上进行论证,测试从实践的角度去考量程序,往往更偏向实践。

  缺点:

  (1) 基于测试的验证往往不能完全覆盖程序的各个方面,所以测试具有局限性。也就是说,即使测试通过,程序还有可能存在那以发现的bug。

  (2) 测试过程复杂漫长,需要耗费巨大的人力物力。一个程序的测试过程所耗费的时长往往是开发的数倍。

  正确性论证的优缺点:

  优点:

  (1) 不像测试具有局限性,正确性论证可以在理论上覆盖整个程序(论证每一个类,每个方法的正确性)。

  (2) 正确性从原理层面上就有绝对的保障,而且花费的人力物力较少。

  缺点:

  (1) 只能从实现的角度去论证。即如果正确性论证只能证明你的程序实现的过程不具有问题,但是万一程序的设计本身存在问题,与所要实现的功能相悖,往往不能发现。

  (2) 对于一个实现起来比较复杂的方法(实现超过50行),我们往往很难去论证它的正确性。

  总之,这种方法都是对我们程序质量进行验证的方法,各有优缺点,没有明显的优劣之分。我们需要在不同的的情况下进行使用。


二、OCL与JSF的异同

  OCL(对象约束语言)是一种形式化语言,它用于对设计对象进行约束,主要是在UML模型中施加于模型上的约束。OCL是一种精确的,无二义性的语言。其只是一种规范说明性语言,所有有关实现的问题都不能通过OCL来进行表达。另外,它是一种类型化语言,OCL中的每一个表达式都是具有类的。但是,不能用OCL编写程序逻辑和控制流程。

  与JSF的对比

  相似的点:

  (1) 都是一种约束语言,用于对程序的设计进行约束。

  (2) 都具有统一的标准。

  不同点:

  (1) OCL语言是精确的,没有二义性,而对于同一个程序不同人可能会写出不同的JSF。即JSF具有更大的开放性。

  (2) OCL主要是对对象进行约束,JSF的则是对类和方法进行约束。

  同样的,两者各有优缺点,没有明显的优劣之分。


三、 类图、顺序图、状态图

技术分享图片

                                                                                   类图

技术分享图片

                                                                             时序图

技术分享图片

                                                                                  状态图


四、 总结整理

1. 四个单元模块知识点之间的关系

  在学习面向对象的过程中,我们主要分成了四个大的模块。

  第一个模块:

  我们学习了java中的类与对象,学习了面向对象的四大特性:抽象、继承、封装、多态。这一部分是基础,也是让我们从面向过程的设计思维向面向对象的设计模式进行过渡。

  第二个模块:

  我们学习了多线程编程,以及线程安全性。我们学会了并发编程,以及如何去管理共享资源,用多线程来提高程序的效率。

  第三个模块:

  我们学习了抽象和规格。在这一模块,主要是一些代码重构和规格化设计。

  第四个模块:

  我们学习了如何去测试和论证,根据程序的规格去测试和论证正确性。

  这四个模块是循序渐进的过程,从开发到测试和验证,我们系统性的学会了一般工程的步骤。

2. 自己的进步

  首先是学会了面向对象的程序设计方法,然后学会了多线程编程,最重要的是明白了如何去测试和验证程序。

  我觉得自己有以下的一些进步:

  1. 在学会了一些设计原则后,我的代码具有很好的模块性和可移植性。

  2. 学会了对输出进行划分,根据分类树来进行程序的测试。

  3. 学会了对共享对象进行管理,处理并发与安全。

3. 阐述自己对工程化开发的理解

  通过完成一个个小的OO工程,我对工程化开发也有了一定的认识。

  首先是开发上的问题。开发者一定要对程序进行规格化描述,这样方便测试者对于代码的测试。另外,需要遵循一定的设计原则,使得代码的可移植性高,方便重构,否则会对之后的更新完善带来不小的麻烦。

  然后是测试的问题。如何对软件进行合理有效的测试也是工程化开发的重要问题。因为,一个软件的测试所需要花费的时间往往是开发的数倍。进行高效的测试便可以大大缩短工程的时间。

4. 课程思考与建议

  关于面向对象对象这门课程,在大一时我就已经有所耳闻,原因就是它奇特的评测制度:互测。亲身感受一学期后,我也有了自己的许多看法。

  首先是作业的设置上:

  我认为OO往往是在周六甚至周日早上才发布,而周三七点便截止。在这短短的三天多的时间我们不仅需要完成OO作业还有其它的一些专业课。作业简单的话还好说,当作业难度起来之后,我们那几天都睡不好觉,即使这样也不一定可以很完美的完成作业。

  另外,我希望可以增大公测的力度,减小互测得比重。不管怎么说,公测都是最公平的,而互侧往往具有很大的主观性。这个学期的作业公测往往都弱的惊人,这就导致了许多人的投机取巧。

  对于评测上:

  关于程序功能上的bug,我认为报多少个都可以(只要不算重复的)。但是关于规格的bug,我认为应该设置一定的上限。比较JSF具有一定的主观性,往往有很大的争议。特别是可以对同一种JSF的bug报告多次,我认为及其不合理。许多人认为扣众多JSF来提高自己的排位,笔者曾有一次被扣了15个jsf。

  不管怎么说,希望OO课程可以越办越好吧!

 

以上是关于OO第四次总结的主要内容,如果未能解决你的问题,请参考以下文章

OO第四次总结

BUAA OO 第四次作业总结

OO第四次博客总结

oo第四次总结

OO第四次博客总结

OO第四次博客总结