oo第三次总结性作业

一.规格化设计的发展

  首先我们来了解下什么是抽象编程

  抽象编程是通过抽象的方法来减少编程工作量或有效地减轻编程难度

  将问题通过功能分解,各个击破的编程方法(过程化编程) 是一种以行为抽象为主的抽象编程
  将问题通过实体分析,分层分类地实现 抽象数据类型,从而进行简单应用编程(基于对象编程)是一种以数据抽象为主的抽象编程
  这种抽象编程,通过数据类型复用,方便编程,方便维护和扩展,其效果比过程化编程更好编程语言中没有许多具体的数据类型要解决实际问题,很大部分工作是要建立 数据模式与实际问题的对应,也就是建立抽象数据类型的过程对象化编程就是基于分层分类的抽象数据类型之具体编程,它能更好地实现 数据结构和算法,便是将N.Wirth的程序公式:
  程序=算法+数据结构具体化为:
  程序=算法+ 抽象数据类型
 
  起初的编程是面向机器的,也就不用考虑这么多问题。但随着计算机硬件的快速发展,原有的编程方式已经渐渐不能适用于今日编程的要求,程序员对于当前抽象水平感到不满,迫切需要一种“更高级的语言”,或者一种高级的语言机制,让程序员可以在需要的时候构建自己的抽象方法。随着时间的发展,对于程序的抽象逐渐形成为两大类,即参数化抽象与规格化抽象。
 
二.规格bug分析
 
  1.作业中的规格bug
    emmmmm本身想列个表但是查了一下发现JSF上被报的bug确实不多,第九次作业1个不符合规范,第十次和第十一次作业都没有被报规格的bug
  2.bug产生原因
    不过这倒是不说我自己写的有多么好,说实话当时听规格的时候听的不是特别认真,自己在写的时候也遇到了很多困难。尽可能地保证布尔表达式的书写规范,但由于是先写的程序再写的规格,并没有做到良好的设计,有些方法甚至能多达一二百行,规格写起来非常困难,自己已经相对认真去对待了,但还是有遗漏的地方。如果要做到尽善尽美估计一个挺长的方法上就得耗个一两个小时,当时时间紧张就果断放弃了。再加上自己有些地方疏忽大意忘写漏写,所以如果测试同学要硬抓我的规格错误的话还是一抓一个准,在此感谢牛宇航同学的手下留情。
  3.改进方法
  自己被报的bug是在写出租车方法的时候,由于方法长度太长,更改的部分过多,在穷举的时候没有考虑完善,对于MODIFIES部分没有写全从而产生了一个bug,而之后的改进方法也是在oo上机课之后学会的一种写法,对被报的bug以及部分没被报但是自己发现的bug在下面进行讨论,源代码与改进方法如下
  (1)源代码

  /**@MODIFIES:this.NowPosition[0],
  this.NowPosition[1],
  this.queue,
  this.WTime,
  this.state,
  this.credit,
  this.Rtime,
  this.gui,
  this.c;
  *@EFFECTS: judge the statement of the car then choose a right way which has a better distance and flow to move;
  */

  改进方法

  /**@MODIFIES:this
  *@EFFECTS: judge the statement of the car then choose a right way which has a better distance and flow to move;
  */

  (2)源代码  

  /**@EFFECTS:this.NowPosition[1];
  * @THREAD_EFFECTS:\locked();
  */

  改进方法 

  /**@EFFECTS: \result==this.NowPosition[1];
  * @THREAD_EFFECTS:\locked();
  */

  (3)源代码

扫描二维码关注公众号,回复: 1132081 查看本文章

  /**@REQUIRES:int i;queue[i]!=c;
  * end<400;
  * c.getFi()!=c.getTi() && c.getFj()!=c.getTj();
  *@MODIFIES:queue,end;
  *@EFFECTS:queue[++end]==c;
  *@THREAD_EFFECTS:\locked();
  */

  改进方法

  /**@REQUIRES:\all int i;start<=i<=end;queue[i]!=c;
  * end<400;
  * c.getFi()!=c.getTi() && c.getFj()!=c.getTj();
  *@MODIFIES:queue,end;
  *@EFFECTS:queue[++end]==c;
  *@THREAD_EFFECTS:\locked();
  */

  4.功能bug和规格bug的聚焦关系

  emmmmmm规格bug只被报了一个,功能bug倒是不少,总体来说因为是先写的程序后写的规格,二者相对独立,所以并没有产生太大的联系。功能失分多在于自己粗心大意,或者对于题目根本没有理解清楚,以及一些极其细节的地方没有搞清楚。而规格bug多在于不熟悉、不认真而造成的失分。

三.规格设计思路及体会

  1.先写规格再写代码!先写规格再写代码!先写规格再写代码!重要的事情说三遍!

  2.其实说真的,对于自己设计好规格的程序再去编写,确实是可以达到事半功倍的效果,而且不容易出错。现在编程还是想一出是一出,很容易造成不必要的麻烦

  3.自己当初在写的时候就是,大概总览程序,回忆自己当时的设计思路,然后去填写REQUIRES部分,阅读具体方法来填写MODIFIES部分以及EFFECTS部分

  4.感觉自己对于规格设计的训练还不够,因为课程在要求规格设计的同时还增加了很多新的要求,也许对于我这种菜鸡来说,仅仅是完成所要求的功能就已经到了上限了,规格就按照自己的想象随便写了上去。规格设计发展到今天还十分活跃一定有他的道理,而且应该成为编程中比较重要的一个环节,但感觉自己虽然写了这么多,但实际水平并没有得到多大提升。还是希望课程组能照顾下和我水平差不多的菜鸡们,能够给予更多的时间和空间

    

   

猜你喜欢

转载自www.cnblogs.com/kazr97/p/9110134.html