OOD的第一步是什麼?OOD的第一步?
OOD的第一步?
回答
練習,廣泛閱讀,多練習。
特別與他人審查和評論方法。
閱讀不僅應該涵蓋OOD,還應該包含模式來了解其他人如何解決常見問題。
沒有步驟,它不是一個過程。
有一些初步措施:
- 瞭解OOD(一般)
- 理解問題/應用領域(功能規範)
- 有一個高層次的/建築設計:知道你可以用什麼O/S,庫,框架等
然後我用的混合自上而下和自下而上的發展:
自上而下:決定我想什麼組件,什麼的API(對象接口),有以實現應用程序(然後,下發展這些API)
自下而上:決定如何通過添加新方法和新類型的對象(有時將大對象拆分爲幾個較小的對象)來爲現有API(對象接口)添加新功能。
這是一個很多的練習。首先要讓你的思維圍繞着對象的工作方式 - 尤其是如果你是程序員。
練習製作很多小物件 - 我從來沒有看到有太多物件的系統;這是可能的,但我從來沒有見過它。當你需要將多個對象合併成一個對象時,這應該是非常明顯的,但是當一個對象被分解時,它不那麼明顯。
要求對象做某件事,不要要求它的數據。儘量避免吸氣和安裝者,並專注於你要求它對數據做些什麼的方法。如果你看到類似oa = o.b + oc或o.setA(o.getB()+ o.getC()的代碼,你就會犯這樣的錯誤:
不斷嘗試重構重複。直到沒有(或者儘可能少的)這對於你的面向對象設計技能來說可能比其他任何實踐都要多,當你知道更多的知識時,嘗試重構你認爲你以前可能不會重構的東西。像一個模式可能可以重構。比如這裏有一個非常簡單的例子 - 如果你有行代碼,看起來像這樣:
a = b + c * d;
g = h + i * d;
機會是存在着巨大的重構你的代碼,即使它看起來並不像它蝙蝠失蹤。你可能會丟失一個可以容納a,b,c的對象,而第二個實例可能容納g,h,i,創建這些對象之後,一堆東西會影響你的新對象。學習認識這樣的新機會至關重要。
我已經進行了20多年的編程,超過一半的時間都是面向對象,似乎每隔幾年我就會知道這一切 - 一年後,我回頭看看並認識到多麼無知我曾是。
OOD的第一步是OOD原則。檢出The Principles of OOD。
第一步是面向對象分析 - 其目標是確定構成系統的對象以及它們如何相互作用;根據這些知識,您可以指定對象的行爲(接口方法),然後指定內部結構(對象所需的數據成員是什麼)
設計過程產生許多圖 - 這些工具是應該幫助制定系統的細節:
首先出現一組'用例' - 用例是系統實現的場景的口頭描述(一個應該選擇最多實質性的);這些被用來識別應該映射到系統類的主要參與者和概念。然後通過制定「對象交互圖」,「類圖」和「序列圖」來細化這種理解,有時狀態圖用於視覺狀態機 - 這些圖是用於更好地理解系統的工具,因此,您對系統編寫類頭文件/類定義有足夠的瞭解。沒有固定的規則,這些圖中的一個首先出現,這些被適當地使用。
我發現下面的書非常有用:由格雷迪Booch的
面向對象分析和設計應用程序(第二版)
書經過一步設計的幾個例子系統步的處理(我認爲閱讀這些示例系統的設計過程就足夠了);一個小問題是,本書中使用的符號有點過時:現代的做法是使用UML符號表示圖表,但本書仍使用舊的Booch符號。本書的重點在於它總是通過具體的例子來解釋每個概念。
- 1. HtmlUnit的第一步
- 2. Neo4j的第一步
- 3. tdd的第一步
- 4. Silverlight的第一步
- 5. OpenMDAO:第一步
- 6. 第一步
- 7. JAVA OOD問題
- 8. OOD和對象ID
- 9. AngluarJS ng-controller的第一步
- 10. Selenium RC的第一步
- 11. jclouds中的第一步
- 12. Ruby on Rails的第一步
- 13. Spring框架的第一步
- 14. PostgreSQL + Django + South的第一步
- 15. 遷移到WordPress - 第一步
- 16. 簡歷解析第一步
- 17. Jquery mobile&Phonegap第一步
- 18. 科爾多瓦第一步
- 19. 第一步Django錯誤
- 20. 本地化 - 第一步
- 21. 第一步和儀表
- 22. 第一步oauth 1.0與tumblr
- 23. sparql/snorql示例,第一步
- 24. OOD和主客混亂
- 25. OOP/OOD耦合問題
- 26. C++:第1步:ExtractIconEx。第2步: ???第3步:SetMenuItemBitmaps
- 27. RxJava和Retrofit - 與Rx的第一步
- 28. Python(Jython)中的第一步:導入
- 29. 着色器和THREEjs的第一步
- 30. C#中Riot API的第一步
請更具體一點?什麼是問題域?你知道什麼? – Jacob 2010-05-24 08:31:48