(1)规格化设计的大致发展历史
最初,程序设计是面向机器的,由于对软件的需求并不大,因此,即使代码存在如可读性差等诸多问题,在当时也无伤大雅;随着程序规模的增长,出现了面向过程的设计思想。但在1960s,Dijkstra发表《GOTO有害论》,引发了大规模对于goto语句安全问题的讨论,冲突产生思想,结构化的设计思想由此产生。
面向对象程序设计是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。
面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。故而,程序规格化设计越来越被人们重视。
(2)作业规格bug统计分析
因为个人原因,这一项是没有办法写的emmm……
(3)分析自己规格bug的产生原因
因此,我来分析一下平日里遇到的规格bug吧~~
1>首先就是对JSF掌握不到位了;
2>其次是个人考量欠妥;
3>再就是…懒了吧。
(4)分别列举5个前置条件和5个后置条件的不好写法
前置条件:
1>传入参数的范围限制:
对于设定的数组下标:
(all int i, j; i >0 && j>0);
-->(all int i, j; 0 <= i < j < a.length;
2>传入某对象时:
public void insert(BinarySortedTree tree, int x)
/**@ REQUIRES: (tree != null);
/**@ REQUIRES: (tree != null);
-->(all BinarySorted Tree node in tree; node.left.value <= node.value <= node.right.value);
3>需要判断对象数组中每个对象不为空:
@REQUIRES: (arr != null) && (all i in arr; i != null)
后置条件:
1>使用JSF格式;
2>涉及算法的具体实现的时候,不应当写得过于详细;
3>@EFFECTS: this.name == name
4>@ EFFECTS:(0 <= i < j < a.length ==> a[i] <= a[j]);
-->@ EFFECTS:(all int i, j; 0 <= i < j < a.length;
a[i] <= a[j]);
5>if-else的条件限制于判断可能存在情况遗漏。
(5)按照作业分析被报的功能bug与规格bug在方法上的聚集关系
略。
(6)归纳自己在设计规格和撰写规格的基本思路和体会
设计规格,正如老师屡次强调的,是便于后来阅读代码者阅读、理解的有力工具,同时也锻炼我们思考的完善能力,对于编写代码这件事,就应该面面俱到八面玲珑啊~