关于程序中的需求的变化,责任的分配
例:假設(shè)我是一個學(xué)術(shù)聯(lián)合會的講師。參加我的課程的人在你的課程之后還將參加其它的課程,但他們不知道下一節(jié)課的上課地點(diǎn)。我的責(zé)任之一,就是確保每個人都知道到哪里去上下一節(jié)課。
?
分析之前,我們先以結(jié)構(gòu)化的程序設(shè)計方法來嘗試解決問題:
1.?獲取課堂上人的名單
2.?對于名單上的每個人:
a)???????? 查找他的下一節(jié)課程。
b)???????? 查找下一節(jié)課的地點(diǎn)。
c)???????? 查找去的路徑。
d)???????? 告訴他怎樣去上下一節(jié)課
?
這是理想的執(zhí)行步驟,沒有任何問題。但是大家想想,我們真的會按照上面的流程去做嗎?
可能實(shí)際中,我們應(yīng)該會采用這種方法:把從我講課的教室到其他教室的路徑張貼出來,然后告訴上我課的所有人:“我把其它的課程和相應(yīng)教室的地址張貼在教室后面了。大家按照這份表去你們的下一個教室。”。這樣就完事了。
?
那我們來看看這兩種方法有什么不同呢?
?????????????????? 第一種方法——對每個人都需要去明確的指出路徑。你會瘋掉!
?????????????????? 第二種方法——你給了一個告示,并期望每個人都能自己知道如何完成你的告示。
?
兩者最大的區(qū)別就是責(zé)任的轉(zhuǎn)移。在第一種方案中,我對所有事情負(fù)責(zé);第二種方案中,學(xué)生對他們自己的行為負(fù)責(zé)。兩者用于實(shí)現(xiàn)同樣的目的,但組織方式有巨大的差異。
?
?
?
?
???????? 這樣做有什么效果?我們來看新需求出現(xiàn)時會發(fā)生什么。
?
這樣子做有什么效果呢?我們來看當(dāng)有新需求出現(xiàn)時會發(fā)生什么?也就是需求發(fā)生變化時。
???????? 假設(shè)我們被告知:需要給畢業(yè)后助教的學(xué)生特殊的指令。也許他們需要在到下一個教室之前先收集課程評價并把課程評價交到辦公室。在第一種方案中,我必須修改控制程序來區(qū)分畢業(yè)和未畢業(yè)的學(xué)生,然后給畢業(yè)的學(xué)生特殊的指令。很可能我必須對程序做相當(dāng)多的修改。
???????? 但,在第二種方案中——每個人對自己的行為負(fù)責(zé)——我只需要給畢業(yè)生一個附加的說明。然后仍然是執(zhí)行“去你的下一個教室”的動作。
???????? 這是控制程序中重大的區(qū)別。第一種放啊,每當(dāng)出現(xiàn)一種新需求時,控制程序都必須修改。
???????? 第二種方案:新類型的學(xué)生也必須對自己的行為負(fù)責(zé)。
?
???????? 三處改變早就了這樣的效果:
?????????????????? 每個人對自己負(fù)責(zé),而不再有控制程序?qū)λ麄冐?fù)責(zé)。
?????????????????? 控制程序可以與不同類型的人對話。
?????????????????? 控制程序不需要知道學(xué)生在教室之間的任何步驟。
?
?
這里引進(jìn)一些專門的UML術(shù)語:
軟件開發(fā)過程中的三個不同的視角:
???????? 概念:展現(xiàn)問題領(lǐng)域中的概念
???????? 規(guī)格:只看軟件的接口,不要看具體的實(shí)現(xiàn)
???????? 實(shí)現(xiàn):也就是實(shí)體的代碼
從這三個角度,我們再看看上面的那個例子:
我也就是講師是在概念層上跟學(xué)生做交流。換句話說,我告訴學(xué)生“希望他做什么”,而不是“怎樣做”。但是,他們各有有各自的課和,走到下個教室的路徑也是不同的,可以自由選擇,這就是實(shí)現(xiàn)層的事情了。
???????? 在一個概念層上通信,而在別一個實(shí)現(xiàn)層上執(zhí)行。其結(jié)果就是我不需要知道具體發(fā)生了什么,只要在“概念上”發(fā)生了什么。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的关于程序中的需求的变化,责任的分配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于纠正2009年12月22日的总结的p
- 下一篇: Maximum.TV 发布西班牙语Sil