考慮真實世界中可能遇到的問題
狗門 2.0 運行一陣后又出現(xiàn)了問題,不只是主人自己的狗狗,其他任何狗叫喚剿配,狗門都會打開搅幅。
軟件都有其運行的上下文環(huán)境,真實世界和設(shè)計時候的理想世界是不同的呼胚,要充分可慮可能遇到的各種情況茄唐。
更新用例
出現(xiàn)問題是因為原先的用例描述不準(zhǔn)確造成的,下面修改用例:
- 將特指的狗改為通用的狗蝇更,即將“狗的名字”改為“主人的狗”
- 將特指的用戶改為通用的用戶沪编,即將“用戶名字”改為“主人”
- 增加判斷特定狗狗聲音的步驟
增加新用例
系統(tǒng)需要存儲狗狗的聲音,這是一個新的目標(biāo)年扩,所以需要新的用例來描述蚁廓。
類圖
到目前為止,系統(tǒng)出現(xiàn)的對象可以用下面幾個類圖表示
兩種不同的設(shè)計
第一個程序員用一個字符串表示狗狗的聲音厨幻,并存放在狗門類中相嵌。
而另外一個程序員設(shè)計個了一個狗叫類,存儲狗狗的聲音
可以對比一下二者的狗門類况脆,非常相似饭宾,只是狗叫聲一個用字符串表示,另外一個用狗叫類表示:
下面修改狗叫識別器中的識別函數(shù)格了,二者也非常相似捏雌,只是數(shù)據(jù)結(jié)構(gòu)不同
委托很重要
在 Sam 的方式中,識別函數(shù)將比對叫聲的任務(wù)委托給了狗叫類笆搓,如果狗叫類發(fā)生了變化,對識別類的影響非常小纬傲,因此更具有靈活性
更好的設(shè)計
上面兩個人的設(shè)計都可以正常工作满败,雖然 Sam 的設(shè)計更好一點,但是二者都沒有考慮到一個問題:狗狗可能會有多種叫聲叹括。Maria 考慮到了這個問題算墨,在狗門中存儲了狗狗的多種叫聲,她的設(shè)計更加合理汁雷。Maria 是怎么做到的呢净嘀?
文本分析:找出用例中的名詞
用例中的名詞通常是系統(tǒng)中的類,就算不是類也是系統(tǒng)的焦點
用例應(yīng)該準(zhǔn)確的描述系統(tǒng)工作方式
不同的描述方式中侠讯,會出現(xiàn)不同的名詞挖藏,造成不同的焦點,導(dǎo)致不同的設(shè)計結(jié)果
名詞不一定是類厢漩,但一定是焦點
焦點表示你應(yīng)該關(guān)注的重點對象膜眠。如果狗狗是焦點,那個不管他怎么叫你都應(yīng)該讓他進(jìn)門;如果叫聲是焦點宵膨,那么只有正確的叫聲才能進(jìn)門架谎。
動詞一般是類中的方法
有些名詞雖然是焦點,但是并不需要創(chuàng)建類
狗狗這個名詞雖然是焦點辟躏,但是并不需要為他創(chuàng)建一個類谷扣,原因如下
- 在系統(tǒng)之外,不需要系統(tǒng)表示
- 不需要他的信息(這里不需要狗狗太多的信息)
- 放在系統(tǒng)中不符合現(xiàn)實世界的邏輯(將狗狗存儲在狗門中進(jìn)行對比捎琐?)
UML 類圖
用例分析完成以后会涎,先繪制類圖,而不要立刻編寫代碼
類圖抽象層級較高野哭,還有很多細(xì)節(jié)需要考慮
總結(jié)
- 軟件都有其運行的上下文環(huán)境在塔,真實世界和設(shè)計時候的理想世界是不同的,要充分可慮可能遇到的各種情況拨黔。
- 用例的描述應(yīng)該準(zhǔn)確
- 委托很重要
- 多個目標(biāo)應(yīng)該編寫多個用例
- 用文本分析找出用例中的名詞和動詞蛔溃,可以將他們轉(zhuǎn)換為類、屬性篱蝇、方法
- 類圖可以對系統(tǒng)進(jìn)行描述贺待,但是缺乏細(xì)節(jié)
- 名詞不一定是類,但一定是焦點