Rexx - объектно-ориентированный

Когда вы устанавливаете ooRexx согласно главе, посвященной окружению, вы также получаете возможность работать с классами и объектами. Обратите внимание, что весь следующий код необходимо запустить в интерпретаторе ooRexx. Обычный интерпретатор Rexx не сможет запустить этот объектно-ориентированный код.

Объявления классов и методов

Класс определяется с помощью следующего объявления синтаксиса.

Синтаксис

::class classname

где classname это имя, данное классу.

Метод в классе определяется следующим объявлением синтаксиса.

Синтаксис

::method methodname

где methodname это имя, данное методу.

Свойство в классе определяется приведенным ниже объявлением синтаксиса.

Синтаксис

::attribute propertyname

где propertyname это имя, данное собственности.

пример

Ниже приведен пример класса в Rexx.

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

В отношении вышеуказанной программы необходимо отметить следующие моменты.

  • Название класса студент.
  • У класса есть 2 свойства: StudentID и StudentName.

Методы получения и установки

Методы Getter и Setter используются для автоматической установки и получения значений свойств. В Rexx, когда вы объявляете свойство с ключевым словом attribute, методы получения и установки уже задействованы.

пример

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

В приведенном выше примере для StudentId и StudentName будут методы Getter и Setter.

Пример того, как их можно использовать, показан в следующей программе.

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

Результат выполнения вышеуказанной программы будет таким, как показано ниже.

1 
Joe

Методы экземпляра

Объекты могут быть созданы из класса через ~new operator. Метод из класса можно вызвать следующим образом.

Object~methodname

где methodname - это метод, который нужно вызывать из класса.

пример

В следующем примере показано, как создать объект из класса и вызвать соответствующий метод.

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

Результат выполнения вышеуказанной программы будет таким, как показано ниже.

60

Создание нескольких объектов

Также можно создать несколько объектов класса. Следующий пример покажет, как этого можно достичь.

Здесь мы создаем 3 объекта (st, st1 и st2) и соответственно вызываем их члены экземпляра и методы экземпляра.

Давайте посмотрим на пример того, как можно создать несколько объектов.

пример

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

Результат выполнения вышеуказанной программы будет таким, как показано ниже.

60 
70 
60

Наследование

Наследование можно определить как процесс, в котором один класс приобретает свойства (методы и поля) другого. При использовании наследования информация становится управляемой в иерархическом порядке.

Класс, наследующий свойства другого, известен как subclass (производный класс, дочерний класс), а класс, свойства которого наследуются, известен как superclass (базовый класс, родительский класс).

Посмотрим на пример наследования в Rexx. В следующем примере мы создаем класс с именемPerson. Оттуда мы используем ключевое слово subclass для созданияStudent class как 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))

Результат выполнения вышеуказанной программы будет таким, как показано ниже.

60