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