Fuxi语言的类型与风格
如何让我们所设计的类或对象能够方便地共享已有的类或对象,简化程序设计?继承和风格化就是两项重要的程序共享技术。继承(inheritance)是面向对象技术的三个基本支柱之一,已经为人们所熟知;而风格化(stylization)则新近才出现。
所谓对象的风格,指对象在执行过程中表现的姿态,例如,是否拥有自己独立的线程、是否具有持续性、是否可以在网上移动等;而对象的类型,则指对象的结构和行为,对象类型通常是类。
从程序设计角度来看,风格化是通过某种标注(annotation)对对象进行动态修饰(Dynamical qualification),使其在执行时具有某种风格;而继承则是类型的定义方法,是对类型所进行的静态规定(static specification)。
从实现技术来看,风格化是特征的垂直叠加(vertical cascading),而继承则是特征的水平排列(horizontal alignment)。因此,风格和类型具有正交性。
我们可以把对象的风格想象成产品的颜色,产品的设计师通常关注产品结构本身的设计,而忽略对颜色的考虑。然而,当产品成型后,工人可以为产品着上各种不同的颜色。
图1.实例的三维空间
|
|
|
|
class A { … } active A a_act
// 主动式对象a_act
mobile A a_mob
// 可移动对象a_mob
persistent A a_per //
持续性对象a_per
remote A a_rem //
远程对象a_rem
@WebSecurity A a_web //
自定义风格对象
|
|
|
|
|
图2. 对象风格的使用
Fuxi语言目前支持一下系统风格:active, mobile,
persistent和remote;用户也可以使用自定义风格。例如,我们定义了类A后,可以定义几种不同风格的对象,如图2所示。这5个对象都具有相同的类型,具有相同的调用接口。在程序设计过程中,程序员可以完全不必对这5个姿态不同的对象进行特殊的考虑。因为,对象风格只是在执行时才表现出来。
风格和类型的正交分离,具有明显的技术优势。
首先,它可以使程序变得简洁。让程序员只关注类结构本身的设计,关注问题的本身,而忽略对同问题方案正交的某些技术侧面的考虑。
其次,避开程序对底层平台(Infrastructure)的直接调用,使得程序具有平台无关性,便于程序的部署和网络计算的实现。
第三,使得系统各装配件具有可动态替换性。例如,例子中对WebSecurity 风格的实现就可以根据不同的安全策略,选择不同的装配件。
|