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