Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(七)...
?
解決實(shí)際中的大問(wèn)題solving
?really big problems
?
| ?引言 |
????? 時(shí)候構(gòu)建一些真實(shí)的大東西了。你準(zhǔn)備好了嗎?are you ready?你已經(jīng)掌握了一系列的OOA&D工具,但是在現(xiàn)實(shí)環(huán)境中構(gòu)造一個(gè)大系統(tǒng)的時(shí)候,如何使用它們呢?好吧,你可能還沒(méi)有認(rèn)識(shí)到,但是你已經(jīng)具備了構(gòu)造大系統(tǒng)的一切條件。接下來(lái),你將會(huì)學(xué)習(xí)一些新的工具,例如:領(lǐng)域分析和用例圖,但是這些新工具是你以前學(xué)習(xí)的知識(shí)作為基礎(chǔ)的,例如:傾聽客戶的需求,并且在開始寫代碼之前,理解你要構(gòu)建的系統(tǒng)是什么。準(zhǔn)備好,是時(shí)候開始架構(gòu)師工作了。
| ?正文 |
????? 所有的材料顯示開發(fā)一個(gè)偉大的軟件非常棒,但是真實(shí)的應(yīng)用可不只是5個(gè)或者是10個(gè)類。
????? 解決大問(wèn)題和解決小問(wèn)題是相同的。
????? 在前面我們做的那個(gè)小應(yīng)用,Guitar商店小于15個(gè)類,狗門小于5個(gè)類。但是,到目前為止,你所學(xué)的一切都可以運(yùn)用到開發(fā)大系統(tǒng)中。
????? 記得開發(fā)偉大的軟件的三個(gè)步驟嗎?
????? 1、確保你的軟件做了用戶需要的事情。
????? 2、應(yīng)用基本的OO原則來(lái)增加靈活性。
????? 3、為可維護(hù)、可重用的設(shè)計(jì)而奮斗。
????? 一切在于你如何看待大問(wèn)題。
????? 在你解決大問(wèn)題的時(shí)候,也只能是從其中一個(gè)部分開始工作。
????? 看待大問(wèn)題最好的方式,就是將它分解為很多獨(dú)立的小功能。可以獨(dú)立的解決這些小功能,并且在它上面應(yīng)用你學(xué)到的知識(shí)。
????? 你已經(jīng)知道的一些知識(shí)
????? 在前面你已經(jīng)學(xué)到了很多的知識(shí),都可以用來(lái)幫助你解決大問(wèn)題,只是你可能還沒(méi)有意識(shí)到。下面列出一些已經(jīng)學(xué)到的知識(shí)。
- ????? 通過(guò)封裝變化,是的你的應(yīng)用更加靈活,更加容易適應(yīng)變化。
- ????? 針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程,是你的軟件更容易擴(kuò)展。
- ????? 獲取需求的最好辦法是系統(tǒng)需要實(shí)現(xiàn)什么。
- ????? 分析幫助你確保你的系統(tǒng)可以工作在一個(gè)真實(shí)的環(huán)境。
- ????? 偉大的軟件應(yīng)該是容易修改和擴(kuò)展的,是做了用戶想要做的事情。
????? 下面就讓我們來(lái)解決大問(wèn)題吧。先看一個(gè)問(wèn)題的描述。
| Gary Games ——場(chǎng)景描述? |
| ? 游戲提供一個(gè)框架,通過(guò)框架,游戲設(shè)計(jì)者可以創(chuàng)建一個(gè)回合戰(zhàn)略型游戲。沒(méi)有兇殺的場(chǎng)景,游戲利用聽覺(jué)和視覺(jué)吸引玩游戲的人,我們的游戲突出戰(zhàn)略和戰(zhàn)術(shù)的技術(shù)細(xì)節(jié)。 |
但是我們知道的內(nèi)容足夠進(jìn)行下面的工作了嗎?好像不太夠,Gary到底是一個(gè)什么樣子的平臺(tái)呢?誰(shuí)是最終的消費(fèi)者呢?是游戲者還是游戲設(shè)計(jì)者?游戲都是歷史背景題材的嗎?是否需要支持激光和空間飛船呢?如果要寫一個(gè)好的需求,我們還需要知道更多的內(nèi)容。
我們需要先弄清楚兩個(gè)事情。
- 系統(tǒng)像什么?
- 系統(tǒng)不像什么?
我們還需要傾聽一下客戶關(guān)于這個(gè)游戲更加細(xì)節(jié)的討論。
?
通過(guò)用戶的需求描述,可以得出功能列表。
什么是一個(gè)功能呢?一個(gè)功能就是對(duì)于系統(tǒng)需要做的一件事的高級(jí)別的描述。通常你通過(guò)和客戶聊天,或者是傾聽客戶的描述來(lái)獲取功能。
通過(guò)用戶描述的功能,轉(zhuǎn)化為需求的描述。還記得我前面說(shuō)的嗎,用戶很多時(shí)候也不清楚他們的需求什么,或者說(shuō)他們說(shuō)不清楚需求是什么。需要我們?nèi)ネ诰?#xff0c;但是用戶會(huì)說(shuō)他需要一個(gè)功能。根據(jù)這個(gè)功能我們把它變成需求描述,然后和客戶一起確認(rèn)需求。
需求也有兩種,一種是給用戶的,作為甲乙雙方的確認(rèn)文件。一種是給內(nèi)部用的,主要給開發(fā)人員,用來(lái)控制開發(fā)邊界的,同時(shí)對(duì)開發(fā)人員有一個(gè)方向性的指導(dǎo)作用,不至于蔓延的沒(méi)有邊界了或者是沒(méi)有開發(fā)的的方向。通常第二種需求是由架構(gòu)設(shè)計(jì)人員整理的。
例如:客戶說(shuō)想在游戲中支持不同的地形。
我們就會(huì)分析
- 一個(gè)文件關(guān)聯(lián)一個(gè)地形
- 游戲設(shè)計(jì)者可以創(chuàng)建自定義的地形
- 每個(gè)地形的特征,會(huì)影響在上面的單位的移動(dòng)
也就是一個(gè)功能會(huì)導(dǎo)致多個(gè)需求。
我們已經(jīng)拿到了功能描述,是不是就可以開始寫use case了呢?
不是的,用例不會(huì)幫助你從大局上看系統(tǒng)。當(dāng)你進(jìn)行真實(shí)開發(fā)的時(shí)候,盡量推遲細(xì)節(jié)的實(shí)現(xiàn)。你仍然需要知道系統(tǒng)需要做什么,從全局上,系統(tǒng)需要做什么?
這時(shí)候我們需要用例圖來(lái)輔助確定系統(tǒng)需要做什么,而不是對(duì)于細(xì)節(jié)的use case描述。
上面就是一張用例圖,也就是系統(tǒng)的一個(gè)藍(lán)圖。
| ? 結(jié)論 |
?????
????? 解決大問(wèn)題
?
????? 1、傾聽客戶的描述,并且想象出他們想要你構(gòu)建的系統(tǒng)是什么樣子的。
????? 2、以一種用戶可以理解的語(yǔ)言列出一個(gè)功能單。
????? 3、確保你的功能是用戶想要的。
????? 4、使用use case圖來(lái)展示系統(tǒng)的藍(lán)圖
????? 5、將大系統(tǒng)分解為許多的小部分
????? 6、在這些小部分上應(yīng)用設(shè)計(jì)模式
????? 7、在這些小部分上應(yīng)用基本的OOA&D原則
?????
????? OO原則
?
????? 1、封裝變化
????? 2、針對(duì)接口編程,而不針對(duì)實(shí)現(xiàn)編程
????? 3、每個(gè)類應(yīng)該只有一個(gè)導(dǎo)致它變化的原因
????? 4、類是功能和行為的集合
轉(zhuǎn)載于:https://www.cnblogs.com/virusswb/archive/2010/07/27/Head-First-Object-Oriented-Design-and-Analysis-7.html
總結(jié)
以上是生活随笔為你收集整理的Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(七)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 简单,方便,功能全的php分页类
- 下一篇: 游戏组件——挑战:创建NextBlock