最近我听说OOP(Java)有9条规则。我只知道四个是抽象,多态,继承和封装。 OOP还有更多规则吗?
答案 0 :(得分:41)
好像你正在寻找的是Principles of Object-Oriented Design。
摘自Agile Software Development Principles, Patterns, and Practices。这些原则是数十年软件工程经验中来之不易的产品。它们不是单一思维的产物,但它们代表了大量软件开发人员和研究人员的整合和着作。虽然它们在这里被提出作为面向对象设计的原则,但它们确实是软件工程长期原则的特例。
SRP单一责任原则一个班级应该只有一个改变的理由。
OCP开放原则软件实体(类,包,方法等)应该是可以扩展的,但是关闭以进行修改。
LSP Liskov Substition Principle 子类型必须可替代其基类型。
DIP依赖性倒置原则抽象不应该依赖于细节。细节应该取决于抽象。
ISP接口隔离原则 客户不应该被迫依赖他们不使用的方法。接口属于客户端,而不属于层次结构。
REP释放 - 重用等效原则 重复使用的颗粒是释放的颗粒。
CCP共同关闭原则 应该针对相同类型的更改一起关闭包中的类。影响封闭包的更改会影响该包中的所有类,而不会影响其他包。
CRP共同重用原则 包中的类可以一起重用。如果重用一个包中的一个类,则可以全部重用它们。
ADP Acylcic依赖原则 在依赖图中不允许循环。
SDP稳定的依赖原则 取决于稳定的方向。
SAP稳定抽象原则 一个包应该是抽象的,因为它是稳定的。
答案 1 :(得分:6)
不确定任何规则。所有这些提到的东西对我来说更像是OO范例。我们遵循的建议很少,
答案 2 :(得分:5)
这些OO原则直接来自Head First Design Patterns:
答案 3 :(得分:4)
这些是概念,而不是规则。真的没有规则,只做出决定,有些设计比其他设计更好,有些设计比其他更好:-)
虽然有很多指导原则:-)有些是特定于语言的(C ++充满了它们),其他则是特定于OO的。列出的内容太多了: - )
在我的头顶,重要的是:
充分展开并添加: - )
编辑:我应该补充一下,你列出的规则并不是OO独有的
答案 4 :(得分:4)
根据实用程序员的说法 - 规则是:
答案 5 :(得分:3)
OOP没有“规则”。
有4种语言属性可以使语言面向对象(这些是您在问题中列出的内容)。
其他材料都有指导方针。我读过的最好/最有用的指南是GRASP
非专业人士(非CS专业)不容易理解许多建议。我认为GRASP务实且平易近人。
我认为GRASP很好,因为它建议OO名称中最重要的部分 - 责任分配(对象不是程序员)。
两个最关键的GRASP概念,其他一切来源于耦合和凝聚力。这两个概念/原则驱动所有其他模式和方法。
顺便说一句 - 我刚刚采访过你吗?你错误地转录了这个问题......