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