Steve Yegge 最近发表了一篇关于他所谓的通用设计模式的有趣博客文章。在那里,他详细介绍了使用原型作为建模工具,而不是类。与继承相比,我喜欢这种引入更少耦合的方式。但这也是通过类实现类而不是继承来实现的类的东西。有没有其他人有使用原型的成功案例,并且可以帮助解释与类相比,使用原型在哪些方面具有优势。我想它归结为静态建模与动态建模,但更多示例将非常受欢迎。
Anders Rune Jensen
问问题
2435 次
3 回答
13
一个有趣的地方是,使基于原型的语言成为面向对象的语言很容易,但很难让一种面向对象的语言基于原型的行为。
- Alex Arnell 的inheritance.js是一段简短而甜蜜的代码,它使JavaScript 成为面向对象的行为,并具有对父“类”的访问权限。
- 这是 John Resig 针对同一问题的解决方案之一:http: //ejohn.org/blog/simple-javascript-inheritance/。
- Programming in Lua 的第 16 章描述了 Lua 中的面向对象。具体来说,第 16.2 节给出了一个很好的继承示例。
除了您提到的组合与继承之外,作为原型的 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 回答