第三次OO总结
规格化设计的调研
随着50年代高级语言的出现,编译技术不断完善,涌现出多种流派的语言,其中就有里程碑式的Pascal语言;进入70年代,由于众多语言造成的不可移植、难于维护,Ada程序设计语言诞生了,强调大型系统可读性胜于可写性,Ada程序自成清晰的文档;经过80年代计算机硬件和操作系统的改善,程序设计重点从算法和数据结构实现技术向规模说明方向转移。从空间的角度观察, 广义上来说, 软件规格说明描述的是整个软件系统;狭义来说, 软件规格说明描述的是软件系统的组成部件。从时间的角度来观察, 广义来说, 软件规格说明方法适用于整个软件生命周期; 狭义上来说, 软件规格说明方法仅适用于软件生命周期的特定阶段。规格化设计可以提高程序的可读性,也可以提高阅读效率,便于以后的修改。
规格bug
可能是我运气太好了,这几次都没被扣规格的bug……
改进写法
1. 前置条件
1.1 忽略前置条件
previous
  public int[][] getMatrix(Point dst){
  /**
       *@ REQUIRES: None
       *@ MODIFIES: visited, dist
       *@ EFFECTS: normal_behaver
                \result == the shortest distance between point(x,y) from point(x2,y2) ;
  */
  }
late
  public int[][] getMatrix(Point dst){
  /**
       *@ REQUIRES: !tmp.empty
       *@ MODIFIES: visited, dist
       *@ EFFECTS: normal_behaver
                \result == the shortest distance between point(x,y) from point(x2,y2) ;
  */
  }
1.2 前置条件不全
previous
  private void chooseTaxi(){
  /* *
      *@ REQUIRES: None
      *@ MODIFIES: \this.TarTaxi;
      *@ EFFECTS: \any int i=0;i<this.list.size;i++:!list.get(i).getTaxiState().equals(TaxiState.STOP)==> \target = list.get(i);
  */
  }
late
  private void chooseTaxi(){
  /* *
      *@ REQUIRES: \this.taxi!=null&&\this.taxi is sorted by credit;
      *@ MODIFIES: \this.TarTaxi;
      *@ EFFECTS: \any int i=0;i<this.list.size;i++:!list.get(i).getTaxiState().equals(TaxiState.STOP)==> \target = list.get(i);
  */
  }
1.3 范围错误
previous
public void taxiControl(int n) {
        /**
         *@REQUIRES: n>0 && n<100
         *@MODIFIES: None;
         *@EFFECTS: ......
         */
    }
late
public void taxiControl(int n) {
        /**
         *@REQUIRES: n>=0 && n<100
         *@MODIFIES: None;
         *@EFFECTS: ......
         */
    }
1.4 自然语言
previous
    private int loadMap(BufferedReader Reader) throws IOException{
        /*
        @ REQUIRES: in this method we load the map
        @ MODIFIES: Map[][]
        @ EFFECTS:     \any char!=0&&char!=1 ==>System.out&&System.exit
                    \any somewhere not cross road but has light ==>System.out&&System.exit
        */
    }
late
    private int loadMap(BufferedReader Reader) throws IOException{
        /*
        @ REQUIRES: File(path).exist
        @ MODIFIES: Map[][]
        @ EFFECTS:     \any char!=0&&char!=1 ==>System.out&&System.exit
                    \any somewhere not cross road but has light ==>System.out&&System.exit
        */
    }
1.5 格式错误
previous
public void run(Taxi t){
        /*
          @ REQUIRES: \t.status.equals(TaxiStatus.SERVING);
          @ MODIFIES: None
          @ EFFECTS: ......
         */
    }
late
public void run(Taxi t){
        /**
         @ REQUIRES: t.status.equals(TaxiStatus.SERVING);
         @ MODIFIES: None
         @ EFFECTS: ......
         */
    }
