Rexx - zorientowany obiektowo
Po zainstalowaniu ooRexx zgodnie z rozdziałem o środowisku będziesz mieć również możliwość pracy z klasami i obiektami. Należy pamiętać, że cały poniższy kod musi zostać uruchomiony w interpreterze ooRexx. Normalny interpreter Rexx nie będzie w stanie uruchomić tego kodu zorientowanego obiektowo.
Deklaracje klas i metod
Klasa jest definiowana za pomocą następującej deklaracji składni.
Składnia
::class classname 
    gdzie classname to nazwa nadana klasie.
Metoda w klasie jest definiowana za pomocą następującej deklaracji składni.
Składnia
::method methodname 
    Gdzie methodname to nazwa nadana metodzie.
Właściwość w klasie jest definiowana za pomocą poniższej deklaracji składni.
Składnia
::attribute propertyname 
    Gdzie propertyname to nazwa nadana właściwości.
Przykład
Poniżej znajduje się przykład klasy w Rexx.
::class student 
::attribute StudentID 
::attribute StudentName 
    Na temat powyższego programu należy zwrócić uwagę na następujące punkty.
- Nazwa klasy to student.
 - Klasa ma 2 właściwości, StudentID i StudentName.
 
Metody pobierające i ustawiające
Metody Getter i Setter służą do automatycznego ustawiania i pobierania wartości właściwości. W Rexx, gdy deklarujesz właściwość za pomocą słowa kluczowego attribute, metody pobierające i ustawiające są już wprowadzone.
Przykład
::class student 
::attribute StudentID 
::attribute StudentName 
    W powyższym przykładzie byłyby metody Getter i Setter dla StudentId i StudentName.
Przykład tego, jak można ich używać, przedstawiono w poniższym programie.
/* 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 
    Wynik powyższego programu będzie taki, jak pokazano poniżej.
1 
Joe 
    Metody instancji
Obiekty można tworzyć z klasy za pośrednictwem ~new operator. Metodę z klasy można wywołać w następujący sposób.
Object~methodname 
    Gdzie methodname jest metodą, którą należy wywołać z klasy.
Przykład
Poniższy przykład pokazuje, jak można utworzyć obiekt z klasy i wywołać odpowiednią metodę.
/* 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)) 
    Wynik powyższego programu będzie taki, jak pokazano poniżej.
60 
    Tworzenie wielu obiektów
Można również tworzyć wiele obiektów klasy. Poniższy przykład pokaże, jak można to osiągnąć.
W tym miejscu tworzymy 3 obiekty (st, st1 i st2) i odpowiednio nazywamy ich składowe instancji oraz metody instancji.
Spójrzmy na przykład, jak można utworzyć wiele obiektów.
Przykład
/* 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)) 
    Wynik powyższego programu będzie taki, jak pokazano poniżej.
60 
70 
60 
    Dziedzictwo
Dziedziczenie można zdefiniować jako proces, w którym jedna klasa uzyskuje właściwości (metody i pola) innej. Dziedziczenie umożliwia zarządzanie informacjami w porządku hierarchicznym.
Klasa, która dziedziczy właściwości innych, jest znana jako subclass (klasa pochodna, klasa potomna), a klasa, której właściwości są dziedziczone, jest znana jako superclass (klasa bazowa, klasa nadrzędna).
Zobaczmy przykład dziedziczenia w Rexx. W poniższym przykładzie tworzymy klasę o nazwiePerson. Stamtąd używamy słowa kluczowego subclass, aby utworzyć plikStudent class jak sub-class of Person.
Przykład
/* 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)) 
    Wynik powyższego programu będzie taki, jak pokazano poniżej.
60