OO软件设计原则

时间:2009-07-06 22:29:10

标签: oop principles design-principles

我非常喜欢软件设计原则,例如 SOLID DRY 。面向对象软件设计还有哪些其他原则?

请注意。我不是在寻找像“评论你的代码”这样的答案,而是寻找像Uncle Bob所讨论的那样的OO设计原则。

8 个答案:

答案 0 :(得分:6)

来自维基百科的相当全面的列表:

http://en.wikipedia.org/wiki/List_of_software_development_philosophies

  • 敏捷软件开发
  • 敏捷统一流程(AUP)
  • 行为驱动开发(BDD)
  • Big Design Up Front(BDUF)
  • 布鲁克斯定律
  • 大教堂和集市
  • 代码和修复
  • 建筑师设计方法论(CDM)
  • 牛仔编码
  • Crystal Clear
  • 设计驱动开发(D3)
  • 不要重复自己(干)或一次性(OAOO),单点真相(SPoT)
  • 动态系统开发方法(DSDM)
  • 极限编程(XP)
  • 功能驱动开发
  • 好莱坞原则
  • 迭代和增量开发
  • 联合应用程序设计,即JAD或“联合应用程序开发”
  • Kaizen
  • 看板
  • KISS原则(保持简单,愚蠢)
  • 精益软件开发
  • Microsoft Solutions Framework(MSF)
  • 模型驱动架构(MDA)
  • 开源
  • 打开统一流程
  • 快速而肮脏
  • Rational Unified Process(RUP)
  • Scrum
  • 智能(敏捷开发)
  • 关注点分离(SoC)
  • 面向服务的建模
  • 软件工艺
  • 软件系统安全
  • 螺旋模型
  • 测试驱动开发(TDD)
  • 统一流程(UP)
  • V-Model
  • 瀑布模型
  • 轮辐模型
  • 更糟糕的是(新泽西风格,与麻省理工学院的方法形成鲜明对比)
  • Xtreme
  • 你不需要它(YAGNI)
  • Zero One Infinity

答案 1 :(得分:4)

High Cohesion - 您正在设计的模块的职责重点。

Low Coupling - 模块依赖其他模块的程度。

答案 2 :(得分:2)

答案 3 :(得分:2)

选择继承的成分,是一个。

许多人,特别是那些刚接触OO的人,在他们真正需要的是使用作文时,会开始扩展课程。真的,如果你应该问自己,新的B级是A级吗?如果没有,那么你不应该延长。

例如,假设我有一个Person类,一个Car类,我想创建一个名为DrivenCar类的新类。一个天真的实现就是说(让我们假装我们得到了多重继承)

class DrivenCar extends Person, Car  { ... }

DrivenCar是一种人吗?不,所以不应该扩展Person。 DrivenCar是一辆车吗?是的,因此扩展

是有意义的

使用合成,实施将是

class DrivenCar extends Car {
    private Person driver;
}

答案 4 :(得分:2)

GRASP模式。是的,它们似乎相当微不足道。更像是蒸馏到其他更多参与模式所展示的核心品质。

答案 5 :(得分:1)

答案 6 :(得分:0)

接口。大多数设计模式都基于界面和分离。实施

答案 7 :(得分:0)

当您的API预计会增长时,请使用Abstract类而不是Interface。在Interface中添加新方法需要更改实现它的所有类。