学期末最后一次博客

一、测试与正确性论证比较

  测试是使用测试样例对程序进行检测而正确性论证则是根据代码的逻辑进行验证。

  测试难以完全覆盖,需要大量的样例才能近似达到,而正确性论证则不需要花费那么大的精力,只需要根据代码的逻辑和规格进行一系列验证即可。

二、OCL与JSF 

  OCL语言全名为对象约束语言(Object Constraint Language),是一种用于施加在指定的模型元素上约束的语言。UML类图中的所有值都可以被约束,而表达这些约束的方法就是 OCL。在UML2标准中,OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。

  OCL是约束(Constraint)语言和查询(Query)语言。OCL基于数学中的集合论和谓词逻辑,有一个形式化的数学语义,但是却没有使用数学符号。它采取了自然语言和数学符号的折中方案,使用普通的ASCII码来表达数学中同样的概念,同时OCL规范也允许用户定义属于自己的OCL符号集。

  与JSF的相同之处:二者都是形式语言,声明式的语言,都没有二义性,都有前置条件和后置条件以及不变式;

  与JSF的不同之处:OCL每个表达式都是具有类型的,且具有许多的基本数据类型等,不像JSF一样完全使用逻辑表达式。

三、

uml类图:

 时序图:

 

 

 uml状态图:

 

四、学期总结

1.四个单元知识点总结

  第一单元主要在刚开始接触,主要训练了类训练和类的继承,以及强调了属性private的重要性。这其中一开始写的时候是完全按照面向过程写的,不可取。后来又把在一页中写的多个类分成若干页,看起来比较醒目。

  第二单元开始写多线程程序。着重于线程安全。

  1.在处理线程安全时,首先要明确共享的资源变量,这一变量是需要互斥访问的,涉及到线程安全的方面。

  2.同时要考虑到各个线程之间涉及到的同步问题,比方说只有输入的线程输入了,处理的线程才能进行处理,先后顺序不能颠倒,负责就可能导致结果不对。

  3.线程安全方面,是要保证对变量的改变不是分多次完成而是一次完成,需要保证连贯性。处理的方法要么是引入锁,使得一段程序在运行时不可分割同时别的共享锁的线程不能进行,要么是申明原子变量,使得共享资源的值的改变是一次性的。这样才能保证两个线程对同一个变量处理时同时进行,而变量的值因为线程执行的顺序而出现波动。

  4.处理线程问题时,因为存在多个类的相互交叉重叠,所以一个类的属性不宜过多过复杂,而方法也需要尽可能的简单。

  第三单元我们开始了规格设计。补全出租车,同时重点在于JSF程序规格,强调程序规格的重要性。

  1.规格的大小与方法成正比,所以方法尽可能的简单,而采用多个简单的方法实现一个原先复杂的方法,这样可以使规格尽可能的简单。

  第四单元我们进行了单元测试和正确性论证。二者各有优势,都能够论证代码/方法的正确性。

2.程序进步

  一开始写程序我是毫无头绪直接开始进行的,并且代码风格混乱,无用代码多,程序的结构复杂。

  在写方法时能够“化整为零”即将一个复杂的函数分化为多个简单函数,以便于出现bug时分模块进程debug。

  经过多次训练,我学会在一开始设计出框架,然后根据功能慢慢补全。同时所有的功能并不一定要一次性全部实现,分阶段实现有利于减少复杂性。

3. 工程化开发的理解

  一定要有良好的封装性和扩展性。

  不要有过长的过于复杂的方法,尽量把方法碎片化,微量化。

4. 对课程的期望和建议

  指导书希望能够更加明确详细一点。因为很多内容都是后来讨论区补上的,这样十分难以平衡先写作业和后写作业的人的效率和写代码的时间。因为在讨论区的一个问题出来之前,一个人可能根据自己的理解解决了这个问题就写出来整个代码了,但之后又因为一些人讨论区发帖而补上对问题的标准,那就可能需要推翻之前的代码重构了。

posted @ 2018-06-22 20:41  shinyruo开始了  阅读(178)  评论(3编辑  收藏  举报