OO 第三次博客总结
调研规格化设计
1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写。通过使用库函数来简化编程,实现最初的代码重用。产生基本的软件开发过程:分析—设计—编码—测试,使大型软件系统的开发成为可能
1975—1980年代,第二次分离,规格说明(Spec)和体(body)的分离说明是类型定义和操作描述,体是操作的具体实现。(具体的例子就是C++,Java等面向对象语言的类说明与类实现的分离。)解决方案设计只关注说明,实现时引用或者设计体。体的更改、置换不影响规格说明,保证了可移植性。支持多机系统,但要同样环境。此时产生了划时代的面向对象技术。
从1991年开始,面向对象的形式规格说明语言开始发展,例如,Object-Z, VDM++, CafeOBJ等语言。
1995—2000年代,第三次分离,对象使用和对象实现的分离基于构件开发:标准化的软件构件如同硬件IC,可插拔,使用者只用外特性,不计内部实现。Web Services:软件就是服务。分布式,跨平台,松耦合。
bug统计及分析
| 功能bug | 规格bug | |
| 第9次作业 | 0 | 0 |
| 第10次作业 | 0 | 1 |
| 第11次作业 | 1 | 0 |
分析:
第十次作业的规格bug是由于复制了之前gui里对地图文件的处理方法,但未对已有的jsf格式进行修改导致的。
第十一次作业的功能bug是由于之前未仔细阅读issue,未对滴滴打鬼的情况进行处理。
规格举例
1.未考虑异常情况
/**
* @ Requires: None;
*
* @ Modifies: System.out, id, credit, pos, pre, state, Main.gui, ma, chn, road,
* wait_start, now_t;
*
* @ Effects: normal behavior 进行车的运动;
*
* @ THREAD_REQUIRES: \locked(this);
*
* @ THREAD_EFFECTS: \locked();
*/
改进后:
/**
* @ Requires: None;
*
* @ Modifies: System.out, id, credit, pos, pre, state, Main.gui, ma, chn, road,
* wait_start, now_t;
*
* @ Effects: normal behavior 进行车的运动 sleep出现异常 ==> exceptional_behavior (e);
*
* @ THREAD_REQUIRES: \locked(this);
*
* @ THREAD_EFFECTS: \locked();
*/
2.effect直接为代码
/**
* @ REQUIRES: None;
*
* @ MODIFIES: None;
*
* @ Effects: pos != null;
*/
改进后:
/**
* @ REQUIRES: None;
*
* @ MODIFIES: None;
*
* @ Effects: pos != null ==> \result == true;otherwise==>\result==false;
*/
3.写法不太好
/**
* @ Effects: \result == (graph+1>=0 && graph+1<=MAXNUM) ==> true;
(graph+1 <0 ||graph+1>MAXNUM) ==> false;
*/
改进后:
/**
* @ Effects: (graph+1>=0 && graph+1<=MAXNUM)==>\result == true;
* (graph+1 <0 ||graph+1>MAXNUM)==>\result == false;
*/
基本思路和体会
jsf还是应该在写方法之前先写好,作为方法的思路引导,现在这样方法写好了再去补全jsf实在会出现很多意料之外的问题。然后jsf的布尔表达式伟业应用的不熟练,还需实践。
OO 第三次博客总结的更多相关文章
- [BUAA OO]第三次博客作业
OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...
- OO第三次博客作业——规格
OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
- OO第三次博客作业---透过代码看设计
不得不说的JSF 经过前几次作业的煎熬.出租车的代码量不断地增多.而出租车问题在不断的完善,这也就牵涉到一个问题,那就是最初出租车程序的设计问题,如果一开始设计的就有问题的话,那么在后来的过程中就会遇 ...
- 渡过OO的死劫,了解规格的意义——OO第三次博客总结
当熬过了一次次黑暗,迎接我们的却是被扣的惨不忍睹的JSF ┭┮﹏┭┮ 一.总结调研 规格的历史 传统科学的特点是发现世界,而软件的特点是构造世界.软件的最底层就是0,1,两个离散的值.程序设计语言的三 ...
- 2019年北航OO第三次博客总结
一.JML语言理论基础及其工具链 1. JML语言理论基础 JML是用于对Java程序进行规格化设计的一种表示语言,是一种行为接口规格语言(Behavior Interface Specificati ...
- OO第三次博客作业
一.规格化的发展历史 最早的程序设计都是面向机器,从一开始使用的机器语言,到后面的汇编语言,都是面向机器的语言,编写困难也容易出错.随着需求的发展,程序的编写从面向机器走向面向过程,但由于goto语句 ...
- OO第三次博客总结
一. 规格发展历史 从20世纪60年代开始,就存在着许多不同的形式规格说明语言和软件开发方法.在形式规格说明领域一些最主要的发展过程列举如下: 1969-1972 C.A.R Hoare撰写了&quo ...
- OO第三次博客
规格化设计的发展历史 在计算机的早期发展中,软件开发没有可以遵循的系统方法,往往只有源代码而没有软件说明书等文档,因此这段时期的软件通用性时很有限的.后来到了20世纪60年代,软件开始被广泛使用,软件 ...
- oo第三单元博客作业
JML语言理论基础 Java建模语言(Java Modeling Language,JML)是一种进行详细设计的符号语言,他鼓励你用一种全新的方式来看待Java的类和方法.JML是一种行为接口规格语言 ...
随机推荐
- Spring mvc与Struts2的比较
1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能:spring会稍微比struts快.spring mvc是基于方法的设 ...
- 自动生成了一本ES6的书

MUI框架-12-使用原生底部选项卡(凸出图标案例) 今天,用 mui 做 app 时,遇到了可能各位都遇到过的头疼问题:底部中间图标凸起,如下图: 最后有源代码 [提示]:有人问我在 HBuilde ...
- 131.007 Unsupervised Learning - Feature Selection | 非监督学习 - 特征选择
1 Why? Reason1 Knowledge Discovery (about human beings limitaitons) Reason2 Cause of Dimensionality ...
- SSH笔记一
加入JAR包(包括c3p0和sql的,重复包删低版本的) 加入Spring 1) 配置web.xml文件 ------删内容留web-app--------ctrl+shift+f--------c ...
- CentOS随笔 - 1.虚拟机VMware安装CentOS7系统
前言 转帖请注明出处: http://www.cnblogs.com/Troy-Lv5/ 需要安装CentOS首先你得下载安装镜像文件(地址: https://www.centos.org/downl ...
- Python学习---面向对象的学习[深入]
类的深入学习 a. Python中一切事物都是对象 b. class Foo: pass obj = Foo() # ...
- January 11 2017 Week 2nd Wednesday
One always has time enough, if one will apply it well. 如果你能好好地利用,你总有足够的时间. If you always feel that y ...
- 外网访问用azure虚拟机搭建的网站
1.Ubuntu+Apache+PHP的环境搭建(此处省去了mysql的步骤) 在azure上搭建上述的开发环境和在本地PC搭建是一样的步骤,具体介绍请参看这里. 2.从外网访问 注意,这一步的前提是 ...
- ECharts.js学习(二)动态数据绑定
Echarts 数据绑定 简单的统计表已经可以生成,不过之前图标数据都是直接写在参数里面的,而实际使用中,我们的数据一般都是异步读取的.EChart.js对于数据异步读取这块提供了异步加载的方法. 绑 ...