OO第三次博客作业
一、规格化的发展历史
最早的程序设计都是面向机器,从一开始使用的机器语言,到后面的汇编语言,都是面向机器的语言,编写困难也容易出错。随着需求的发展,程序的编写从面向机器走向面向过程,但由于goto语句导致的面条式代码,极大的限制了程序的规模,“软件危机”产生,程序设计的思想又经历了几次革命,“结构化程序设计”作为解决软件危机的方案被提出来了,这个概念通过“自顶向下、逐步细化、模块化”的方法降低程序的复杂度,但需求永远发展的更快,又产生了第二次软件危机,这次软件危机主要体现在可扩展性和可维护性上面,在这种背景下,面向对象的思想开始流行起来,从面向过程到面向对象,人们意识到了,为了保证程序的正确性和提升精简程度,同时注重后续维护和扩展的需求,要对整体程序进行更好的统筹规划,规格化就是辅助人类达到这个目标的一个极好的工具。
二、写法改进
因为这几次作业都没有被报规格方面的bug,我就直接列举一些自己需要改进的规格写法了。
1.前置条件不完善、后置条件使用自然语言
/**
* @REQUIRES: None;
* @MODIFIES: None;
* @EFFECTS: return state string;
*/
⬇
⬇
⬇
/**
* @REQUIRES: \this.mode>=0&&\this.mode<=3;
* @MODIFIES: None;
* @EFFECTS: (\result="stop") ==> (mode == 3);
* (\result="in service") ==> (mode == 0);
* (\result="waiting to serve") ==> (mode == 2);
* (\result="picking up passenger") ==> (mode == 1);
*/
2.前置条件不全面
/**
* @REQUIRES: None;
* @MODIFIES: \this.loacte;
* @EFFECTS: (\this.locate[i][j] == 1) ==> (\old.this.locate[i][j] == 2);
* (\this.locate[i][j] == 2) ==> (\old.this.locate[i][j] == 1);
*/
⬇
⬇
⬇
/**
* @REQUIRES: (i>=0)&&(i<80)&&(j>=0)&&(j<80);
* @MODIFIES: \this.loacte;
* @EFFECTS: (\this.locate[i][j] == 1) ==> (\old.this.locate[i][j] == 2);
* (\this.locate[i][j] == 2) ==> (\old.this.locate[i][j] == 1);
*/
3.前置及后置条件不全面
/**
* @REQUIRES: None;
* @MODIFIES: None;
* @EFFECTS: (mode == 2)&&(resttimer == 0);
*/
⬇
⬇
⬇
/** * @REQUIRES: re!=null; * @MODIFIES: \this.r;this.mode;this.resttimer; * @EFFECTS: (\this.mode == 2)&&(\this.resttimer == 0)&&(this.r == re); */
4.构造方法也应当约束传入的参数
/**
* @REQUIRES: None;
* @MODIFIES: this;
* @EFFECTS: (\this.start == s)&&(this.recordpath == rp)&&(this.end == e)&&(this.time == t);
*/
⬇
⬇
⬇
/** * @REQUIRES: (s != null)&&(rp != null)&&(e != null)&&(t != null); * @MODIFIES: this; * @EFFECTS: (\this.start == s)&&(this.recordpath == rp)&&(this.end == e)&&(this.time == t); */
5.后置条件使用自然语言
/**
* @REQUIRES: p != null;
* @MODIFIES: \this.pos;
* @EFFECTS:set this.pos to p;
*/
⬇
⬇
⬇
/** * @REQUIRES: p != null; * @MODIFIES: \this.pos; * @EFFECTS:(\this.pos == p); */
三、总结归纳
刚开始在得知要写规格的时候心里是比较烦又觉得这个没什么用,但是几次作业下来也算是明白了规格的意义,在扩展的时候有时会忘了当时写这个方法的时候有什么限制条件,此时规格就能提醒我,一份小作业尚且如此,大型工程想必是更加需要这种规范来保证多人合作的效率和准确性了。
OO第三次博客作业的更多相关文章
- [BUAA OO]第三次博客作业
OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...
- OO第三次博客作业——规格
OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
- OO第三次博客作业---透过代码看设计
不得不说的JSF 经过前几次作业的煎熬.出租车的代码量不断地增多.而出租车问题在不断的完善,这也就牵涉到一个问题,那就是最初出租车程序的设计问题,如果一开始设计的就有问题的话,那么在后来的过程中就会遇 ...
- oo第三单元博客作业
JML语言理论基础 Java建模语言(Java Modeling Language,JML)是一种进行详细设计的符号语言,他鼓励你用一种全新的方式来看待Java的类和方法.JML是一种行为接口规格语言 ...
- OO第三次博客作业(第三单元总结)
(1)梳理JML语言的理论基础.应用工具链情况 Java 建模语言(JML)将注释添加到 Java 代码中,这样我们就可以确定方法所执行的内容,而不必说明它们如何做到这一点.有了 JML,我们就可以描 ...
- OO第三次博客作业--第三单元总结
一.JML 语言的理论基础及应用工具链 JML 是一种行为接口规格语言,提供了对方法和类型的规格定义手段.通过 JML 和其支持工具,不仅可以基于规格自动构造测试用例,并整合了 SMT Solver ...
- OO第四次博客作业!
oo第四次博客作业 一.测试与正确性论证比较 测试只是单方面片面的证明对于当前的输入程序是正确的,测试只能证明程序有错误,不能说明程序是对的. 正确性论证是程序达到预期目的的一般性陈述,是通过规范化的 ...
- OO第4次博客作业
OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...
- OO第四单元博客作业
OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...
随机推荐
- Tupper自我指涉公式生成器
- 分布式系列七: zookeeper简单用法
zookeeper是分布式开源框架, 是Google Chubby的一个实现, 主要作为分布式系统的协调服务. Dobbo等框架使用了其功能. zookeeper特性 顺序一致性: 事务请求最终会严格 ...
- ubuntu 1604安装docker-ce 记录
以前在linux 内核为2.x的低版本中安装过docker,但是很多功能特性都无法使用,本次是在ubuntu 16.04上安装,记录安装过程,方便后续查阅. 一.安装前准备: 1. 安装包,允许 ap ...
- windows :config windows update … 一直处于假死状态
参考文章:http://www.cnblogs.com/teacat/p/9204225.html 环境:win7 64bit 旗舰版 问题:重启后,系统更新到35%后,一直处于假死状态,未能正确进入 ...
- jxl应用事例
实例中主要目的是解析jxl使用流程以及jxl绘制Excel的写法思路,代码掩去了项目中的真实数据,请根据需求酌情修改,如果有帮助到有需要的人,不胜欢喜. Dao层为查询数据库,返回list数据,此处省 ...
- vertx实例的fileSystem文件系统模块
初始化 //根据OS区分实现 System.getProperty("os.name").toLowerCase(); Utils.isWindows() ? new Window ...
- java----Maven
下载地址 http://maven.apache.org/download.cgi 介绍 bin:运行脚本 windows 输入mvn可以运行这些脚本 boot:包含一个类加载器的框架,maven使用 ...
- postgresql :: FATAL: could not write init file
出现此错误,原因是磁盘空间被用尽.需要清理磁盘空间即可.
- linux服务器配置pyspider出现Could not run curl-config 的解决方式
Downloading/unpacking pycurl (from pyspider) Downloading pycurl-7.19.5.1.tar.gz (142kB): 142kB downl ...
- Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调—Jaosn niu
#!/usr/bin/python # coding:utf-8 from PIL import Image, ImageDraw from HierarchicalClustering import ...