10

Steve Yegge 最近发表了一篇关于他所谓的通用设计模式的有趣博客文章。在那里,他详细介绍了使用原型作为建模工具,而不是类。与继承相比,我喜欢这种引入更少耦合的方式。但这也是通过类实现类而不是继承来实现的类的东西。有没有其他人有使用原型的成功案例,并且可以帮助解释与类相比,使用原型在哪些方面具有优势。我想它归结为静态建模与动态建模,但更多示例将非常受欢迎。

4

3 回答 3

13

一个有趣的地方是,使基于原型的语言成为面向对象的语言很容易,但很难让一种面向对象的语言基于原型的行为。

除了您提到的组合与继承之外,作为原型的 OO 会是什么样子并不完全清楚。

原型语言使复杂的继承行为变得容易。您可以实现多重继承类似 mixin的行为,或者只是从一个对象中挑选您想要添加到另一个对象的内容。

维基百科的文章提到:“基于原型编程的倡导者经常争辩说,基于类的语言鼓励一种首先关注分类和类之间关系的开发模型。相比之下,基于原型的编程被视为鼓励程序员专注于一些示例的行为,然后才担心将这些对象分类为原型对象,这些原型对象后来以类似于类的方式使用。”

这并不是说原型范式各有利弊。如果 OO 更具限制性,那是因为它选择这样做。如果您不小心,我可以看到所有这些灵活性可能会给您带来麻烦。

于 2008-10-26T02:50:32.463 回答
3

原型是继承的一种形式,只是对象直接从其他对象继承属性和行为,而不是从继承自其他类的类中获取属性和行为。

例如,查看基于原型的语言(例如 JavaScript)中的任何面向对象的代码。

于 2008-10-26T01:17:46.987 回答
1

对于那些感兴趣的人来说,NewtonScript是(是)一种双重语言:你有原型,你有类。您可以选择是继承自一个类、继承自原型还是继承自两者。

于 2009-11-20T03:52:43.050 回答