日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

oo第三次作业

發(fā)布時(shí)間:2023/12/2 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oo第三次作业 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、規(guī)格歷史

最初的程序設(shè)計(jì)是直接面向機(jī)器的,代碼編寫困難、可讀性差,當(dāng)時(shí)對(duì)于軟件開發(fā)的需求并不多。隨著對(duì)于程序規(guī)模的需求,出現(xiàn)了面向過(guò)程的設(shè)計(jì)思想,開發(fā)者開始忽略底層實(shí)現(xiàn),進(jìn)行程序設(shè)計(jì)。對(duì)于面向過(guò)程設(shè)計(jì)思想的變革,goto語(yǔ)句成為討論的熱點(diǎn)。Dijkstra于1968年發(fā)表著名的《GOTO有害論》,引起了廣泛的關(guān)注,結(jié)構(gòu)化的設(shè)計(jì)思想也在此時(shí)應(yīng)運(yùn)而生。面向?qū)ο笤O(shè)計(jì)是一種軟件設(shè)計(jì)方法,是一種工程化規(guī)范。面向?qū)ο笤O(shè)計(jì)模式解決的是類與相互通信的對(duì)象之間的組織關(guān)系,包括它們的角色、職責(zé)、協(xié)作方式幾個(gè)方面。程序設(shè)計(jì)的模塊化體現(xiàn)的更為明顯,各個(gè)部分更加獨(dú)立,相應(yīng)地,各個(gè)模塊之間的交互也更加重要。

?正因如此,程序規(guī)格化設(shè)計(jì)越來(lái)越被人們重視,對(duì)于代碼編寫的規(guī)范能夠讓程序變得更加易懂,能讓使用者輕松地學(xué)會(huì)如何正確使用這段程序。通過(guò)規(guī)格的抽象和總結(jié),使用者能夠直接使用這段程序而免去浪費(fèi)大量時(shí)間來(lái)看懂代碼的痛苦過(guò)程,代碼的維護(hù)也變得更加簡(jiǎn)單。

二、規(guī)格bug

在這三次測(cè)試中,我遇到的測(cè)試者沒有對(duì)規(guī)格進(jìn)行報(bào)錯(cuò),但這并不代表我的規(guī)格書寫沒有問題,通過(guò)自己分析幾次規(guī)格書寫的bug,得到下面的表格

規(guī)格bug

方法行數(shù)

effects不完整

5

effects內(nèi)容為實(shí)現(xiàn)算法

11

requires邏輯錯(cuò)誤

3

modifies不完整

3


分析:首先,缺少規(guī)格設(shè)計(jì)這樣的錯(cuò)誤只在第一次書寫規(guī)格時(shí)出現(xiàn),由于對(duì)規(guī)格書寫了解不夠清晰,常常出現(xiàn)應(yīng)該寫規(guī)格的地方?jīng)]有寫。我經(jīng)常出現(xiàn)的錯(cuò)誤是effects內(nèi)容為實(shí)現(xiàn)算法,由于常常使用自然語(yǔ)言寫effects內(nèi)容,導(dǎo)致描述算法居多,過(guò)度使用自然語(yǔ)言對(duì)于規(guī)格書寫是沒有幫助的。Requires邏輯錯(cuò)誤的原因,則是由于先寫程序后寫規(guī)格導(dǎo)致的,規(guī)格并沒能約束程序,程序亂七八糟地修改了,規(guī)格卻不知怎么跟著修改。

三、一些不好的例子

由于自己隨心所欲的書寫,出現(xiàn)了許多不好的問題,大部分問題出現(xiàn)在后置條件中,列舉如下:

1. public ReqHandler(Request request) {

????? /**

????? ?* @REQUIRES:none;

????? ?* @MODIFIES:this;

????? ?* @EFFECTS:將請(qǐng)求加到隊(duì)列中;

????? */

????? this.request = request;

????? this.taxiSelection = new Vector<>();

?? }

這是一開始寫的規(guī)格,對(duì)于request不為空沒有約束,而后置條件濫用自然語(yǔ)言

修改如下:

/**

????? ?* @REQUIRES:requires!=null;

????? ?* @MODIFIES:this;

????? ?* @EFFECTS:(this.request==request)&&( this.taxiSelection.isEmpty());

????? */

2.

public boolean isCross(int x, int y){

????? /**

????? ?* @REQUIRES

????? ?* @MODIFIES: guigv.m.graph;

????? ?* @EFFECTS:

????? ?* (x<0||x>79||y<0||y>79)==>\result==false;

????? ?* (x>0&&guigv.m.graph[x*80+y][(x-1)*80+y]==1)==>cross==cross+1;

????? ?* (x<79&&guigv.m.graph[x*80+y][(x+1)*80+y]==1)==>cross==cross+1;

????? ?* (y>0&&guigv.m.graph[x*80+y][x*80+y-1]==1)==>cross==cross+1;

????? ?* (y<79&&guigv.m.graph[x*80+y][x*80+y+1]==1)==>cross==cross+1;

????? ?* (cross>=3)==>\result==true;

????? ?* (cross<3)==>\result==false;

????? */

????? if(x<0||x>79||y<0||y>79)

??????? return false;

????? int cross = 0;

????? if(x>0&&guigv.m.graph[x*80+y][(x-1)*80+y]==1)

??????? cross++;

????? if(x<79&&guigv.m.graph[x*80+y][(x+1)*80+y]==1)

??????? cross++;

????? if(y>0&&guigv.m.graph[x*80+y][x*80+y-1]==1)

??????? cross++;

????? if(y<79&&guigv.m.graph[x*80+y][x*80+y+1]==1)

??????? cross++;

????? if(cross>=3)

??????? return true;

????? else return false;

?? }

