2013-01-16 71 views
1

我非常業餘,當談到OOP,使用Python自學習。面向對象編程實踐 - 概念/實體到對象

我主要關心的是將概念或實體分解爲對象。

例如,我剛剛編寫了一些代碼,用於控制連接到我的覆盆子pi的交通燈系統。

該系統包含:

  • 一輛車掀起交通燈(紅,黃,綠)。
  • 一個請求穿越的按鈕。
  • 和綠色和紅色的光,告訴行人時越過

現在我結束了我的建模代碼作爲一個完整的類。對象中的方法調用對象中的其他方法。例如。當對象被初始化時,初始化方法調用「等待按鈕按下」方法,當檢測到按鈕被按下時,該方法調用「通過燈光序列」方法。

這是不好的做法?如果每個概念/實體都是單獨的類/對象,例如交通燈對象,按鈕對象,行人燈對象?

對不起,問題的開放性。

感謝您的幫助。

+1

你應該在codereview:http://codereview.stackexchange.com/上發佈這個答案和代碼。一般來說,我會說分解到不同的對象。 – lolopop

+0

嘗試至少區分用於與其他實體(對象)進行交互的方法以及用於初始化或設置的方法。 想一想接口,並嘗試以自然的方式打破你的東西。但儘管如此,我們不要過度簡單地解決簡單問題,而是要慢慢向面向對象的實踐邁進。 – Lemonade

+1

擁有一個龐大的類只是在OO外觀下編寫程序代碼。所以,你應該把問題分解成更小的實體。 – StoryTeller

回答

1

你目前違反了Single Responsibility Principle。基本上你班級做得太多了。

你可以做的是類似如下:

有車trafficlights,行人交通燈和按鈕單獨的類來請求開始穿越。

之後,您可以將按鈕類插入行人燈光班。然後將汽車以及行人艙都注入「控制」/「管理」類中,在該類中用於管理燈光。

甚至在此之後,甚至可以通過例如將實際燈光注入到交通燈類中進行抽象。您可能還想了解其他SOLID principles

+0

感謝您的回覆,這些SOLID原則看起來非常有趣。雖然不知道什麼是注射或它是如何工作的。 – Xerphiel

+1

@Cornucopia看到這個:http://misko.hevery.com/2008/11/11/clean-code-talks-dependency-injection/ :) – PeeHaa

+0

感謝您的幫助,非常感謝。鏈接和你自己教給了我很多。 – Xerphiel