OOP有什么规则吗?

时间:2008-12-30 06:37:44

标签: oop rules solid-principles package-design

最近我听说OOP(Java)有9条规则。我只知道四个是抽象,多态,继承和封装。 OOP还有更多规则吗?

6 个答案:

答案 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范例。我们遵循的建议很少,

  • 分离关注
  • 每班一次性责任
  • 首选组合而不是继承
  • 编程接口
  • 加上Billybob提到的所有内容,已经

答案 2 :(得分:5)

这些OO原则直接来自Head First Design Patterns

  • 封装Varies
  • 编程到接口,而不是实现
  • 赞成组合而不是继承
  • 一个班级应该只有一个改变的理由(单一责任原则
  • 子类型必须可替代其基础( Liskov替代原则
  • 课程应该打开以进行扩展,但已关闭以进行修改(开放式原则

答案 3 :(得分:4)

这些是概念,而不是规则。真的没有规则,只做出决定,有些设计比其他设计更好,有些设计比其他更好:-)

虽然有很多指导原则:-)有些是特定于语言的(C ++充满了它们),其他则是特定于OO的。列出的内容太多了: - )

在我的头顶,重要的是:

  • 松散耦合,高内聚
  • 编写您测试的可测试类
  • 谨慎地使用遗产,只在有意义的地方使用遗产(更喜欢构图)
  • 尝试坚持开/关原则。
  • (最重要的)KISS

充分展开并添加: - )

编辑:我应该补充一下,你列出的规则并不是OO独有的

答案 4 :(得分:4)

根据实用程序员的说法 - 规则是:

  • 保持干燥(不要重复自己)
  • 保持SHY(确保您的班级具有高凝聚力和低耦合度)
  • 并告诉其他GUY(关注点分离)

http://media.pragprog.com/articles/may_04_oo1.pdf

答案 5 :(得分:3)

OOP没有“规则”。

有4种语言属性可以使语言面向对象(这些是您在问题中列出的内容)。

其他材料都有指导方针。我读过的最好/最有用的指南是GRASP

非专业人士(非CS专业)不容易理解许多建议。我认为GRASP务实且平易近人。

我认为GRASP很好,因为它建议OO名称中最重要的部分 - 责任分配(对象不是程序员)。

两个最关键的GRASP概念,其他一切来源于耦合和凝聚力。这两个概念/原则驱动所有其他模式和方法。

顺便说一句 - 我刚刚采访过你吗?你错误地转录了这个问题......