【问题标题】:Design Patterns in Smalltalk [closed]Smalltalk 中的设计模式
【发布时间】:2019-08-11 13:52:50
【问题描述】:

人们常说设计模式主要用于静态类型语言,如 C++ 和 Java,我也同意这一点。但在this articleRobert Martin 写道

说起来真奇怪。 Smalltalk 是一种动态语言,发挥了重要作用。

由于我没有使用 Smalltalk 的经验,我想问一下 Smalltalk 中是否经常使用诸如策略或访问者之类的模式?我不认为你需要“动态语言”

【问题讨论】:

  • 天哪,那篇文章真是个稻草人。既然它推出 Smalltalk 来捍卫设计模式,还应该注意到 Alan Kay(Smalltalk 的发明者)鄙视设计模式:stackoverflow.com/a/38685428/1235165

标签: design-patterns smalltalk


【解决方案1】:

一本关于如何在 Smalltalk 中实现设计模式的优秀书籍是: https://www.amazon.com/Design-Patterns-Smalltalk-Companion/dp/0201184621

如果你能读懂一点 Smalltalk,我认为这本书比 GoF 书更清楚地了解了标准设计模式。

你为什么会这样问?在我看来,我认为这是因为 Smalltalk 没有静态类型声明,因此代码更短且更易于理解。所以你更容易掌握图案的“形状”。

我特别喜欢这本书中访客的介绍。

【讨论】:

    【解决方案2】:

    从历史上看,Kent Beck 是最早将设计模式应用到 Ward Cunningham 编程中的人之一,这主要应用于 Smalltalk。
    https://en.wikipedia.org/wiki/Software_design_pattern

    他在 1996 年出版的 Smalltalk 最佳实践模式一书中推广了其中一些模式。
    https://en.m.wikipedia.org/wiki/Kent_Beck

    即使四人帮的作品在 1994 年在 Kent Beck 的书之前出版,在 Smalltalk 中发现很多这样的模式也不足为奇。

    具有讽刺意味的是,一旦将这些设计模式应用于静态类型语言,它们就极大地帮助了它们。

    【讨论】:

      【解决方案3】:

      您提到的文章很好地解释了设计模式是什么,我会在您的问题的上下文中添加更多细节。

      设计模式通过基本上降低耦合和增加内聚,提供了提高软件质量的很好理解的方法。这两个属性是任何软件所固有的,无论它是用静态类型、动态类型、基于消息/面向对象、函数式还是命令式语言编写的。

      虽然动态类型语言和静态类型语言之间的模式可能略有不同,但它们仍然为代码的设计方式提供了有用的概念化。

      实际上,原始设计模式书籍的许多(如果不是全部)作者都非常精通 smalltalk,并且可能在使用 Smalltalk 代码时发现了这些模式。原书中对 Smalltalk 的提及有数百次,并且许多原始模式都应用在 Smalltalk 系统中。

      如果您打开任何 Smalltalk,访问者是最容易区分的之一,因为它具有特殊的 visit/accept api,用于遍历许多树状结构,如解析树编译器,或用户界面元素层次结构中的节点。

      【讨论】:

      • 我还要添加我对设计模式的历史观点。到 gof 书出版时,Smalltalk 和 C++ 等语言已经非常流行,但是通过充分利用多态性来编写设计良好的代码的技术仍然不那么普遍。设计模式在这方面特别强大:展示了应该如何使用多态性。
      【解决方案4】:

      访问者模式(以及许多其他模式)在 Smalltalk 中被广泛使用。例如 Smalltalk 方法的解析和编译使用访问者。代码着色和格式化也是典型的例子。还有很多其他情况,我之所以提到这些是因为方法编译在开发环境中动态发生(例如,编译器能够在运行时自行修改并立即获取更改)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 1970-01-01
        相关资源
        最近更新 更多