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是一种行为接口规格语言 ...
随机推荐
- The pit of an if statement in Java
package the.pit.of.an.ifstatement.injava; public class ThePitOfAnIfStatementInJava { public static v ...
- C/C++标准有哪些?
1. C 时间 名称 标准制定组织 事件 1978 K&R标准 K&R <The C Programming Language> ...
- qt 拖放dropEvent
1.拖放操作分为两个截然不同的动作: 拖动和放下. 拖动通过 void dragEnterEvent(QDragEnterEvent * event); 来实现. 放下通过 void dropEven ...
- JAVA后台框架优化之微服spring boot
1.为什么要微服? 首先我们目前后台系统业务链目前还是相对不是那么复杂,但随着项目的拆分,业务的快速推进,各项目模块的接口也随之增加,开发的复杂度不断增加,为以后扩展埋下隐患,而规划新的框架目前主要解 ...
- win10系统80端口被System (PID=4)占用的解决
今天想用wamp搭建虚拟目录.发现80端口被占用,操作挺麻烦的,所以想要更改. 具体流程如下: 1.“win+R”输入“cmd”,然后输入“netstat -ano | findstr "8 ...
- hbase shell基础和常用命令详解
HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...
- APP中的 H5和原生页面如何分辨?
一.APP内嵌H5和原生的区别 1.原生的页面运行速度快,比较流畅.H5页面相对原生的运行性能低,特别是一些动画效果有明显卡顿. 2.H5页面的很多交互都没有原生的好,比如弹层.输入时候的页面滑动 等 ...
- [COGS 0065][NOIP 2002] 字串变换
65. [NOIP2002] 字串变换 ★★ 输入文件:string.in 输出文件:string.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 已知有两个字 ...
- Python2.7 - IMOOC - 2
第三章 Python变量和数据类型 3-1.数据类型 在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,表示方法和数学上的写法一模一样,十 ...
- Linux和Unix的区别
Linux Unix 免费 收费 开源 不开源 硬件无要求 有要求 IBM Sun Hp 主流的Linux的发型版本: RedHat Fedora Mand ...