最近我听说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. 订购CSS规则是否有任何规则?
- 5. fxcop是否检查所有规则?
- 6. Scrapy BaseSpider类是否有“规则”选项
- 7. vuejs是否有任何linting规则
- 8. 嵌套CSS规则是否有效?
- 9. python是否有文件命名规则?
- 10. XOR密码是否有任何规则?
- 11. 是否有可能得到的SonarQube常规规则列表
- 12. Class比OOP规则更喜欢它的私有成员?
- 13. 是否有有效的Maven开发人员角色的规则?
- 14. 正则表达式规则,以检查是否有子域
- 15. RxJava和FasterXML是否有有效的proguard规则?
- 16. 是否有可能控制CSS规则不允许其他规则改变它?
- 17. 根据C++的规则是否合法?
- 18. 是否可以将多个规则流组分配给规则?
- 19. ModSecurity:是否按规则ID升序执行规则?
- 20. 是否有bash的规范?
- 21. AS3 OOP原则 - 有多远
- 22. Postgres是否具有平等的MySQL的排序规则?
- 23. 在decltype(auto)的情况下是否有lambda的特殊规则?
- 24. NDepend是否具有所有FX Cop规则
- 25. Scrapy规则否认
- 26. 是否有一组不同的规则为移动css/html
- 27. 命名变量是否有特定的语法规则?
- 28. HTML文档中是否有关于Lang属性的新规则?
- 29. 是否有描述cstyle规则的文档?
- 30. 是否有自动的方式来重复删除.gitignore规则?
都不是你:)。顺便说一下,我们将如何在非OO语言中练习继承,多态性等。我相信所有这4个都是面向对象的范例。 – 2008-12-30 07:01:14