2008-12-30 62 views
19

最近我聽說OOP(Java)有9條規則。我知道只有四個是抽象,多態,繼承和封裝。 OOP是否還有其他規則?是否有OOP的規則?

回答

39

看起來像你要找的是Principles of Object-Oriented Design

總結自Agile Software Development Principles, Patterns, and Practices。這些原則是幾十年來在軟件工程方面的經驗所得來之不易的結果。它們不是單一思維的產物,但它們代表了大量軟件開發人員和研究人員的整合和着作。雖然這裏將它們作爲面向對象設計的原則展示,但它們確實是軟件工程長期原則的特例。

SRP單一職責原則一個類應該只有一個理由要改變。

OCP開放原則軟件實體(類,軟件包,方法等)應該打開以進行擴展,但關閉以進行修改。

LSP Liskov替代原理子類型必須是可替代的基類型。

DIP依賴倒置原理抽象不應該依賴細節。細節應該取決於upons抽象。

ISP接口隔離原理 客戶端不會被迫依賴於他們不使用的方法。接口屬於客戶端,而不屬於層次結構。

REP釋放再利用等價原理 再利用的粒子是釋放的粒子。

CCP共同閉包原理 包中的類應該針對相同類型的更改一起關閉。影響封閉包的更改會影響該包中的所有類,而不會影響其他包。

CRP常見重用原則 包中的類可以重複使用。如果您重新使用包中的某個類,則可以全部重用它們。

ADP的Acylcic依賴原則 允許在依賴圖中沒有循環。

SDP穩定依賴關係原理 取決於穩定性的方向。

SAP穩定抽象原理 的包裝應儘可能抽象,因爲它是穩定的。

4

這些是概念,而不是規則。實際上沒有規則,只是做出決定,有些設計比其他設計更好,有些比其他設計更好:-)

雖然有很多指導原則:-)有些是語言特定的(C++充斥着它們)其他是面向對象的。舉不勝舉,雖然:-)

關閉我的頭頂,重要的有:

  • 鬆耦合,高內聚
  • 編寫可測試類,你謹慎測試
  • 使用的傳承並只在有意義的地方(喜歡構圖)
  • 嘗試堅持開放/關閉的原則。
  • (最重要的)KISS

很多工作在擴大和增加:-)

編輯:我要補充,你列出的規則是不是唯一的OO

+0

都不是你:)。順便說一下,我們將如何在非OO語言中練習繼承,多態性等。我相信所有這4個都是面向對象的範例。 – 2008-12-30 07:01:14

6

不確定任何規則。所有這些提到的事情都更像是面向對象的範例。還有我們按照像一些建議,

  • 分離關注的
  • 每類單一責任
  • 宗教成分在繼承
  • 編寫接口
  • 加上全部由Billybob提到,已經
5

這些OO原則是直接從Head First Design Patterns

  • 封裝內容不同而不同
  • 計劃到接口,而不是實現
  • 青睞組成了繼承
  • A類應該只有一個理由以改變(單一職責原則
  • 子類型必須是可替代的R基本(里氏Substitition原理
  • 類shoule對擴展開放,對修改關閉(開閉原則
3

有沒有 「規則」 對OOP。

有4種語言屬性可以使語言成爲面向對象或不是(這些是你在問題中列出的東西)。

其餘的材料有指導。我讀過的最好/最有用的指導是GRASP

許多建議不容易被外行(非CS專業)理解。我認爲GRASP是務實和平易近人的。

我認爲GRASP很好,因爲它提出了OO的名稱中最關鍵的部分 - 責任分配(對象不是程序員)。

兩個最關鍵的GRASP概念,其他所有其他來源都是耦合和內聚。這兩個概念/原則驅動所有其他模式和方法。

順便說一句 - 我只是採訪你嗎?你錯誤地轉錄了這個問題...