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