When you install ooRexx as per the environment chapter, you will also have the ability to work with classes and objects. Please note that all of the following code needs to be run in the ooRexx interpreter. The normal Rexx interpreter will not be able to run this object oriented code.
A class is defined with the following Syntax declaration.
::class classname
where classname is the name given to the class.
A method in a class is defined with the following Syntax declaration.
::method methodname
Where methodname is the name given to the method.
A property in a class is defined with the below Syntax declaration.
::attribute propertyname
Where propertyname is the name given to the property.
The following is an example of a class in Rexx.
::class student ::attribute StudentID ::attribute StudentName
The following points need to be noted about the above program.
The Getter and Setter methods are used to automatically set and get the values of the properties. In Rexx, when you declare a property with the attribute keyword, the getter and setter methods are already put in place.
::class student ::attribute StudentID ::attribute StudentName
In the above example, there would be Getter and Setter methods for StudentId and StudentName.
An example of how they can be used is shown in the following program.
/* 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
The output of the above program will be as shown below.
1 Joe
Objects can be created from the class via the ~new operator. A method from the class can be called in the following way.
Object~methodname
Where methodname is the method which needs to be invoked from the class.
The following example shows how an object can be created from a class and the respective method invoked.
/* 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))
The output of the above program will be as shown below.
60
One can also create multiple objects of a class. The following example will show how this can be achieved.
In here we are creating 3 objects (st, st1 and st2) and calling their instance members and instance methods accordingly.
Let’s take a look at an example of how multiple objects can be created.
/* 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))
The output of the above program will be as shown below.
60 70 60
Inheritance can be defined as the process where one class acquires the properties (methods and fields) of another. With the use of inheritance, the information is made manageable in a hierarchical order.
The class which inherits the properties of other is known as subclass (derived class, child class) and the class whose properties are inherited is known as superclass (base class, parent class).
Let’s see an example of inheritance in Rexx. In the following example we are creating a class called Person. From there we use the subclass keyword to create the Student class as a sub-class of 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))
The output of the above program will be as shown below.
60