OO之旅的终点,却是新的开始

正确性论证
说到正确性论证,可真是敲键盘到手酸。
我个人认为,正确性论证更倾向于一种理论上的推导。从设计者的角度来,一步步解释自己的设计是如何满足要求的。这个属于比较强的论证,一旦保证正确,那么在测试的时候也不会犯错。但是单独的测试属于“黑箱”操作。外界输入一个值,而程序给出反馈值或者没有。但是这个操作对于外界是不可见的,也就是说我的结论虽然正确,但是我不能保证自己的设计要求被完全满足。
如果这两种方式作比较的话,我更加倾向于单纯测试结果(基于JUnit)。因为正确性论证是一个非常繁杂的工作,需要对程序的每一个方法和类都进行剖析,虽然能够绝对保证正确性,但是效率不高。在程序设计对于结果影响不大的情况下,这么做应该是没有必要的。

OCL语言(对象约束语言)
乍看之下OCL语言其实和JSF规范长得差不多,都具有不变式以及前置,后置条件等。
【OCL是约束和查询语言
一个约束就是对一个(或部分)面向对象模型或者系统的一个或者一些值的限制。UML类图中的所有值都可以被约束,而表达这些约束的方法就是 OCL。在UML2标准中,OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。每个OCL表达式都能指出系统中的一个值或者对象。因为 OCL表达式能够求出一个系统中的任何值或者值的集合,因此它具有了和SQL同样的能力,也就是说OCL也是一种查询语言。
OCL是基于数学的,但没有使用数学符号
OCL的基础是数学中的集合论和谓词逻辑,并且它有一个形式化的数学语义,但是它并没有使用某种数学符号。因为虽然数学符号能够清晰的、无歧义的表达事物,但是只有极少的专家可以看懂。所以数学符号并不适合用于一个广泛应用的标准语言。
自然语言是最易懂的,但是它是含混不清晰的。OCL取了自然语言和数学符号的折中方案,使用普通的ASCII字符来表达数学中同样的概念。如果你不喜欢当前的OCL表达方法,OCL规范还允许你定义自己的OCL符号集,这点是可以理解的,因为OCL有一个清晰的数学语义。
强类型的语言
OCL是一个类型语言,任何表达式的值都是属于一个类型的。这个类型可以是预定义的标准类型例如Boolean或者Integer,也可以是UML图中的元素例如对象。也可以是这些元素组成的集合,例如对象的集合、包、有序集合等等。
声明式的语言
表达式仅仅描述了应该去做"什么",而不是应该"怎样"去做。因为OCL是宣言式语言,所以UML中的表达式被提升到了纯建模的领域,而不必理会实现的细节和实现的语言。】(以上内容摘自cnblogs博客园博友周金根的博文GMF:OCL(Object Constraint Language)介绍,非常感谢)
但是博文中说到OCL具有查询功能,可能我漏看了,我真的不知道该怎么去使用查询的能力……

针对第十四次作业的UML分析
以下是类图:(因为UML没法生成ArrayList类型,所以是自己写上去的)

我的这个学期的经历
本学期很明确地分为了四个模块,基本的Java语言实现以及面向对象的实际操作,多线程的实现以及线程安全,设计原则和规格化的描述,最后就是设计测试以及论证。可以看到,这是一个程序开发所要经历的步骤。除了多线程可能并不是必要的之外,程序基本上都要走规格设计=>实现=>测试和论证的过程。
从我的第一次的程序到最后所重构修改的第三次作业(可捎带电梯)来说,我觉得自己的程序设计能力得到了很大的提升。第一次的多项式作业沿袭了C语言的面向过程的思路,只有一个类,囊括了几百行代码。现在看起来真的是有点丑陋。从第二次作业开始,自己有意识地进行代码的拆分,分为多个类,再把臃肿和可重复的类拆散为零。之后的作业有几次无效,很沮丧。从出租车作业开始,我觉得自身的程序整体设计能力有了一个提升。程序的大框架完全能够搭建出来,除了一些算法方面有些困难。规格化的设计也让我在设计的时候更加有条理。最后是测试。其实我并不怎么重视测试,之前的测试都是自己在本地跑自己想的样例。JUnit虽然用起来有点麻烦,但是告诉了我一种快速且全面的测试方法。(不过我觉得还是单步断点调试更加自由一些。)
我对于工程化开发的理解就是,不管是什么样的程序,可能没有现成的设计模板,但是一定有现成的且有效的设计方法。换言之是“一切都按套路来”。首先是分析需求,然后搭建规格框架,最后是填写算法。这样子看起来可能很死板,难以出现什么新奇的设计,但是这很有效率。工程化的目标就是标准化,提高效率。

对于课程的期望和建议
1.作业量有点大。(5天的时间,需要同时完成操作系统实验和OO作业,难度有点大。)
2.是否可以将实验课放在作业的前面,先行体会新的知识,然后在自己的程序中应用?这样的话,就不大会因为求稳而放弃接受新事物。
3.是否可以将规格化设计放在多线程之前?规格化是面向对象的核心技术之一,相比之下多线程虽然在性能上有帮助,但是和面向对象的初衷好像没有太大的关系。

最后,祝OO越办越好。虽然我个人有很多的遗憾,但是人总要前行。不管是暑假自己“反刍”知识也好,就此遗忘也好,这是不可磨灭的记忆,全新的体验,也让我破除了对于大规模编程的恐惧与迷茫。相逢即是有缘人。

posted on 2018-06-25 19:51  Gorshkov  阅读(129)  评论(0编辑  收藏  举报