2. 后置条件
2.1 自然语言
previous
    public synchronized void changeRoute() {
        /*
        @ REQUIRES: None
        @ MODIFIES: None
        @ EFFECTS: get the minimum flow and change the route
         */
    }
late
    public synchronized void changeRoute() {
        /*
        @ REQUIRES: None
        @ MODIFIES: None
        @ EFFECTS: \result = this.route = this.map.minRoute(this.position, point);
         */
    }
2.2 后置条件不全
previous
    private int getDir(Point from, Point to){
        /*
        @ REQUIRES: None
        @ MODIFIES: None
        @ EFFECTS:     (to.getX() - from.getX() > 0) \return = 0;//D
                    (to.getX() - from.getX() < 0) \return = 1;//U
                    (to.getY() - from.getY() > 0) \return = 2;//R
                    (to.getY() - from.getY() < 0) \return = 3;//L
        */
    }
late
    private int getDir(Point from, Point to){
        /*
        @ REQUIRES: None
        @ MODIFIES: None
        @ EFFECTS:     (to.getX() - from.getX() > 0) \return = 0;//D
                    (to.getX() - from.getX() < 0) \return = 1;//U
                    (to.getY() - from.getY() > 0) \return = 2;//R
                    (to.getY() - from.getY() < 0) \return = 3;//L
                    \return = 4;
        */
    }
2.3 没有体现modified的改变
previous
    public void run() {
        /*
        @ REQUIRES: None
        @ MODIFIES: system, r, position. credit, state, req, route, timer
        @ EFFECTS:     \this.state = 2&&\this.reqList.isEmpty==>\this.lastposition = \old.this.position;\this.position = getNextPos();t+=0.2+checkLight(lastposition, position, p);
                    \this.state = 2&&!\this.reqList.isEmpty==>\this.lastposition = \old.this.position;\this.position = getNextRoute();t+=0.2+checkLight(lastposition, position, p);
                    \this.state = 1||\this.state = 3==>this.lastposition = \old.this.position;\this.position = getNextRoute();t+=0.2+checkLight(lastposition, position, p);
                    \this.state = 0 ==> t+=0.2+checkLight(lastposition, position, p);
        */
    }
2.4 不符合格式规定
previous
    public boolean repOK() {
        /*
        @ REQUIRES: None
        @ MODIFIES: None
        @ EFFECTS:  (this.map==null||this.map.length==0) \result = false;
                    \result = true;
         */
    }
late
    public boolean repOK() {
        /*
        @ REQUIRES: None
        @ MODIFIES: None
        @ EFFECTS:  (this.map==null||this.map.length==0) ==> \result == false;
                    (this.map!=null&&this.map.length!=0) ==> \result == true;
         */
    }
2.5 忽略后置条件
心得体会
这个规格也不知道该说点什么,都是写完代码看着复制粘贴,改改格式,然后基本也都是电工课解决的hhh可能之后3次要认真一点了
我一直很佛,对自己的程序和别人的程序都是随便测几个,虽然这不是对学术负责的态度?但是觉得吧几天写出来的东西怎么也会有错,至少我是这么认为自己的。自从ifttt自暴自弃,我就没被报过bug(除了第一次出租车的loadfile有点问题,主要还是自暴自弃吧)可能是大难不死必有后福?不过OO倒是让我知道了要更热爱生活,不然除了黑黢黢的屏幕,什么都不剩了。
第三次OO总结的更多相关文章
- 【作业】HansBug的前三次OO作业分析与小结
		
OO课程目前已经进行了三次的作业,容我在本文中做一点微小的工作. 第一次作业 第一次作业由于难度不大,所以笔者程序实际上写的也比较随意一些.(点击就送指导书~) 类图 程序的大致结构如下: 代码分析 ...
 - 前三次OO作业小结
		
I used to be enamored of object-oriented programming. I'm now finding myself leaning toward believin ...
 - 小菜鸡儿的第三次OO博客
		
