4

我是SOLIDDRY等软件设计原则的忠实粉丝。面向对象软件设计还有哪些其他原则?

笔记。我不是在寻找诸如“评论你的代码”之类的答案,而是寻找像鲍勃叔叔所讨论的那样的面向对象设计原则。

4

8 回答 8

6

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

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)
  • Scrum
  • 智能(敏捷开发)
  • 关注点分离 (SoC)
  • 面向服务的建模
  • 软件工艺
  • 软件系统安全
  • 螺旋模型
  • 测试驱动开发 (TDD)
  • 统一流程 (UP)
  • V型
  • 瀑布模型
  • 轮辐模型
  • 越差越好(新泽西风格,与麻省理工学院的方法相比)
  • 极限
  • 你不需要它(YAGNI)
  • 零一无限
于 2009-07-06T22:47:37.390 回答
4

高凝聚力- 您正在设计的模块的职责有多集中。

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

于 2009-07-06T22:43:43.763 回答
2

于 2009-07-06T22:38:13.697 回答
2

选择组合而不是继承,就是其中之一。

许多人,尤其是那些刚接触 OO 的人,当他们真正需要的是使用组合时,就会开始扩展类。真的,如果您应该问自己,新的B级是A级吗?如果没有,那么你不应该延长。

例如,假设我有一个PersonClass,一个CarClass,我想创建一个名为 class 的新DrivenCar类。一个天真的实现会说(假设我们有多重继承)

class DrivenCar extends Person, Car  { ... }

DrivenCar 是 Person 的一种吗?不,所以它不应该扩展 Person。DrivenCar 是汽车吗?是的,所以扩展是有意义的

使用组合,实现看起来像

class DrivenCar extends Car {
    private Person driver;
}
于 2009-07-06T22:42:15.887 回答
2

GRASP模式。是的,它们看起来相当微不足道。更像是精炼成其他更复杂的模式所展示的核心品质。

于 2011-02-22T03:56:39.570 回答
1

雅尼

于 2009-07-06T22:37:28.503 回答
0

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

于 2009-07-06T22:50:25.030 回答
0

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

于 2009-07-06T22:55:24.723 回答