最近我听说OOP(Java)有9条规则。我知道只有四个是抽象,多态,继承和封装。 OOP是否还有其他规则?是否有OOP的规则?
回答
看起来像你要找的是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稳定抽象原理 的包装应尽可能抽象,因为它是稳定的。
这些是概念,而不是规则。实际上没有规则,只是做出决定,有些设计比其他设计更好,有些比其他设计更好:-)
虽然有很多指导原则:-)有些是语言特定的(C++充斥着它们)其他是面向对象的。举不胜举,虽然:-)
关闭我的头顶,重要的有:
- 松耦合,高内聚
- 编写可测试类,你谨慎测试
- 使用的传承并只在有意义的地方(喜欢构图)
- 尝试坚持开放/关闭的原则。
- (最重要的)KISS
很多工作在扩大和增加:-)
编辑:我要补充,你列出的规则是不是唯一的OO
不确定任何规则。所有这些提到的事情都更像是面向对象的范例。还有我们按照像一些建议,
- 分离关注的
- 每类单一责任
- 宗教成分在继承
- 编写接口
- 加上全部由Billybob提到,已经
这些OO原则是直接从Head First Design Patterns:
- 封装内容不同而不同
- 计划到接口,而不是实现
- 青睐组成了继承
- A类应该只有一个理由以改变(单一职责原则)
- 子类型必须是可替代的R基本(里氏Substitition原理)
- 类shoule对扩展开放,对修改关闭(开闭原则)
据和Pragmatic Programmers - 规则是:
- 保持干燥(不要重复自己)
- 保持它SHY(请确保您的类具有高内聚,低耦合)
- ,并告诉其他人(关注点分离)
有没有 “规则” 对OOP。
有4种语言属性可以使语言成为面向对象或不是(这些是你在问题中列出的东西)。
其余的材料有指导。我读过的最好/最有用的指导是GRASP
许多建议不容易被外行(非CS专业)理解。我认为GRASP是务实和平易近人的。
我认为GRASP很好,因为它提出了OO的名称中最关键的部分 - 责任分配(对象不是程序员)。
两个最关键的GRASP概念,其他所有其他来源都是耦合和内聚。这两个概念/原则驱动所有其他模式和方法。
顺便说一句 - 我只是采访你吗?你错误地转录了这个问题...
- 1. 质数是否有规则?
- 2. 是否有使用argparse的规则?
- 3. 是单一责任原则OOP的一个规则?
- 4. vuejs是否有任何linting规则
- 5. fxcop是否检查所有规则?
- 6. 是否有可能得到的SonarQube常规规则列表
- 7. 是否有可能控制CSS规则不允许其他规则改变它?
- 8. 是否有bash的规范?
- 9. AS3 OOP原则 - 有多远
- 10. 在decltype(auto)的情况下是否有lambda的特殊规则?
- 11. Postgres是否具有平等的MySQL的排序规则?
- 12. Scrapy规则否认
- 13. 是否有描述cstyle规则的文档?
- 14. 是否有灵活的促销和折扣规则引擎?
- 15. 是否有一组不同的规则为移动css/html
- 16. 是否有更改Windows Server 2008上防火墙规则的API?
- 17. 排序规则转换是否正常?
- 18. 混叠规则是否对称?
- 19. 这个mod_rewrite规则是否正确?
- 20. ACL规则是否适用于事件?
- 21. utf8_unicode_cs排序规则是否存在?
- 22. 是否有可能检索通过IOT规则
- 23. Pymongo是否具有内置验证规则?
- 24. 是否有使用汇编语言规则登记
- 25. Android:测试用例是否有任何命名规则
- 26. 这个C++静态分析规则是否有意义?
- 27. 更改Firebase验证规则是否会影响现有数据?
- 28. htaccess重写规则是否有助于防止SQL注入?
- 29. 是否只有规则会在共享eslint配置中扩展?
- 30. 是否有可能以编程方式创建散列规则?
都不是你:)。顺便说一下,我们将如何在非OO语言中练习继承,多态性等。我相信所有这4个都是面向对象的范例。 – 2008-12-30 07:01:14