2009-12-13 25 views
7

我瞭解程序編程(好吧,誰沒有),並希望對OOP有所瞭解,然後才能正常工作。我只是一個業餘愛好者,所以它會帶我一個年齡和一天,但它的樂趣。我該如何改進面向對象編程?

有沒有人有什麼想法可以幫助我做些什麼?項目想法?示例有據可查的代碼說明了他們的?

我目前使用C++,但C#看起來好多了。

+2

標題是問題還是需求?:) – 2009-12-14 00:24:21

+0

+1到jdk,編輯反映你的觀察=) – 2009-12-14 00:29:19

+1

對不起!這將教我不要在工作16小時後發佈哈哈。 – Silvanus 2009-12-14 02:05:17

回答

9

有一些很棒的OOP書籍頭先涵蓋Object-Oriented Analysis and DesignObject-Oriented Design Patterns

+0

國際海事組織最好的書籍,以幫助刷新不同語言之間的概念。 – Woot4Moo 2009-12-13 23:29:15

+8

與書籍一樣,只是閱讀書中的面向對象將永遠不會真的教給你。你真的需要一些實踐經驗。 – Benson 2009-12-13 23:40:23

+4

有些人可能不喜歡Head First系列,因爲它們似乎針對新手。當你暗示以新手爲目標的書會適合他們時,即使有一點經驗的人也會感到憤怒,但如果你已經接受了更多的學習,那麼這些Head First書籍是令人敬畏的。他們給出了具體的例子,並以清晰簡明的方式陳述原則。 – RibaldEddie 2009-12-14 00:33:18

4

爲了真正適應面向對象編程,您可以做幾件事。

  1. 強迫自己用對象來模擬真實世界的問題。創建用於表示對象的類以及表示可以執行的操作的方法。

  2. 使用真正強迫OOP的語言和/或框架。直到我拿到一個Java類,並開始大量使用Swing,我才真正關注了OOP。我最近並沒有在C#上玩過很多,但我認爲C#或Java是一個很好的選擇。

0

這取決於你知道什麼語言。我個人會推薦一些類型的OO腳本語言。 IE PHP或Python,我相信這會幫助你順利過渡。

+2

我強烈反對。 PHP和Python都有非常奇怪的對象系統。 Python是一種很好的方式,但它在繼承方面做得很差,並且需要明確的「self」參數,這可能會造成混淆。 PHP的對象系統沒問題,但由於PHP的傳統有限,它有很多古怪的東西。另一方面,Ruby有一個很棒的對象系統,可能是一個不錯的選擇。 – Benson 2009-12-13 23:39:20

+0

嗯,我將不得不看看Ruby,是的,我同意Python確實有一種非常獨特的方式來處理事情。大多數程序員程序員將繼續以這種方式編寫他們的代碼,即使它在OO領域。儘管感謝Ruby的建議。 – Woot4Moo 2009-12-13 23:43:48

1

我最近從PHP轉換到C#,並熱愛它的每一分鐘!我會說,找到一個靈活的時間軸,並潛入其中的新項目。獲取一些書籍,尤其是面向對象的概念和設計模式。

5

我建議你閱讀Object ThinkingDavid West。本書中的代碼非常少,但關於如何建模的討論很多。

一對夫婦的事情,我希望有人能告訴我,當我開始了有:

  1. 當模擬對象,你應該專注於行爲的多數據的形狀。
  2. 儘管許多OO教程模型現實世界中的東西,如動物和車輛,有很多情況下在OO軟件模型的東西都是概念和構造(東西,在現實世界中沒有物理表示)。
6

我建議主要是與如C#或Java中的強類型語言的工作,因爲這麼多的設計模式和一般OOP原則,正朝着強類型(GOFRefactoringUncle Bob)爲目標。 Ruby非常棒,但很多常見的OOP原則,比如編碼到接口都不適用。

花一些時間與鮑勃叔叔的SOLID原則。慢慢來,特別注意單一責任。如果您沒有從Bob叔叔那裏得到任何其他信息,請將SRP納入您的腦海,並儘早並經常應用。

我也喜歡Bob叔叔的代碼katas的想法。我建議通過bowling game kata工作。

2

嘗試學習Smalltalk - 改善您的OO編程的最佳方法。

2

獲得基礎知識的基本思路後,最好的方法就是通過實例學習。下載流行的開源項目,並通過他們挖掘方式。有些項目我學到了很多東西:

0

我覺得你可以做測試驅動的開發研究。這會自動定位您遵守面向對象原則的規則。這是實用的方式,但它的工作原理。您還可以通過學習teorical問題(如SOLID原則和設計模式)來支持此過程。讀大項目的源代碼也不錯的主意,以提高你的面向對象的技能

0

一句忠告我希望一直給我很久以前就是:

不要過度使用遺產。

對於初學者來說,這是一個非常容易的陷阱,因爲它是每個人都在談論的面向對象的重要概念之一。

基本上,你應該只在真正有意義的地方使用繼承 - 考慮數據類型,一些小部件層次結構,其中的關係非常明顯,任何人都會使用它。否則,您應該將對象注入其他對象並調用它們以更改功能(組合)。

不要試圖定義一個抽象方法的負載,並重復多次以不同的方式來實現它們,當你可以有一個類並注入(構造函數的參數)一個對象實現一個接口,你調用做任何變量功能,否則你會把它放在抽象方法中。 這將導致更簡單和更可重用的代碼(以我的經驗),並且更可測試。

0

爲了掌握你的面向對象的技能,你需要很多練習

嘗試用「對象術語」思考關於使用代碼執行的所有操作。在您的服務器端語言

  • 保存Java腳本代碼的面向對象的
  • 想保持你的CSS代碼可重用容易,包含低口是心非:

    應用它。