我真的对 GOF 和 GRASP 模式之间的区别感到困惑吗?甚至两者都有助于改进面向对象的实践
2 回答
简短的回答:
GoF在设计模式中被提及。GRASP是设计原则。设计原则比设计模式更抽象。
长答案:
软件工程的主要目的是开发合适的软件。SDLC在顶层展示了软件工程的步骤。 软件设计是 SLDC 步骤之一。面向对象的软件设计是一种流行的软件设计方法。
要执行面向对象的软件设计,有多种资源(在书籍、教程和论文中)具有不同的名称,例如:指南、原则、启发式、模式、样式等。
这些名称之间的区别在于它们的抽象。顶级是主要原则,其他级别是有助于达到这些主要原则的细节。
顶层
在顶层,教程介绍了主要原则。(基于面向对象的分析和应用程序设计,Grady Booch 等人,1991 年)
面向对象的主要原则
- 抽象
- 封装(信息隐藏)
- 层次结构(继承、聚合)
- 模块化(高内聚和松散耦合)
所有后续的原则和模式都与这个主要原则相关,并尝试支持和改进它们。
第二级
在第二级资源中有原则,并试图支持和改进面向对象的主要原则。
三级
这一级别的资源称为设计模式。Gof (Gang of Four) 有第一本关于设计模式的书。有 23 种设计模式来支持面向对象设计的主要原则和其他原则。
在 GoF 之后,许多关于在特定编程语言和特定框架中使用设计模式的书籍(例如 J2EE 设计模式、JQuery 设计模式等)
设计模式更详细,更接近于编程语言。但是,主要原则(顶层)和原则(第二层)是如此抽象。
第四级
在这个级别,资源称为:启发式。
这个级别的资源比其他组更详细和非常具体。
最好的资源是面向对象的设计启发式(72 启发式),Arthur J. Riel 的书,1996
第五级
在最后一级,有Guideline。
All Do It , Don't Do it , Avoid , ... 书中的指导方针可以收集在这个组中。
GOF 是模式,即针对反复出现的问题的经过验证的设计解决方案。GRASP 是原则,不依赖于任何特定的问题域,因此在任何情况下都是如此