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方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...
随机推荐
- Linux 踩过的坑系列-01
关于默认网关的添加.记得楼主之前有一次,无意之间,也不知道做了什么删除文件里面内容的操作,配置好静态IP之后上不了外网.翻阅个各种资料都是没有找到问题.最后发现问题在于配置的虚拟机网卡文件的网关打错了 ...
- ssm心得
dao层 mybatis mapper工厂spring接管后,直接拿到mapper接口就可以来实现方法 service层 注入dao层的mapper实现各种方法.. controller 层 注入se ...
- django drf 基础学习5
一 简介: 用户登录的验证 二 验证机制: 1 session session需要在服务端存储能够通过session_id而获取的信息,每次请求到达服务端时,需要根据session_id这个ke ...
- Django之Cookie和Session
http://www.cnblogs.com/liwenzhou/p/8343243.html 一.Cookie Cookie是什么? 就是保存在客户端浏览器上的键值对. Cookie为什么存在? 因 ...
- 2018-2019-1 20189208《Linux内核原理与分析》第九周作业
活动 main函数编译有问题,div 函数和系统中某个函数重名,浮点输出有问题,scanf也有问题 修改如下 scanf_s("%d %d", &a, &b); p ...
- AC的故事大结局山寨版(下)
AC的故事大结局山寨版(下) TimeLimit:2000MS MemoryLimit:128MB 64-bit integer IO format:%lld Problem Descripti ...
- Java面试题复习笔记(数据库)
1.数据库分类? 关系型数据库和非关系型. 常用关系型:Myspl.Oracle.SQLServer 非关系型:Redis.Hadoop.Memcache.Mogobd 2.关系数据库三范式? 范式就 ...
- eclipse编写连接MySQL的简单动态网页
准备工作 下载Tomcat,建议使用最新版.下载并安装MySQL数据库,为了方便操作数据库,可以下载Navicat Premium,最新版不会提示不支持密码加密方式,所以下载最新版.除此之外,要想连接 ...
- CSS使用小记
1. 省略显示 max-width: 200px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; 固定宽度,nowra ...
- OpenCV绘制图像中RGB三个通道的直方图
一开始是看<OpenCV计算机视觉编程攻略(第2版)>这本书学做直方图,但是书本里说直方图的部分只详细说了黑白图像(单通道)的直方图绘制方法,RGB图像的直方图只说了如何计算,没有说计算完 ...