GoF中有任何模式吗?

Tho*_*rig 8 design-patterns

我目前正在学习设计模式考试(将于明天举行......).在其中一个"测试考试"中,我发现了以下问题:

Jim Coplien在邀请的演讲中说,GoF书中甚至没有一种设计模式.你对此有何看法?

因为我没有参加这个特别的讲座(这是上学期;)我不知道他的意思是什么.我没有证据表明Jim Coplien说过,但我认为这无关紧要.

你觉得这个陈述对他来说意味着什么?

(我不确定这个问题是否适合这个论坛,不过,我想问一下.)

Cop*_*ope 36

模式:这个概念基于亚历山大的作品

GoF声称从Christopher Alexander那里获得了它的模式灵感(正如他们在本书的前面所说的那样),他在更广泛的设计领域推广了这个术语.亚历山大的一种模式:永远是模式语言的一个元素; 有助于深刻的人类感受; 并且在本质上总是几何的.至少有一些GoF模式至少在其中一个点上失败,并且几个失败了.虽然"模式"是一个中性的英语单词,但是GoF工作的文化和历史根源,加上他们对亚历山大灵感的启发,使其受到其祖先的基本标准的判断,并且它缺乏.即使他们知道,并表达他们知道,他们与亚历山大分道扬铛,他们仍然选择使用他精心设计,研究和推广的术语,并让我们对此负责.(也就是说,他们都是有价值的熟人;我和几年前我们失去的John Vlissides很接近,并且与Richard Helm和Eric Gamma就这背后的深层问题进行了很好的对话.我与Ralph的讨论不那么有趣了因为他们停在工程水平.)

历史根源

单词意味着事情.当他们写这本书时,GoF(或整个软件社区)并没有很好地理解亚历山大的"模式"一词的含义,但他们建立在时间的粗俗观念基础之上,这种观念基于三个来源: 1. Erich Gamma的博士论文; 2. Ralph Johnson的框架工作,以及3.C++成语书(你可以在GoF书中自己对6.3中的来源的解释中找到这一点).(哦,Knuth也是一种影响力.)我继续挑战作者,但是人们喜欢它,他们喜欢人们喜欢它,所以势头还在继续.

几年后(2004年12月2日),一位GoF会写信给我,描述他最终了解亚历山大试图传达的"啊哈"体验.这与GoF书籍内容的基础有很大不同:

最后通过一条漫长的曲折路线,"生成模式"和零碎的增长......主要是通过软件的一些有趣的通用属性(无标度和小世界)

我有时候有点慢......但到最后到达那里......

GoF模式解决了一个意外而非复杂的问题

不幸的是,人们发现它们有用是对现代编程语言的起诉.这些语言没有适当的结构来表达亚历山大认为具有模式特征的破碎对称性,这是复杂设计所固有的(有序性,第187页:" ...一般来说,大的对称性简化的新古典主义者类型很少有助于事物的生命,因为在世界上任何复杂的整体中,在工作中几乎总是复杂的,不对称的力量 - 位置,背景和功能 - 需要打破对称性 " ; op cit.,pp.63-4:" 自然也创造了美丽的结构,这些结构受到重复应用结构保留变换的支配.在这方面,我认为有必要说出我所说的结构保持变换.与物理学中所谓的"对称性破坏"非常密切相关. ").Java在这方面特别糟糕,但它的祖先是Smalltalk.C++具有丰富的功能来描述局部对称破坏,但大多数人并不真正知道如何使用它们.理查德·加布里埃尔 - 他也与亚历山大密切合作,并且拥有像CLOS和Scheme这样的语言 - 他说他根本不理解GoF模式,因为正确设计的语言(如CLOS或Scheme)不需要它们.我主要在那个阵营.

设计运动

这背后有许多设计理论可以追溯到设计运动(Thackara("现代主义设计",1989),Naur,Alexander,Cross("设计方法论的发展",1984)和其他作者在20世纪80年代).我总是惊讶于程序员对这一系列文献的了解程度如何,以及根据设计运动此时工作的明显结果,多少CS思维是错误的.我们这些在1993年创立模式学科(The Hillside Group的原始7)的人都熟悉这一文献的主题.PLoP会议演变了一系列文学,这些文学从这些基础中彻底下放,更加专注于神秘的知识而不是亚历山大所追求的"没有名字的品质".

成语的起源

我为C++程序员介绍习语的原因是允许他们在语言阻塞时进行面向对象的编程.现在,我们有更强大的方法,如DCI,大大减少了对习语的需求.模式仍然适用于域级 - 这符合亚历山大的愿景.已经写了一些好的模式语言; 例如,Hanmer(Fault-Tolerant Software Patterns,2007); 由Eloranta等人.(设计分布式控制系统,2014),以及亚历山大自己所指出的组织模式符合必要的标准(Coplien和Harrison,2004).

失去了战斗,但工作仍在继续

亚历山大和我(以及理查德加布里埃尔 - 阅读他的"软件模式" - 以及其他人)在这一早期重定向术语中失望,这一术语在被GoF重新定义之前已经在设计中得到了很好的确立.是的,因为他们称之为设计模式,它们是设计模式 - 在四人帮的任何关于设计模式的讨论的背景下.在更广泛的设计理论和架构方案中,它们不是:它们只是成语.即使作者自己说,这就是他们开始的方式.

为了将亚历山大的愿景恢复到软件社区,正在做出一些努力.ScrumPLoP®社区(http://scrumplop.org)非常重视亚历山大的所有模式.曾经为CES做IT工作的亚历山大老同事格雷格·布莱恩特已经向我伸出手,并告诉我他将亚历山大的愿景带回软件的工作,我们即将交易笔记.我确信Dick Gabriel总是有一些想法,尽管他和我有一段时间没有聊过.在平均时间我继续直接与亚历山大的同事,中野浩,谁连接亚历山大的想法(他直接在道德经中来表示工作永恒的)直接到他们在日本文化的相似之处.这比试图将其融入西方文化要好得多.这可能解释了能够理解我的主张的一些挫败感 - 虽然这不是专业从事知识业务的借口.

对Grumblers的一个例子

当然,所有这些基础都是公开的辩证法和研究问题,任何愿意花时间研究它的人都可以使用.它不像在这里那样可以被迅速解雇,这不是偶然的事.我花了20年时间 - 我可以直接访问这些来源.我可以理解普通程序员很难深入研究这些事情,但我建议你做一些研究,然后在完成一项功课之前解雇一个研究得很好的职位.这是StackOverflow的事情.

  • 对于那些认为生活是关于考试,或者可能关于认证的人来说是正确的.如果你认真考试,你可能无法理解我的答案,无论如何:-) (5认同)
  • @Cope感谢您的时间和精力.从源头上得到很好的答案!我学到了很多.再次感谢. (4认同)