fuxi程序设计语言(fuxi语言)模式扩展与覆盖技术为代码复用提供一个精细方案

模式扩展与覆盖技术为代码复用提供一个精细方案
在C++、JAVA等语言中,方法的继承与覆盖是对整个方法进行的,而Fuxi语言可以在模式级进行,从而进一步地提高了代码的复用率。例如,我们想在派生类中,对Fib函数进行改造,增加一个Fib(-1)模式,同时修改Fib(0)模式,程序可以写成:

  public class NewFibonacci : Fibonacci
  {
   Fib(-1) = 0 // 扩展Fib(-1)
   Fib(0) = 0 // 覆盖Fib(0)
  }
 

§3.3 对象的脚本化定义机制,提高程序的说明性
  类中定义的字段如果没有初始化,同时构造函数也没有对其进行初始化,则该字段为自由字段(Free Field)。Fuxi中公开的自由字段称为槽(Slot)。这样,一个带槽的类就是一个框架。当用这样的带槽类定义对象时,我们可以在对象后附着一个脚本一样的程序段,来填写槽值(Slot Value)。这种对象的定义机制称为对象的脚本化定义(Scripted Definition of Objects)。脚本化定义非常适合描述资源,同时它也进一步地提高了Fuxi语言的说明性。看例子:

class Button
{
   public Button( String title ) = {…}
   public POINT at // at 槽
   public SIZE size // size 槽
   …
}
class Field
{
public Field( String text ) = {…}
public POINT at // at 槽
public SIZE size // size 槽
}

Field fldName( “海创达” )
{
at : 100, 100 // 填写at的槽值
size: 200, 30 // 填写size的槽值
}
Button btnExit( “退出” )
{
at : 200, 200
size: 80, 40
}

§3.4 受卫字段(Guarded Field),提高程序安全性
  我们可以为Fuxi的字段提供一组卫兵(Guards),卫兵是函数或子句。用{}将卫兵扩起来,附着在字段的后面。Fuxi字段的卫兵可以是:

When() = <条件表达式>

Valid() = <条件表达式>

Before() -> <动作表达式>

After() -> <动作表达式>

  Fuxi对字段的修改过程为:

如果没有定义When()函数, 则转步骤3;

计算When()函数,如果值为false, 则转步骤10;

如果没有定义Before()触发器,则转步骤5;

执行触发器Before();

保存字段的原值;

修改字段的值;

如果没有定义Valid()函数,则转步骤11;

计算函数Valid(),如果值为true,则转步骤11;

恢复字段的原值;

修改失败,返回false;

如果没有定义After()触发器,则转步骤13;

执行触发器After();

修改成功,返回true。

  我们来看一个程序段:

class Voucher
{
   protected Date date
   {
   After() -> { year.Invalidate() month.Invalidate() day.Invalidate() }
   }
   public virtual int year = date.GetYear()
   {
   When() = year > 2003
   Valid() = year >1980 && year < 2050
   After() = date := Date( year, month, day )
   }
   public virtual int month = date.GetMonth()
   {
   Valid() = month >= 1 && month <= 12
   After() -> date := Date( year, month, day )
   }
   public virtual int day = date.GetDay()
   {
   Valid() = day >= 1 && day <= 31 && Date(year, month, day).GetDay() == day
   After() ->date := Date( year, month, day )
   }
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值