规格化设计历史 规格化设计的历史目前网上的资料并不多,百度谷歌必应也表示无能为力...... 在这里结合现实情况讲一讲自己对程序规格化的理解,首先代码规格化对代码的影响是间接的,或许它不能让你代码里面 ...
 - 2018-北航-面向对象-前三次OO作业分析与小结
		
基于度量的程序结构分析 由于平时使用了NetBrains出品的IDEA作为IDE,在分析程序的时候我使用了IDEA的插件Metrics Reloaded.然而在使用时发现不懂得很多分析项目的含义,因此 ...
 - 前三次OO作业总结
		
一.作业总结 前三次的任务都是表达式求导.这是我在高中就思考过的问题,但是很久都没有付诸实践,直到学习了"类"这个强大的工具.还有正则表达式,如果能适当使用,则不失为一个字符串格式 ...
 - 2018-北航-面向对象第三次OO作业分析与小结
		
1. 规格设计的发展历史 规格设计用于对程序设提供分解,抽象等的手段.在撰写代码规格的时候,需要对组成部件进行抽象. 在1960s,软件设计出现危机,例如Dijkstra提出了goto语句的种种危害, ...
 - 第三单元OO总结
 - 面向对象OO第三单元总结
		
第三单元OO总结博客 1 梳理JML语言的理论基础.应用工具链情况 由于篇幅原因,这里只梳理几个在本单元常用的 注释结构 行注释://@annotation 块注释:/* @ annotation @ ...
 - OO设计原则 -- OO设计的原则及设计过程的全面总结
		
这部分增加一点自己的感想,OO设计原则下面讲述的很清晰;看完之后有点感想如果我们在实际开发当中能够把这些原则熟烂于心的话那我们的代码质量和个人能力会有很显著的提神.根据自己的实际经验看很多开发者在开发 ...
 
随机推荐
- CPU TFLOPS 计算
			
CPU TFLOPS 计算 姚伟峰 yaoweifeng0301@126.com] http://www.cnblogs.com/Matrix_Yao/ 深度学习任务是一个计算密集型任务,所以很关注计 ...
 - python的apidoc使用
			
一.apidoc的安装 npm install apidoc -g -g参数表示全局安装,这样在哪儿都能使用. 二.apidoc在python接口代码中的使用 def index(): "& ...
 - Spring <mvc:default-servlet-handler/>
			
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
 - Masonry与AmazeUI结合实现瀑布流
			
做一个图片列表展示,由于照片数量太多,决定用瀑布流来实现 由于之前没有接触过瀑布流,不知从何下手 百度一下大家都在用Masonry 官网 https://masonry.desandro.com/ 这 ...
 - Java框架spring 学习笔记(八):注入对象类型属性
			
使用set方法注入对象属性 编写UserDao.java文件 package com.example.spring; public class UserDao { public void print( ...
 - js 一键复制
			
function copyURL(id){ var siteId=$("#siteId").val() var oInput = document.createElement('i ...
 - 微信小程序超出两行省略号
			
display: -webkit-box; overflow: hidden; text-overflow: ellipsis; word-wrap: break-word; white-space: ...
 - AS3语法和UNITY C#语法的异同
			
AS3 UNITY Sprite a = new Sprite(); trace(a.paent); 此时a.parent为null,还未AddChild到屏幕上, 一般用这个来判断在不在屏幕上 ...
 - scrapy爬取58同城二手房问题与对策
			
测试环境: win10,单机爬取,scrapy1.5.0,python3.6.4,mongodb,Robo 3T 其他准备: 代理池:测试环境就没有用搭建的flask抓代理,因为我找到的几个免费网站有 ...
 - python的单元测试unittest模块
			
首先需要导入unittest模块 import unittest import HTMLTestRunner # TestCase 也就是测试用例## TestSuite 多个测试用例集合在一起,就 ...