Rexx - Orientado a Objetos
Ao instalar ooRexx de acordo com o capítulo de ambiente, você também terá a capacidade de trabalhar com classes e objetos. Observe que todos os códigos a seguir precisam ser executados no interpretador ooRexx. O interpretador Rexx normal não será capaz de executar este código orientado a objetos.
Declarações de classe e método
Uma classe é definida com a seguinte declaração de sintaxe.
Sintaxe
::class classname
Onde classname é o nome dado à classe.
Um método em uma classe é definido com a seguinte declaração de sintaxe.
Sintaxe
::method methodname
Onde methodname é o nome dado ao método.
Uma propriedade em uma classe é definida com a declaração de sintaxe abaixo.
Sintaxe
::attribute propertyname
Onde propertyname é o nome dado à propriedade.
Exemplo
A seguir está um exemplo de uma classe em Rexx.
::class student
::attribute StudentID
::attribute StudentName
Os seguintes pontos precisam ser observados sobre o programa acima.
- O nome da turma é aluno.
- A classe possui 2 propriedades, StudentID e StudentName.
Métodos getter e setter
Os métodos Getter e Setter são usados para definir e obter automaticamente os valores das propriedades. No Rexx, quando você declara uma propriedade com a palavra-chave attribute, os métodos getter e setter já estão implementados.
Exemplo
::class student
::attribute StudentID
::attribute StudentName
No exemplo acima, haveria os métodos Getter e Setter para StudentId e StudentName.
Um exemplo de como eles podem ser usados é mostrado no programa a seguir.
/* 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
A saída do programa acima será conforme mostrado abaixo.
1
Joe
Métodos de Instância
Os objetos podem ser criados a partir da classe por meio do ~new operator. Um método da classe pode ser chamado da seguinte maneira.
Object~methodname
Onde methodname é o método que precisa ser chamado a partir da classe.
Exemplo
O exemplo a seguir mostra como um objeto pode ser criado a partir de uma classe e o respectivo método chamado.
/* 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))
A saída do programa acima será conforme mostrado abaixo.
60
Criação de vários objetos
Também se pode criar vários objetos de uma classe. O exemplo a seguir mostrará como isso pode ser alcançado.
Aqui, estamos criando 3 objetos (st, st1 e st2) e chamando seus membros de instância e métodos de instância de acordo.
Vamos dar uma olhada em um exemplo de como vários objetos podem ser criados.
Exemplo
/* 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))
A saída do programa acima será conforme mostrado abaixo.
60
70
60
Herança
A herança pode ser definida como o processo em que uma classe adquire as propriedades (métodos e campos) de outra. Com o uso da herança, as informações se tornam gerenciáveis em uma ordem hierárquica.
A classe que herda as propriedades de outra é conhecida como subclass (classe derivada, classe filha) e a classe cujas propriedades são herdadas é conhecida como superclass (classe base, classe pai).
Vamos ver um exemplo de herança em Rexx. No exemplo a seguir, estamos criando uma classe chamadaPerson. A partir daí, usamos a palavra-chave subclasse para criar oStudent class como um sub-class of Person.
Exemplo
/* 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))
A saída do programa acima será conforme mostrado abaixo.
60