【发布时间】:2010-09-28 19:37:33
【问题描述】:
最近听说OOP(Java)有9条规则。我只知道抽象、多态、继承和封装四个。 OOP 还有其他规则吗?
【问题讨论】:
标签: oop rules solid-principles package-design
最近听说OOP(Java)有9条规则。我只知道抽象、多态、继承和封装四个。 OOP 还有其他规则吗?
【问题讨论】:
标签: oop rules solid-principles package-design
您正在寻找的似乎是Principles of Object-Oriented Design。
总结自Agile Software Development Principles, Patterns, and Practices。这些原则是数十年软件工程经验来之不易的产物。它们不是单一思想的产物,而是代表了众多软件开发人员和研究人员的整合和著作。尽管它们在这里作为面向对象设计的原则提出,但它们确实是长期存在的软件工程原则的特例。
SRP 单一职责原则一个类应该只有一个改变的理由。
OCP 开闭原则软件实体(类、包、方法等)应该对扩展开放,对修改关闭。
LSP Liskov 替换原则子类型必须可以替换它们的基本类型。
DIP 依赖倒置原则 抽象不应该依赖于细节。细节应该取决于抽象。
ISP 接口隔离原则 不应强迫客户依赖他们不使用的方法。接口属于客户端,而不属于层次结构。
REP 发布-重用等效原则 重用的颗粒就是释放的颗粒。
CCP 共同闭合原则 包中的类应该针对相同类型的更改关闭在一起。影响已关闭包的更改会影响该包中的所有类,而不会影响其他包。
CRP 通用重用原则 包中的类可以一起重用。如果你重用包中的一个类,你就重用了它们。
ADP 无环依赖原则 依赖图中不允许有循环。
SDP 稳定依赖原则 取决于稳定的方向。
SAP 稳定抽象原则 一个包应该是抽象的,因为它是稳定的。
【讨论】:
不确定任何规则。所有这些提到的东西对我来说更像是面向对象的范例。我们遵循的建议很少,例如,
【讨论】:
这些OO原则直接来自Head First Design Patterns:
【讨论】:
这些是概念,而不是规则。真的没有规则,只是要做出决定,有些设计比其他设计好,有些比其他设计好得多:-)
虽然有很多指导方针 :-) 有些是特定于语言的(C++ 中充斥着它们),有些是特定于 OO 的。不过太多了,无法列出:-)
在我的脑海中,重要的是:
大量扩展和添加:-)
编辑:我应该补充一下,您列出的规则不是 OO 独有的
【讨论】:
根据实用程序员 - 规则是:
【讨论】:
OOP 没有“规则”。
有 4 个语言属性可以使语言面向对象或不面向对象(这些是您在问题中列出的内容)。
其余的材料都有指导方针。我读过的最好/最有用的指南是GRASP
许多建议对于外行(非 CS 专业的学生)来说并不容易理解。我认为 GRASP 务实且平易近人。
我认为 GRASP 很好,因为它在名称中暗示了 OO 中最关键的部分 - 职责分配(针对对象而不是程序员)。
其他一切都源于的两个最关键的 GRASP 概念是耦合和内聚。这两个概念/原则推动了所有其他模式和方法。
顺便说一句 - 我刚刚采访过你吗?你把问题抄错了……
【讨论】: