2010-02-15 191 views
1

可能重複:
How to Think in OO考慮編程順序的最佳方法是什麼?

我有點新的節目。我正在使用Objective-C和iPhone應用程序Dev。我在圍繞OOP思維方式時遇到了一些麻煩。在你坐下來開始之前,有沒有人有任何提示或技巧來思考或可視化編程過程?

+0

你在OOP上讀過哪些書?你的背景是什麼?你做了什麼?你在閱讀什麼教程? – 2010-02-15 21:25:51

+3

可能重複:http://stackoverflow.com/questions/1551/how-to-think-in-oo – 2010-02-15 21:26:31

+2

提示:練習。 – 2010-02-15 21:36:15

回答

0

這就是所謂的設計。你需要做的是編寫用例並確定你的需求(搜索有關功能和非功能需求的信息)。如果你想要可視化你的代碼,那麼你應該閱讀關於UML。

0

當面向對象的設計處理的最好的一個方法,你可以在小積木型的部分步驟從鍵盤和問題的事情了。這些對象中的每一個都具有描述它們的屬性和它們可以執行的動作,它們將包含自足對象的概念以及完成工作所需的內容。一旦構建模塊就位,您就會從更高層次上思考這些對象如何與其他對象交互以解決手頭的問題。有些人覺得這個工具是UML,但它是一種偏好。

4

在閱讀有關面向對象的設計和編程時,您會遇到兩個概念:耦合和內聚。前者是關於每個階級如何相互依賴的問題,後者是關於一個關注那些責任感的階級的課程。

沒有得到更深層次的話題,我拿那些兩個概念,因爲它幫助了我很多東西放在這些方面。第一步是清楚你的應用程序必須做什麼。考慮一下「快樂之路」以及出現問題時會發生什麼,例如用戶沒有填寫正確的信息。

現在開始設計您的課程,這些課程是如何相關的以及每個課程提供給系統的整體內容。這個設計階段通常表示爲一組UML圖表,但如果您不熟悉UML,則可以使用一些書面段落。如果你看到一個班正在做不屬於那裏的事情,那就改變你的設計。在紙上改變它是便宜的。

不要開始思考如何實現某些功能,只是還沒有。例如,如果您的應用程序將使用GPS硬件,請不要擔心如何訪問它。假設部分已解決。開始考慮你將如何處理數據?哪個班級會收到這些數據?誰來處理它?

0

你所描述的似乎提出了一個關於軟件設計而不是編程的問題。爲此,我發現學習設計範例的最佳方式,特別是早期,就是要消耗好設計。如果您想了解OO設計範例,請編寫使用高質量OO框架的軟件。 Java和.Net庫都是例子。因爲我懷疑你實際上對Objective C的適當設計方法更感興趣,所以消費蘋果公司提供的方法來了解事情是如何完成的,以及爲什麼這樣做。

最終,通過練習和經驗,您將開始設計一個直覺,捕捉更高層次的概念,如依賴關係,耦合和凝聚力。然後,閱讀一些抽象設計原則並將其應用到您自己的代碼中可能非常有價值。看看你六個月前寫的東西。你喜歡什麼?你不喜歡什麼?你將做點什麼不同的?

這主要是開發任何職業技能的行爲:

執行=>批判=>一個蒸餾 教訓=>應用課=>重複。

我認爲最關鍵的一點是,你不會早早陷入太深,當你陷入分析癱瘓時,學習不會發生。相反,嘗試(當然,使用良好的源代碼庫)。如果它爆炸了,你可以在你開始的地方找到一個快照,這樣你就可以應用這些課程並再次嘗試。

最終,在面向對象的世界裏,我建議幾個核心的最佳做法,讓您開始:

  1. 避免循環依賴。如果你有兩個相互依賴的對象,你可能做錯了什麼。 (也有例外,當然,但你不應該使用在年初的水平了這種技術。)

  2. 隔離從合同的執行。在你的腦海裏維持兩個不同的概念,在一個對象的「什麼」和「如何」之間進行。我不知道Objective C,所以我不知道你的語言公開了什麼特別的抽象。在C++中,您可以使用純虛擬抽象基類來指定合約。 C#用interface這樣做。如果您能夠將「什麼」(合同)與「如何」(實施)分開來推斷,那麼您可以更輕鬆地創建功能強大的高質量軟件(以我的經驗)。

0

我真的很喜歡從數據流的角度考慮所有的應用程序。先畫出什麼樣的屏幕是好的,然後說出「哪些數據將成爲哪裏」,這有助於將數據分組爲不同的可能對象和層次結構。

然後,當你知道什麼樣的數據將是什麼屏幕,你可以把它綁控件或UI元素,以及通過什麼機制,這些元素會得到的數據計算出。這有助於找出一個對象管理層(MVC的「控制」部分)來幫助路由和獲取數據。

0

我發現,在我的塊風格的應用程序抽出主力車型(最好在像白板)確實有幫助。在繪製模型,制定出它們如何與彼此,你會開始認識到孔您的應用程序(你有沒有考慮過的車型),並填寫他們。

你絕對不必在開始編碼之前有一個「完整的」應用程序地圖,但草稿真的有幫助。一旦你有一張地圖與你一起工作,你會發現創建控制器的功能和視圖也變得更容易(因爲它顯而易見的地方在哪裏)。

我假設你在某種MVC框架的工作,但是這將與其他風格正常工作。

1

想象一副撲克牌。每個chard都有屬性。你原來的甲板可能有紅色的背部。你可以創建另一個具有所有相同屬性的牌組,但相反,它有藍色背。每張卡片都是不同的,但它們都有共同的特徵。

+1

呵呵?那是什麼意思? – Tim 2010-02-16 00:57:40

0

學習大多數事情和編程中的大多數事情的最好方法就是使用一些你渴望做的事情的例子。所以,既然你用iphone和objective-c標記了這個,我會推薦使用Cocoa(Touch)API並且瞭解它們是如何設計的。從Apple和其他人的大量示例代碼開始。一旦你使用了一些框架,你不僅知道如何讓某些事情發揮作用,而且你已經感受到了常見的模式和陷阱。閱讀書籍和教程也很好,但沒有辦法解決事實,即開始時總是很困難。但也很有趣。

+0

嘿,非常感謝回覆。這個網站的熱情讓我開始感覺更好。再次感謝偉大的建議。 – JoshD 2010-02-16 04:14:50

相關問題