史蒂夫·叶格(Steve Yegge)最近发布了一个关于他所说的通用设计模式的
interesting blog post.在那里,他将使用原型作为建模工具,而不是类.我喜欢与继承相比引入更少耦合的方式.但是,通过使用类来实现类,而不是继承,这也是类可以得到的.其他任何人都有使用原型的成功案例,也许有助于解释与类相比,原型的使用优势.我想这是静态建模与动态建模,但更多的例子将是非常受欢迎的.
解决方法
一个有趣的是,很容易使基于原型的语言成为OO,但是很难使OO语言基于原型.
> Alex Arnell的inheritance.js是一个简短而甜蜜的代码块,使JavaScript可以作为OO,完成访问父级“Class”.
>这是John Resig解决同样问题的一个问题:http://ejohn.org/blog/simple-javascript-inheritance/.
> Chapter 16 of Programming in Lua描述了Lua中的对象方向.具体来说,section 16.2给出了一个很好的继承例子.
除了你所提及的组合与继承之外,OO是什么样的样子不完全清楚.
原型语言使得复杂的继承行为变得容易.您可以实现类似multiple inheritance,mixin的行为,或者只需从一个对象中选择要添加的对象即可.
Wikipedia’s article提到:“基于原型的编程的倡导者经常认为,基于类的语言鼓励一个发展模式,首先侧重于分类和类之间的关系.相比之下,基于原型的程序设计被认为是鼓励程序员专注于一些示例的行为,后来担心将这些对象分类成类似于类的方式使用的原型对象.“
这不是说原型范例是所有的利弊.如果OO更具限制性,那是因为它是选择的.如果不小心,我可以看到所有的灵活性会让你陷入困境.