描述內(nèi)容是實(shí)現(xiàn)算法,更改方式應(yīng)該是從后置條件的含義入手,如下

/**

????? ?* @REQUIRES:none;

????? ?* @MODIFIES: guigv.m.graph;

????? ?* @EFFECTS:

????? ?* (x>0&&guigv.m.graph[x*80+y][(x-1)*80+y]==1)==>cross==cross+1;

????? ?* (x<79&&guigv.m.graph[x*80+y][(x+1)*80+y]==1)==>cross==cross+1;

????? ?* (y>0&&guigv.m.graph[x*80+y][x*80+y-1]==1)==>cross==cross+1;

????? ?* (y<79&&guigv.m.graph[x*80+y][x*80+y+1]==1)==>cross==cross+1;

????? ?* \result==true ==> (cross>=3);

????? ?* \result==false ==>(cross<3)|| (x<0||x>79||y<0||y>79);

????? */

3.部分方法需要拋出異常,但是沒有體現(xiàn)在規(guī)格中。

修改方法:增加exceptional_behavior(InterruptedException);

4.

/**

?????????? ?* @REQUIRES: none;

?????????? ?* @MODIFIES: SchedulerSys.taxis, result.txt;

?????????? ?* @EFFECTS: 根據(jù)請(qǐng)求處理原則,選派相應(yīng)出租車響應(yīng),并將響應(yīng)結(jié)果寫入文件,同時(shí)更改參與搶單出租車的信用值;

?????????? ?* @THREAD_REQUIRES:\locked(finalTaxi);

???????? * @THREAD_EFFECTS:\locked(),整個(gè)方法同步;

?????????? */

沒有寫明具體修改內(nèi)容

修改方式:增加具體修改內(nèi)容

5.經(jīng)過(guò)研究其他同學(xué)的代碼,我發(fā)現(xiàn)自己代碼有一個(gè)很大的問題就是有些方法寫的太長(zhǎng)了,動(dòng)輒好幾百行,像是面向過(guò)程代碼,不是一個(gè)很好的結(jié)構(gòu)。這是由于書寫時(shí)沒有先寫規(guī)格,在最后寫規(guī)格時(shí)無(wú)從下手。這種規(guī)格改正方式,只有推翻重寫。

四、聚焦關(guān)系

由于規(guī)格設(shè)計(jì)的問題,導(dǎo)致代碼功能不清晰,并造成了至今無(wú)法查出的crash問題……

作業(yè)次數(shù)

方法名

功能bug

規(guī)格bug

?

taxi

2

2

9

hanndleFileReq

1

1

10

getAailaleDir

1

1

11

getAailaleDir

1

1

?

?

?

?

五、心得體會(huì)

 總的來(lái)說(shuō),這三次作業(yè)主要折磨我的還是規(guī)格設(shè)計(jì)的問題。我無(wú)法做到先設(shè)計(jì)規(guī)格再根據(jù)規(guī)格寫代碼,常常是寫完代碼了,要花更多地時(shí)間去“編”規(guī)格。事實(shí)上,我無(wú)法體會(huì)到書寫規(guī)格的意義,對(duì)于我這種底層群眾來(lái)說(shuō),可能書寫規(guī)格和寫注釋沒什么區(qū)別。而且對(duì)于規(guī)格的規(guī)范等等,各人有各人的理解,常常能在朋友圈看到大家被掛7,8個(gè)規(guī)格錯(cuò)誤,然后就是一場(chǎng)撕逼,過(guò)去的三個(gè)星期雖然一定不是作業(yè)量最多的,但一定是大家最生氣、戾氣最多的時(shí)間。說(shuō)實(shí)話,學(xué)到現(xiàn)在,有些迷茫了,我不清楚這門課到底要我們干什么,無(wú)法理解它和數(shù)據(jù)結(jié)構(gòu)、c語(yǔ)言的區(qū)別,它對(duì)于我來(lái)說(shuō),可能就只是一門很痛苦的課程而已吧。慶幸的是遇見的人都很不錯(cuò),然而身邊見到的不良例子太多了……雖然說(shuō)最可怕的出租車已經(jīng)過(guò)去了,但是我想每一次撕逼,每一個(gè)掛在朋友圈的帖子,都是一把刺在人心上的刀子,傷雖然愈合了,但疤痕永遠(yuǎn)都在。

轉(zhuǎn)載于:https://www.cnblogs.com/lemonj1998/p/9107620.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的oo第三次作业的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。