Actionscript 3.0,为什么缺少好的OOP元素?

时间:2008-12-29 17:53:12

标签: actionscript-3 oop

任何编写过actionscript 3.0的人都肯定注意到它缺乏对私有构造函数和抽象类的支持。有办法解决这些缺陷,比如从应该是抽象的方法中抛出错误,但是这些工作很烦人而且不是很优雅。 (从应该是抽象的方法中抛出错误是运行时检查,而不是编译时,这可能导致很多挫折)。

我知道actionscript 3.0遵循当前的ECMAscript标准,这就是它缺乏私有构造函数的原因,但是抽象类呢,它们不在ECMAscript标准中吗?

我想更具体的问题是为什么ECMAscript标准不支持私有构造函数?这是未来可以期待的事情吗?

我一直想知道这个有时会退出,任何见解都会非常感激。

3 个答案:

答案 0 :(得分:6)

私有构造函数和抽象类不是“好的OOP元素”。他们是源于C ++的好黑客。在更动态的语言中,通常不需要它们。

特别是抽象类是完全不需要的,因为您不必在祖先中声明接口以符合接口。事实上,你甚至不必从共同的祖先继承来使用某些多态性。

我不是说AS没有那样的东西会更好;相反,你应该用你正在使用的语言进行思考,而不是试图从你习惯的语言中进行翻译。

答案 1 :(得分:3)

在ActionScript 3所基于的旧ECMAScript 4标准中,未定义私有构造函数或抽象类。如果我没记错的话,ECMAScript工作组选择不实现这些更复杂的OOP功能,因为它们特别关注简单性和向后兼容旧版ECMAScript。我将我从他们那里听到的内容解释为“我们可能会在以后添加这些功能,但让我们慢慢来”。例如,抽象关键字是一个保留字,因此他们会记住这些内容。

值得注意的是,工作组选择以新的焦点重新启动下一版本的语言。这项工作被称为“和谐”,因为两个竞争对手的小组对ECMAScript未来的发展方向有不同的看法。这是一个妥协。 Harmony将比旧的ES4进展得慢得多,甚至已经在AS3中实现的类语法也将从最初的标准中删除。换句话说,他们会让它看起来更像今天的JavaScript一段时间,专注于其他一些对分支机构来说很重要的功能。这将成为ES3.1。稍后,将重新考虑类和一些类似Java的OOP功能以用于新的ES4。

虽然AS3怎么样?基本上,Adobe通过使用尚未完成的标准来攫取枪支,他们对政治有所了解。但是,Adobe intends to stay involved with the ECMAScript Working Group,他们可能会考虑添加工作组建议的功能。也就是说,AS3可能永远不会是未来ECMAScript的完整(或完全兼容)实现。那是什么意思?好吧,因为它们再次非标准,Adobe可以选择为ActionScript添加功能,即使这些功能不是标准的一部分。如果您认为抽象类或私有构造函数对您作为开发人员request these features in the public Flash Player bug database很重要,或者对现有功能请求投票,如果它们已经存在。

答案 2 :(得分:0)

我知道,这个问题真的很老了,但我只是偶然发现并且不得不修改它:

构造函数不是OO。对象应该由工厂实例化 抽象类不是OO。相反,应该使用接口(AS3具有)和mixin(AS3没有)。

AS3语言很差,但出于比这两个更基本的原因。 AS3基本上是AVM2字节码的结构化表示。 1:1映射很容易实现。而且我想,它可能会保持这样,因为Adobe显然对推动平台功能,商业创作工具和flex框架(包括mxml)更感兴趣。

格尔茨
back2dos

相关问题