2008-12-30 240 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概念,其他所有其他来源都是耦合和内聚。这两个概念/原则驱动所有其他模式和方法。

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