Rexx - 面向对象



按照环境章节中的说明安装ooRexx后,您将能够使用类和对象。请注意,以下所有代码都需要在ooRexx解释器中运行。普通的Rexx解释器将无法运行此面向对象的代码。

类和方法声明

类的定义使用以下语法声明。

语法

::class classname 

其中classname是赋予类的名称。

类中的方法使用以下语法声明定义。

语法

::method methodname 

其中methodname是赋予方法的名称。

类的属性使用以下语法声明定义。

语法

::attribute propertyname 

其中propertyname是赋予属性的名称。

示例

以下是Rexx中类的示例。

::class student 
::attribute StudentID 
::attribute StudentName 

关于上述程序,需要注意以下几点。

  • 类的名称是student。
  • 该类有两个属性,StudentID和StudentName。

Getter和Setter方法

Getter和Setter方法用于自动设置和获取属性的值。在Rexx中,当您使用attribute关键字声明属性时,Getter和Setter方法已经就位。

示例

::class student 
::attribute StudentID 
::attribute StudentName 

在上例中,将存在StudentId和StudentName的Getter和Setter方法。

以下程序显示了如何使用它们。

/* Main program */ 
value = .student~new 
value~StudentID = 1 
value~StudentName = 'Joe' 
say value~StudentID 
say value~StudentName 

exit 0 
::class student 
::attribute StudentID 
::attribute StudentName 

上述程序的输出将如下所示。

1 
Joe 

实例方法

可以通过~new运算符从类创建对象。可以按照以下方式调用类中的方法。

Object~methodname 

其中methodname是需要从类中调用的方法。

示例

以下示例显示了如何从类创建对象以及如何调用相应的方法。

/* Main program */ 
value = .student~new 
value~StudentID = 1 
value~StudentName = 'Joe' 
value~Marks1 = 10 
value~Marks2 = 20 
value~Marks3 = 30 
total = value~Total(value~Marks1,value~Marks2,value~Marks3) 
say total 

exit 0 
::class student 
::attribute StudentID 
::attribute StudentName 
::attribute Marks1 
::attribute Marks2 
::attribute Marks3 
::method 'Total' 
use arg a,b,c 
return (ABS(a) + ABS(b) + ABS(c)) 

上述程序的输出将如下所示。

60 

创建多个对象

也可以创建一个类的多个对象。以下示例将显示如何实现这一点。

在这里,我们创建了三个对象(st、st1和st2),并相应地调用它们的实例成员和实例方法。

让我们来看一个如何创建多个对象的示例。

示例

/* Main program */ 
st = .student~new 
st~StudentID = 1 
st~StudentName = 'Joe' 
st~Marks1 = 10 
st~Marks2 = 20 
st~Marks3 = 30 
total = st~Total(st~Marks1,st~Marks2,st~Marks3) 
say total  

st1  =  .student~new 
st1~StudentID = 2 
st1~StudentName = 'John' 
st1~Marks1 = 10 
st1~Marks2 = 20 
st1~Marks3 = 40 
total = st1~Total(st1~Marks1,st1~Marks2,st1~Marks3) 
say total  

st2  =  .student~new 
st2~StudentID = 3 
st2~StudentName = 'Mark' 
st2~Marks1 = 10 
st2~Marks2 = 20 
st2~Marks3 = 30 
total = st2~Total(st2~Marks1,st2~Marks2,st2~Marks3) 
say total  

exit 0 
::class student 
::attribute StudentID 
::attribute StudentName 
::attribute Marks1 
::attribute Marks2 
::attribute Marks3 
::method 'Total' 
use arg a,b,c 
return (ABS(a) + ABS(b) + ABS(c)) 

上述程序的输出将如下所示。

60 
70 
60 

继承

继承可以定义为一个类获取另一个类的属性(方法和字段)的过程。通过使用继承,信息以分层的方式进行管理。

继承其他属性的类称为子类(派生类、子类),其属性被继承的类称为超类(基类、父类)。

让我们看看Rexx中继承的示例。在下面的示例中,我们创建一个名为Person的类。从那里我们使用subclass关键字创建一个Student类作为Person的子类

示例

/* Main program */ 
st = .student~new 
st~StudentID = 1 
st~StudentName = 'Joe' 
st~Marks1 = 10 
st~Marks2 = 20 
st~Marks3 = 30 
say st~Total(st~Marks1,st~Marks2,st~Marks3)  

exit 0 
::class Person 
::class student subclass Person 
::attribute StudentID 
::attribute StudentName 
::attribute Marks1 
::attribute Marks2 
::attribute Marks3 
::method 'Total' 
use arg a,b,c 
return (ABS(a) + ABS(b) + ABS(c)) 

上述程序的输出将如下所示。

60
广告