六、Qomo OpenProject中的一些关键词
1. JScript与JavaScript
JavaScript是最早由网景公司在它的浏览器产品Netscape Navigator 2.0提出并实现的脚本语言。原名LiveScript。它最初出现的目的是给页面元素提供交互的能力,例如检查<FORM>
表单中的输入值的有效性,并在必要时弹出一个提示对话框。
JavaScript只是借用了当时开始红火的Java语言的名字,却实在与Sun的Java语言没什么关系。
后来Microsoft在自己的Internet Explorer(IE)浏览器中发展自己的脚本引擎的时候,不得已地实现了当时已经成为事实标准的JavaScript脚本语言。事实上,如果不是Netscape的推动,可能现在只能在IE里面使用VBScript。
后来,Netscape公司将JavaScript提交给ECMA制定为标准,称之为ECMAScript,编号ECMA-262。
目前最新版为ECMA-262 3th Edition,通常简称为ECMAv3。
但Microsoft并不满足于模仿或者重现Netscape的JavaScript,于是IE的开发团队扩展了JavaScript的语法和语言特性,并由此形成了JScript。随着IE在浏览器市场上的成功,JScript已经成为JavaScript语言的事实标准,这也使得ECMAScript v3及以后的标准订制受到一定程度的影响。
在IE中,尽管允许指定<SCRIPT>
标签的Language属性来强制编译器解释时的语法检测,但IE默认语言却总是JScript的(当前浏览器所支持的)最新版本。
下表给出JavaScript、JScript中的一个对照。更详细的资料可以查阅《JScript语言手册》。
(表一) JavaScript 与 JScript各版本对照
Ver. for NN JScript for IE/IIS in OS JavaScript的主要特性
* * *
1.0 2.0 1.0 IE3早期版本
1.1 3.0 2.0 IE3后期版本(WinNT4) 引入Array对象,消除大量错误
1.2 4.0-4.05 引入Switch语句、RegExp等
1.3 4.06-4.7x 3.0 IE 4.0,IIS 4.0,JSH 1.0 修正一些不兼容性,符合ECMAv1
5.0 IE 5.0(Win98 SE,WinMe) (*JScript开始部分实现ECMAv3)
5.1 IE 5.01(Win2k)
5.5 IE 5.5(WinMe)
5.6 IE 6.0
1.4 (服务器端) (未实现)
1.5 6.0 (未实现) 引入了异常处理,符合ECMAv3
(表二) ECMAScript 各版本及其实现
Ver. JavaScript JScript 说明
* * *
ECMAv1 1.1 1.0, 2.0 ECMA-262 v1 基于 JavaScript 1.1.
1.2 JavaScript 1.2发布时, ECMA-262 v1 时仍未能完成。
1.3, 1.4 3.0 完整实现ECMA-262 v1
ECMAv2 ECMA v1的维护版本,只添加了说明性描述。
ECMAv3 (x) 5.0 部分实现ECMA-262 v3
1.5 5.5 完整实现ECMA-262 v3
(x) 5.6 在客户端与JScript5.5没有区别。
2. 面向对象
(注:以下描述为非学术资料的)
对象是一种数据结构。它封装了所描述事物的属性和行为信息,并且通过继承来描述了事物在现实(或执行环境中)的衍生关系。继承的另一层作用,是强化了信息的重用并为执行期逻辑提供了多态的特性。
综上所述,一个面向对象的语言环境应当:
- 实现一个特定的“对象”这种数据结构
- 实现对象的继承性
- 在对象中实现信息的封装性
- 在编译器一级理解多态机制,并提供运行期的多态特性
对于对象的上述特性,标准的学术资料总结为:继承性、封装性和多态性。
此外,在强类型的语言环境(例如编译性语言)中,通常会在对象的基础上实现“类类型”。
在这种情况下,“类”是类型描述(type),而“对象”是变量声明(var)。更面向机器一层的叙述是,“类”用于声明数据结构的布局;而“对象”则是在内存中按这种布局分配的数据块(实例)。
一些强类型的语言会提供“类类型”来描述一个类的引用。这种情况下,“类”会具有在内存中的一个描述结构(struct)。这也意味着“只有提供运行期信息(RTTI)的语言”才能提供“类类型”这种语言特性。
与面向对象相关的一些概念包括:
- 属性(property)
- 特性(attribute)
- 读写器(getter/setter)
- 方法(method)
- 虚方法(virtual method)
- 动态方法(dynamic method)
- 纯虚方法/抽象方法(abstract method)
- 事件(event)
- 多投事件(mutilcast event)
这些概念的具体含义请查阅相关资料。在Qomo OpenProject对OOP Core的实现过程中,将经常性地提及这些概念。你也会清晰的看到:如何来实现完整的OOP的各种语言特性。
3. 面向对象与基于对象的语言
一种提供了“对象”这种数据结构的语言,如果它不能完全实现面向对象的三种基本特性“继承、封装和多态”的语言,就被认为是“基于对象的语言”。相应的,完整实现了这三种特性的,被称为是“面向对象的语言”。
JavaScript是一种基于对象的语言,我们通常说它具有“不完整的OOP特性”。QomoOpenProject将在原生的JavaScript的基础上,实现更多的OOP特性,使得JavaScript能够方便地描述更庞大的框架,以及开发更复杂的Rich Web Client / Application.Qomo OpenProject对将从Delphi和C#中借用很多的OOP特性和语法特性。因此,如果你需要深入了解QomoJS中OOP Core的实现技术,那么你可能需要了解一些Delphi或C#的基础知识。
如果你只需要将 Qomo 应用在你的系统中,那么你只需要记住一些语法、规则,并仔细阅读示例代码就可以了。^.^
4. 面向对象的开发架构
开发架构的描述,与语言本身的语法描述是两回事的。QomoJS中OOP Core中只在语法层面实现更多的OOP特性和支持能力。但OOP Core本身并不描述架构。
在.NET中,底层的.NET Framework是一个开发架构,而FCL(Framework Component Library)则是一个组件库,这一点与Delphi的VCL(Visual Component Library)具有同一层次上的含义。
但“架构”本身并不存在层次上的限制。也就说是说,可以有RTL这个层级上的Framework,也可以有Class Library这个层级上的Framework,同样,也可以有“组件库”这个层级上的架构。再往上,你可以发现“插件架构”,或“模块调度的架构”,更或者是象Ajax这样一些被称为架构的东西。
所以在如果我们对FCL在组件库上的封装模式进行理解,那么也可以分析并得到它的架构模式。——在《Inside VCL (深入核心-VCL架构剖析)》一书中,李维就从这个角度分析了VCL的组件架构。
QomoJS底层的丰富的OOP特性的支持,使得它有能力去描述和实现各种底层架构、组件架构和更加高(或低)层次的架构设计。在Qomo OpenProject中,我们将主要实现一个 VisualComponent架构,并在上面发展Delphi VCL / .NET FCL的一个子集。
此外,我们还会在底层架构上提供Template编程的支持,以及SOA的支持。这些属于底层架构的范畴,有时候他们也被作为语言特性来理解。——当然,这取决于你的视角。
在Qomo OpenProject中非常轻松地实现一个Ajax的架构。不但如此,你还可以看到QomoOpenProject用更加快捷的手段集成了Atlas(Microsoft's Ajax toolkit),以及ActiveUI's Template框架。随后还会有一个SOA框架被整合进来。
这些框架及其实现,都可以在Qomo OpenProject中跑得很好。如果你希望将Qomo用于语言的研究而不是应用开发的话,你可以按照类此的方法一层层地实现下去。
直到有一天,你发现一行代码就可以完成你所想的全部工作,而一台256位CPU的机器也跑不动这行程序的时候,我想你会反省:B端开发应当是一个轻量级的架构。