Rexx - Orientado a objetos

Cuando instale ooRexx según el capítulo de entorno, también tendrá la capacidad de trabajar con clases y objetos. Tenga en cuenta que todo el código siguiente debe ejecutarse en el intérprete ooRexx. El intérprete normal de Rexx no podrá ejecutar este código orientado a objetos.

Declaraciones de clase y método

Una clase se define con la siguiente declaración de sintaxis.

Sintaxis

::class classname

dónde classname es el nombre que se le da a la clase.

Un método en una clase se define con la siguiente declaración de sintaxis.

Sintaxis

::method methodname

Dónde methodname es el nombre que se le da al método.

Una propiedad en una clase se define con la siguiente declaración de sintaxis.

Sintaxis

::attribute propertyname

Dónde propertyname es el nombre que se le da a la propiedad.

Ejemplo

El siguiente es un ejemplo de una clase en Rexx.

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

Los siguientes puntos deben tenerse en cuenta sobre el programa anterior.

  • El nombre de la clase es estudiante.
  • La clase tiene 2 propiedades, StudentID y StudentName.

Métodos Getter y Setter

Los métodos Getter y Setter se utilizan para establecer y obtener automáticamente los valores de las propiedades. En Rexx, cuando declaras una propiedad con la palabra clave de atributo, los métodos getter y setter ya están implementados.

Ejemplo

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

En el ejemplo anterior, habría métodos Getter y Setter para StudentId y StudentName.

En el siguiente programa se muestra un ejemplo de cómo se pueden utilizar.

/* 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

La salida del programa anterior será como se muestra a continuación.

1 
Joe

Métodos de instancia

Los objetos se pueden crear a partir de la clase a través del ~new operator. Se puede llamar a un método de la clase de la siguiente manera.

Object~methodname

Dónde methodname es el método que debe invocarse desde la clase.

Ejemplo

El siguiente ejemplo muestra cómo se puede crear un objeto a partir de una clase y cómo se invoca el método correspondiente.

/* 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))

La salida del programa anterior será como se muestra a continuación.

60

Crear varios objetos

También se pueden crear varios objetos de una clase. El siguiente ejemplo mostrará cómo se puede lograr esto.

Aquí estamos creando 3 objetos (st, st1 y st2) y llamando a sus miembros de instancia y métodos de instancia en consecuencia.

Echemos un vistazo a un ejemplo de cómo se pueden crear varios objetos.

Ejemplo

/* 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))

La salida del programa anterior será como se muestra a continuación.

60 
70 
60

Herencia

La herencia se puede definir como el proceso en el que una clase adquiere las propiedades (métodos y campos) de otra. Con el uso de la herencia, la información se hace manejable en un orden jerárquico.

La clase que hereda las propiedades de otro se conoce como subclass (clase derivada, clase secundaria) y la clase cuyas propiedades se heredan se conoce como superclass (clase base, clase padre).

Veamos un ejemplo de herencia en Rexx. En el siguiente ejemplo, estamos creando una clase llamadaPerson. A partir de ahí usamos la palabra clave subclase para crear elStudent class como un sub-class of Person.

Ejemplo

/* 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))

La salida del programa anterior será como se muestra a continuación.

60