2010-09-07 86 views
5

我正在用C++開發一個項目。我意識到我的程序不是面向對象。面向對象編程

我有一個main.cpp和幾個頭爲不同的目的。每個頭文件基本上是一些相關函數的集合,其中有一些全局變量用來保存數據我也有一個windowing.h來管理窗口。這包含winMain()和winProc()。當事件發生時(比如點擊一個按鈕)或者它需要信息時(比如'這個窗口有多大?'),它會調用駐留在main.cpp中的函數。這些函數在windowing.h中包含的獨立.h文件中聲明。

這是否值得將其改爲OO?這項工作值得嗎?有沒有更好的方法可以在沒有太多改變的情況下構建程序?

歡迎各位反饋,謝謝您花時間閱讀本文。

回答

6

不,我認爲如果它沒有損壞,不要修復它。

任何窗口系統在本質上都是一定程度上的OO。您有一個由OS管理的窗口句柄,您可以對其執行某些操作。無論您使用window->resize()還是resize(window)都不重要。這種語法重排顯然沒有價值。

但是,隨着應用程序的增長,您可能會發現很多窗口大部分是相似的,並且有微妙的差異。最好的實現是附有特殊功能的樣板基本功能。要做到這一點的方法是使用基類和多態。

因此,如果您可以通過面向對象來重構該程序以使其更加優雅,那就去做吧。如果它隨着自然進化而成長爲OO範式,請遵循最佳實踐並讓它成爲現實。但不要試圖成爲流行語。

1

這取決於你想要完成的項目。如果不使用C++的面向對象特性爲您工作,並且沒有充分的理由需要改變,那麼繼續按照您的方式行事。另一方面,如果您想了解更多關於面向對象的知識,並且您有時間去應用它,將其重構爲更加面向對象的風格將爲您提供一個很好的學習機會。

1

我會遵循使用任何窗口管理器的最佳實踐。大多數使用OO風格,當您遵循其使用模式時,您將自動繼承(!)。

2

您需要考慮的兩件事:成本/收益分析和機會成本。

將代碼更改爲OO的成本是多少?有什麼好處?如果後者超過前者,那麼我傾向於改變它。

成本包括傳統成本,如花費時間,花錢等。益處包括更清潔的實施,使未來更容易維護。無論其他成本和收益如何,都取決於你自己的情況。

但有一點經常被忽視的是機會成本。這應該考慮到您的分析的成本。這是一個意味着放棄機會的經濟術語。

換句話說,如果你確實轉換了你的代碼,你的代價就包括你無法在那段時間做其他事情。

經典示例。如果您進行轉換,並且客戶決定不購買您的軟件,因爲您沒有添加他們想要的功能,那麼失去的銷售機會就是成本。

+0

有趣的一點。我的代碼通過將其更改爲OO而看起來更漂亮,但我不會獲得太多功能。 – 2010-09-07 03:17:30

+1

功能並不是一切,代碼的可愛性是無關緊要的。代碼的可維護性是相關的,漂亮的代碼可能更易於維護,但這並不總是給定的。 – paxdiablo 2010-09-07 03:18:59