面向对象的软件设计原则(OO Software Design Principles)

2019-06-25 04:53发布

我的软件设计原则,比如SOLIDDRY一个巨大的风扇。 对OO软件设计存在什么其他的原则是什么?

注意。 我不是在寻找像“注释代码”的答案,而是寻找OO设计原则通过类似讨论的那些Bob大叔 。

Answer 1:

维基百科了相当全面的清单:

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

  • 敏捷软件开发
  • 敏捷统一过程(AUP)
  • 行为驱动开发(BDD)
  • 大设计在前面(BDUF)
  • 布鲁克斯定律
  • 大教堂和集市
  • 代码和修复
  • 建构主义的设计方法(CDM)
  • 牛仔编码
  • 晶莹剔透
  • 设计驱动的开发(D3)
  • 不要重复自己(DRY)或一次且仅一次(OAOO),真理的单点(SPOT)
  • 动态系统开发方法(DSDM)
  • 极限编程(XP)
  • 特征驱动开发
  • 好莱坞原则
  • 迭代和增量开发
  • 联合应用设计,又名JAD或“联合应用开发”
  • 持续改善
  • 看板
  • KISS原则(保持简单,愚蠢的)
  • 精益软件开发
  • 微软解决方案框架(MSF)
  • 模型驱动架构(MDA)
  • 开源
  • 开放统一过程
  • 快速和肮脏
  • Rational统一过程(RUP)
  • 争球
  • 智能(敏捷开发)
  • 关注点分离(SOC)
  • 面向服务的建模
  • 软件工匠
  • 软件系统安全
  • 螺旋模型
  • 测试驱动开发(TDD)
  • 统一过程(UP)
  • V模型
  • 瀑布模型
  • 轮和辐射模型
  • 更糟糕的是更好的(新泽西州风格,对比与麻省理工的方法)
  • 复刻
  • 你是不是要去需要它(YAGNI)
  • 零壹无限


Answer 2:

高内聚 -如何重点是你正在设计模块的职责。

低耦合 -的程度模块依赖于其他模块。



Answer 3:



Answer 4:

选择组合物过度继承,是一个。

很多人,特别是那些刚接触OO将开始扩展类,当所有他们真正需要的是用的组合物。 真的,如果你要问你自己,是新B级A级? 如果没有,那么你不应该延长。

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

class DrivenCar extends Person, Car  { ... }

是DrivenCar一个类型的人? 不因此它不应该是延长人。 是DrivenCar车吗? 是是很有意义的扩展

使用组成implmentation会是什么样子

class DrivenCar extends Car {
    private Person driver;
}


Answer 5:

该GRASP模式。 是的,他们似乎相当琐碎。 更多类似蒸馏到核心的素质,另一方面,更复杂的图案展示。



Answer 6:

出口



Answer 7:

接口。 大多数的设计模式是基于接口与实现分离。



Answer 8:

当您的API预计将增长,使用抽象类,而不是接口。 添加在接口的新方法需要改变所有实现它的类。



文章来源: OO Software Design Principles