面向对象( Object Oriented)
根据环境章节安装ooRexx时,您还可以使用类和对象。 请注意,以下所有代码都需要在ooRexx解释器中运行。 普通的Rexx解释器将无法运行此面向对象的代码。
类和方法声明
使用以下语法声明定义类。
语法 (Syntax)
::class classname
其中classname是给予classname的名称。
使用以下语法声明定义类中的方法。
语法 (Syntax)
::method methodname
其中methodname是为方法指定的名称。
使用以下语法声明定义类中的属性。
语法 (Syntax)
::attribute propertyname
其中propertyname是为该propertyname指定的名称。
例子 (Example)
以下是Rexx中的类的示例。
::class student
::attribute StudentID
::attribute StudentName
关于上述计划,需要注意以下几点。
- class的名字是学生。
- 该类有2个属性,StudentID和StudentName。
Getter和Setter方法
Getter和Setter方法用于自动设置和获取属性的值。 在Rexx中,当您使用attribute关键字声明属性时,getter和setter方法已经到位。
例子 (Example)
::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 operator从类创建对象。 可以通过以下方式调用该类中的方法。
Object~methodname
其中methodname是需要从类中调用的方法。
例子 (Example)
以下示例显示如何从类创建对象以及调用的相应方法。
/* 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
创建多个对象
人们还可以创建一个类的多个对象。 以下示例将说明如何实现此目的。
在这里,我们创建了3个对象(st,st1和st2)并相应地调用它们的实例成员和实例方法。
我们来看一个如何创建多个对象的示例。
例子 (Example)
/* 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
继承 (Inheritance)
继承可以定义为一个类获取另一个类的属性(方法和字段)的过程。 通过使用继承,可以按层次顺序管理信息。
继承其他属性的subclass称为subclass (派生类,子类),其属性被继承的superclass称为superclass (基类,父类)。
让我们看一下Rexx中的继承示例。 在下面的示例中,我们将创建一个名为Person的类。 从那里我们使用subclass关键字将Student class创建sub-class of Person的sub-class of Person 。
例子 (Example)
/* 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