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