函数对象:FORCAL中的对象、函数和模块来源: 发布时间:星期二, 2008年12月16日 浏览:14次 评论:0
Forcal核心库Forcal32.dll中没有类和对象概念但Forcal32.dll对功能扩展提供了很好支持利用Forcal32.dll本身提供编程功能和Forcal扩展动态库FcData及MForcal很容易地构造出类及对象概念由于动态编译特点Forcal完全可以看作是面向对象
要全面理解和演示本文例子需要下载作者另外两个MForcal和OpenFCMForcal可对Forcal源代码进行模块化编译OpenFC全面演示了Forcal应用可以从作者网站WebSite、天空软件Software站、华军软件Software园等多家站点下载到这两个 1 Forcal中对象 [返回页首] 使用FcData中类定义可以创建对象实际上在Forcal中切数据都可以看作是对象而任何个或表达式都可以看作是类或对象成员对对象进行合理分类可以更好地使用它们根据使用特点Forcal中对象可以分为 3类:Forcal内置数据对象、非FcData类对象、FcData类对象 1.1 Forcal内置数据对象 Forcal中有 3种表达式:整数、实数和复数表达式分别对整数、实数和复数数据进行运算处理整数、实数和复数即Forcal 3种内置数据对象Forcal内置数据对象成员是些常用数学或自定义表达式Forcal内置数据对象可以直接存取而且可以用等号运算符进行赋值例如: (2).sin; //sin(2); x.cos.sin; //sin[cos(x)]; x=(2).sin; //x=sin(2); 1.2 非FcData类对象 FcData中所有数据都用申请这些数据可以是简单数据、、类及外部数据类型等所有数据都用个指针即个4字节整数进行标识所有FcData数据都是对象FcData对象只能用专用成员进行存取不能用等号运算符进行赋值如果个或表达式遇到不可识别FcData对象将返回个运行 FcData对象可分为两类:非FcData类对象和FcData类对象进行这种分类依据仅仅是FcData类对象是种特殊数据 除了FcData的外其他Forcal扩展动态库中也有些可以创建对象这些对象也是非FcData类对象非FcData类对象也包括Forcal内置串简单地讲除了Forcal内置数据对象和FcData类对象其余都是非FcData类对象例如: i: (:x)= x=(), //申请个整数对象x x.(99), //整数对象成员给x赋值 x.get; //通过整数对象成员get获得x值 i: "Hello !".OutStr[false]; //串对象及成员 注意:除了Forcal内置数据对象以外其他对象只能用专用成员进行存取不能用等号运算符进行赋值非FcData类对象和FcData类对象都是如此 1.3 FcData类对象 FcData类由关键字DefineClass定义如: Cperson=(DefineClass:"姓名","性别","年龄"); //定义个类描述个人简单信息有 3个类成员 该返回个类指针Cperson通过该类指针使用关键字可创建个类对象如: person=(,Cperson); //创建个类对象person但未对类成员进行赋值 给类对象赋值: person."姓名".SetCM[(char_s,EndType,"王强"),true]; person."性别".SetCM[(char_s,EndType,"男"),true]; person."年龄".SetCM[(,23),true]; 也可以在申请类对象时直接赋值: person={,Cperson: "姓名",(char_s,EndType,"王强"), "性别",(char_s,EndType,"男"), "年龄",(,23) }; 获得并输出类对象值: person.BCM("姓名").OutStr[true]; person.BCM("性别").OutStr[true]; person."年龄".get; 完整例子如下所示: i:(::Cperson)= Cperson=(DefineClass:"姓名","性别","年龄"); //定义个类描述个人简单信息有 3个类成员 i:(::Cperson,person)= person=(,Cperson); //创建个类对象person但未对类成员进行赋值 i:(::person)= { person."姓名".SetCM[(char_s,EndType,"王强"),true], person."性别".SetCM[(char_s,EndType,"男"),true], person."年龄".SetCM[(,23),true] }; i:(::person)= person.BCM("姓名").OutStr[true]; i:(::person)= person.BCM("性别").OutStr[true]; i:(::person)= person."年龄".get; FcData中类成员都是公有数据每个数据可看作个对象所有数据都通过特定进行存取要想使用私有数据和把类放到模块(称类模块)中就可以了FcData中类及成员的间有自然继承性而且可以通过循环链表实现相互继承FcData中类层次关系是棵树或个连通图缺省情况下在FcData中销毁个类对象时所有基类对象也并销毁在类对象以循环链表方式相互继承情况下也是如此 2 Forcal中 [返回页首] 本文中为了介绍说明方便我们将自定义表达式也称为 可按区别分类思路方法对Forcal中进行分类 按所处理数据类型区别可分为整数、实数和复数 3种分别存在于整数表达式、实数表达式和复数表达式中 按来源区别可分为Forcal内置(包括级和 2级)、外部 2级(通过Forcal扩展模块添加)、用户自定义 按运算速度区别可分为级和 2级级都是Forcal内置 2级有些是内置但更多是外置 按是否存在递归可分为递归和非递归 按属性可分为模块私有和模块公有私有只能被本模块表达式所访问公有可被任意模块所访问 0
相关文章
读者评论
发表评论 |