2009-02-16 88 views
1

當您發現應用程序有很多類時,您會做什麼,但類不是真正的可插入對象,而是一組常用函數?OO設計問題

例子:

Class Point 
{ 
calculatePoints(something) {} 
calculatePointsAnotherWay(something) {} 
} 
+0

聽起來像靜態類/方法對我來說......你是什麼意思「你做什麼?」你想重構這段代碼嗎?爲什麼? – 2009-02-16 21:49:55

回答

11

我會看看功能,看看他們是如何使用可實例化的對象。如果函數:

  • 取用戶定義的類型作爲參數的一個對象,從對象
  • 提取數據,並
  • 產生基於對這些提取的數據的計算結果,

那麼該函數是成爲它的參數類的方法的候選人。這種編碼有時是創建原始類型的程序員或編寫「外部」函數(或兩者)的程序員可能仍然在思考命令式/程序式風格,而不是面向對象風格。

4

如果它是由語言允許,我會想辦法讓他們自由(非成員)函數。如果他們不屬於一個階級,他們就屬於這個階級。

如果您想對它們進行分組,請將它們放在單獨的名稱空間中。

在C#或Java中,這當然是不可能的,所以我可能會把它們放在單獨的靜態類中。

+0

我知道python有這個。哪些人? – 2009-02-16 22:07:44

+0

C++是我想到的。 :) – jalf 2009-02-16 22:18:56

1

從我所經歷的一點經驗,以及從問題中的有限信息開始工作,在這種情況下似乎沒有什麼應該做的。擁有僅包含常用函數和子例程的靜態對象(不可實例化)是完全合法的。

2

使方法成爲靜態的,並且類也是如此(如果可以的話),如果名稱錯誤(例如,Point是該類的非常糟糕的名稱),則重命名這些類,然後在適當的情況下移動或重新組合方法。

我的猜測是你關心的是類的名稱。如果周圍有很多這樣的類,則需要簡潔地命名,並且應該遵守Single Responsiblity Principle而不僅僅是通用方法分組。

0

從我讀過的看,分組相關函數顯然是OOP世界中一個類的有效使用。

0

可能代碼是用程序風格編寫的,本身並不壞。我首先要確保所有的方法都比較小,不超過50行。如果有大的方法,我會把它們分成更小的方法。這樣我會確保我有良好的程序設計。再說一次,如果做得對,程序編程不是一件壞事。

然後,我會查找超過5個參數的方法,並嘗試根據參數創建類。然後我會做我稱之爲C到C++的轉換:將這些「參數」類與操作它們的方法捆綁在一起,所以OO風格將開始出現。

1

正如您將問題標題爲OO。我想你想知道如何構造它作爲OO代碼。

目前,正如您所描述的那樣,作者已經編寫了程序代碼,但恰好碰巧使用了面向對象的語言。

如果你有這樣的代碼,並希望它在一個更純粹的面向對象的形式,你需要努力研究面向對象是什麼,以及如何在你的設計中使用它的功能。

這是比我能適應在這裏的答案。我認爲一本書或一本閱讀書應該讓你走上正軌。

這一條可能是一個良好的開端: http://www.amazon.com/Object-Oriented-Modeling-Design-James-Rumbaugh/dp/0136298419

1

這聽起來像你能說出類PointUtilities,使功能是靜態的。

0

好吧,似乎框架中的常用方式(例如Java API中的java.lang.Math,.NET Framework類庫中的System.Math)將這些方法分組到靜態/最終/密封類中並使其statis/final/sealed方法。

是的 - 這是一個程序方法。

在另一方面,如果你看過噸的書籍(開玩笑的),也許你可以使它更加面向對象的...

在我看來,我對這個觀點沒有什麼地方是合適的 - 也許最終承認這個世界並非純粹面向對象更容易。 :)