最近我听说OOP(Java)有9个规则。我知道的只有四个:抽象、多态、继承和封装。还有其他的OOP规则吗?
最近我听说OOP(Java)有9个规则。我知道的只有四个:抽象、多态、继承和封装。还有其他的OOP规则吗?
看起来你需要的是面向对象设计原则。
这些原则从敏捷软件开发原则、模式和实践中总结而来。这些原则是几十年软件工程经验的艰苦成果。它们不是一个人的思考产物,而是许多软件开发者和研究人员的积累和著作。虽然它们被介绍为面向对象设计原则,但它们实际上是长期存在的软件工程原则的特殊情况。
SRP 单一职责原则 一个类应该只有一个改变的原因。
OCP 开放-关闭原则 软件实体(类、包、方法等)应该对扩展开放,对修改关闭。
LSP 里氏替换原则 子类型必须能够替换其基类型。
DIP 依赖倒置原则 抽象不应该依赖于具体细节,细节应该依赖抽象。
ISP 接口隔离原则 客户端不应该被迫依赖于它们不使用的方法。接口属于客户端,而不是层次结构。
REP 发布-复用等价原则 复用的颗粒度应该与发布的颗粒度相同。
CCP 共同封闭原则 一个包中的类应该一起关闭,以抵御同类变化的影响。影响一个封闭包的变化会影响该包中的所有类,但不会影响其他包。
CRP 共同重用原则 一个包中的类是一起被复用的。如果你复用了一个包中的类,那么你也复用了其中的所有类。
ADP 无环依赖原则 在依赖图中不允许出现循环。
SDP 稳定依赖原则 向稳定方向依赖。
SAP 稳定抽象原则 一个包应该尽可能地抽象,同时保持其稳定性。
我不确定有哪些规则。对我来说,所有这些提到的东西更像是面向对象的范例。我们遵循一些建议,例如:
这些面向对象的原则来自于Head First Design Patterns:
面向对象编程(OOP)没有“规则”。
有四个语言属性决定一个编程语言是否面向对象(这些属性是你在问题中列出的)。
其他资料都是指导方针。我读过的最好/最有帮助的指导方针是GRASP。
许多建议对于非计算机科学专业的人来说不容易理解。我认为GRASP是实用和易于理解的。
我认为GRASP很好,因为它在名称中提到了OO中最关键的部分——责任分配(给对象而不是程序员)。
从中衍生出所有其他模式和方法的两个最关键的GRASP概念是耦合和内聚性。这两个概念/原则推动了所有其他模式和方法。
顺便说一句——我刚刚面试你了吗?你抄错了问题……