最近我聽說OOP(Java)有9條規則。我知道只有四個是抽象,多態,繼承和封裝。 OOP是否還有其他規則?是否有OOP的規則?
回答
看起來像你要找的是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穩定抽象原理 的包裝應儘可能抽象,因爲它是穩定的。
這些是概念,而不是規則。實際上沒有規則,只是做出決定,有些設計比其他設計更好,有些比其他設計更好:-)
雖然有很多指導原則:-)有些是語言特定的(C++充斥着它們)其他是面向對象的。舉不勝舉,雖然:-)
關閉我的頭頂,重要的有:
- 鬆耦合,高內聚
- 編寫可測試類,你謹慎測試
- 使用的傳承並只在有意義的地方(喜歡構圖)
- 嘗試堅持開放/關閉的原則。
- (最重要的)KISS
很多工作在擴大和增加:-)
編輯:我要補充,你列出的規則是不是唯一的OO
不確定任何規則。所有這些提到的事情都更像是面向對象的範例。還有我們按照像一些建議,
- 分離關注的
- 每類單一責任
- 宗教成分在繼承
- 編寫接口
- 加上全部由Billybob提到,已經
這些OO原則是直接從Head First Design Patterns:
- 封裝內容不同而不同
- 計劃到接口,而不是實現
- 青睞組成了繼承
- A類應該只有一個理由以改變(單一職責原則)
- 子類型必須是可替代的R基本(里氏Substitition原理)
- 類shoule對擴展開放,對修改關閉(開閉原則)
據和Pragmatic Programmers - 規則是:
- 保持乾燥(不要重複自己)
- 保持它SHY(請確保您的類具有高內聚,低耦合)
- ,並告訴其他人(關注點分離)
有沒有 「規則」 對OOP。
有4種語言屬性可以使語言成爲面向對象或不是(這些是你在問題中列出的東西)。
其餘的材料有指導。我讀過的最好/最有用的指導是GRASP
許多建議不容易被外行(非CS專業)理解。我認爲GRASP是務實和平易近人的。
我認爲GRASP很好,因爲它提出了OO的名稱中最關鍵的部分 - 責任分配(對象不是程序員)。
兩個最關鍵的GRASP概念,其他所有其他來源都是耦合和內聚。這兩個概念/原則驅動所有其他模式和方法。
順便說一句 - 我只是採訪你嗎?你錯誤地轉錄了這個問題...
- 1. 質數是否有規則?
- 2. 是否有使用argparse的規則?
- 3. 是單一責任原則OOP的一個規則?
- 4. 訂購CSS規則是否有任何規則?
- 5. fxcop是否檢查所有規則?
- 6. Scrapy BaseSpider類是否有「規則」選項
- 7. vuejs是否有任何linting規則
- 8. 嵌套CSS規則是否有效?
- 9. python是否有文件命名規則?
- 10. XOR密碼是否有任何規則?
- 11. 是否有可能得到的SonarQube常規規則列表
- 12. Class比OOP規則更喜歡它的私有成員?
- 13. 是否有有效的Maven開發人員角色的規則?
- 14. 正則表達式規則,以檢查是否有子域
- 15. RxJava和FasterXML是否有有效的proguard規則?
- 16. 是否有可能控制CSS規則不允許其他規則改變它?
- 17. 根據C++的規則是否合法?
- 18. 是否可以將多個規則流組分配給規則?
- 19. ModSecurity:是否按規則ID升序執行規則?
- 20. 是否有bash的規範?
- 21. AS3 OOP原則 - 有多遠
- 22. Postgres是否具有平等的MySQL的排序規則?
- 23. 在decltype(auto)的情況下是否有lambda的特殊規則?
- 24. NDepend是否具有所有FX Cop規則
- 25. Scrapy規則否認
- 26. 是否有一組不同的規則爲移動css/html
- 27. 命名變量是否有特定的語法規則?
- 28. HTML文檔中是否有關於Lang屬性的新規則?
- 29. 是否有描述cstyle規則的文檔?
- 30. 是否有自動的方式來重複刪除.gitignore規則?
都不是你:)。順便說一下,我們將如何在非OO語言中練習繼承,多態性等。我相信所有這4個都是面向對象的範例。 – 2008-12-30 07:01:14