第三次博客作业
一.
1950年代,第一次分离,主程序和子程序的分离
程序结构模型是树状模型,子程序可先于主程序编写。通过使用库函数来简化编程,实现最初的代码重用。产生基本的软件开发过程:分析—设计—编码—测试,使大型软件系统的开发成为可能
1975—1980年代,第二次分离,规格说明(Spec)和体(body)的分离
说明是类型定义和操作描述,体是操作的具体实现。(具体的例子就是C++,Java等面向对象语言的类说明与类实现的分离。)解决方案设计只关注说明,实现时引用或者设计体。体的更改、置换不影响规格说明,保证了可移植性。支持多机系统,但要同样环境。此时产生了划时代的面向对象技术。
1995—2000年代,第三次分离,对象使用和对象实现的分离
基于构件开发:标准化的软件构件如同硬件IC,可插拔,使用者只用外特性,不计内部实现。
Web Services:软件就是服务。分布式,跨平台,松耦合。
程序设计语言的第二次分离催生了规格化设计的诞生,规格化优点很多,故得到了人们的重视
二.
由于给我测的人并没有给我报bug,但感觉自己jsf还是不那么符合规范。。。
三.
1.
/**@REQUIRES:System.in contains lines of text;
* @MODIFIES:rqs,System.in,System.out;
* @EFFECTS:rqs.size>\old(rqs).size||控制台输出"输入格式不正确";
*
*/
/**@REQUIRES:System.in contains lines of text;
* @MODIFIES:rqs,System.in,System.out;
* @EFFECTS:rqs.size>\old(rqs).size||System.out.println("输入格式不正确");
*
*/
2.
/**@REQUIRES: null
* @MODIFIES: null
* @EFFECTS: 返回value
* @THREAD_REQUIRES: Vocked(value)
* @THREAD_EFFECTS:
*/
/**@REQUIRES:
* @MODIFIES:
* @EFFECTS: \result==>value
* @THREAD_REQUIRES: \locked(value)
* @THREAD_EFFECTS:
*/
3.
public void openFile(String name) {
/**
* @REQUIRES:文件存在
public void openFile(String name) {
/**
* @REQUIRES:FILE(name).exists==true;
4.
/**@REQUIRES:None;
* @MODIFIES:None;
* @EFFECTS:\result=this.arrived;
*/
/**@REQUIRES:None;
* @MODIFIES:None;
* @EFFECTS:\result==this.arrived;
*/
5.
/** @REQUIRES:map!=null;
* @MODIFIES: \this.reachable;
* @EFFECTS: (\all point p;point q.reaches(q)||p.reaches(q);reachable[p.x][p.y].contains(q);
*/
/**@REQUIRES:map!=null;
* @MODIFIES:\this.reachable;
* @EFFECTS:(\all point p,q;q.reaches(q)==true&&p.reaches(q)==true;reachable[p.x][p.y].contains(q)==true&&reachable[q.x][q.y].contains(p)==true;
*/
四。
书写规格使得我们的代码无论是自己理解还是供别人阅读时都更加的便利,可以帮我们理请自己的思路,可以减少逻辑方面的bug。规格写好了对于代码的结构以及层次都有所帮助,自己的规格写的还没有很好,还需要加强。规格这方面也是需要认真去学习的,它会给自己带来很大帮助的。