从基础开始:Qomo OpenProject中的一些关键词

六、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. 面向对象

(注:以下描述为非学术资料的)

对象是一种数据结构。它封装了所描述事物的属性和行为信息,并且通过继承来描述了事物在现实(或执行环境中)的衍生关系。继承的另一层作用,是强化了信息的重用并为执行期逻辑提供了多态的特性。

综上所述,一个面向对象的语言环境应当:

  1. 实现一个特定的“对象”这种数据结构
  2. 实现对象的继承性
  3. 在对象中实现信息的封装性
  4. 在编译器一级理解多态机制,并提供运行期的多态特性

对于对象的上述特性,标准的学术资料总结为:继承性、封装性和多态性。

此外,在强类型的语言环境(例如编译性语言)中,通常会在对象的基础上实现“类类型”。

在这种情况下,“类”是类型描述(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端开发应当是一个轻量级的架构。