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