Rexx - Orientato agli oggetti
Quando installi ooRexx secondo il capitolo sull'ambiente, avrai anche la possibilità di lavorare con classi e oggetti. Tieni presente che tutto il codice seguente deve essere eseguito nell'interprete ooRexx. Il normale interprete Rexx non sarà in grado di eseguire questo codice orientato agli oggetti.
Dichiarazioni di classe e metodo
Una classe viene definita con la seguente dichiarazione di sintassi.
Sintassi
::class classname
dove classname è il nome dato alla classe.
Un metodo in una classe viene definito con la seguente dichiarazione di sintassi.
Sintassi
::method methodname
Dove methodname è il nome dato al metodo.
Una proprietà in una classe viene definita con la seguente dichiarazione di sintassi.
Sintassi
::attribute propertyname
Dove propertyname è il nome dato alla proprietà.
Esempio
Quello che segue è un esempio di una classe in Rexx.
::class student
::attribute StudentID
::attribute StudentName
I seguenti punti devono essere annotati riguardo al programma di cui sopra.
- Il nome della classe è studente.
- La classe ha 2 proprietà, StudentID e StudentName.
Metodi Getter e Setter
I metodi Getter e Setter vengono utilizzati per impostare e ottenere automaticamente i valori delle proprietà. In Rexx, quando dichiari una proprietà con la parola chiave attribute, i metodi getter e setter sono già messi in atto.
Esempio
::class student
::attribute StudentID
::attribute StudentName
Nell'esempio precedente, ci sarebbero metodi Getter e Setter per StudentId e StudentName.
Un esempio di come possono essere utilizzati è mostrato nel seguente programma.
/* 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
L'output del programma di cui sopra sarà come mostrato di seguito.
1
Joe
Metodi di istanza
Gli oggetti possono essere creati dalla classe tramite ~new operator. Un metodo della classe può essere chiamato nel modo seguente.
Object~methodname
Dove methodname è il metodo che deve essere invocato dalla classe.
Esempio
L'esempio seguente mostra come creare un oggetto da una classe e richiamare il rispettivo metodo.
/* 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))
L'output del programma di cui sopra sarà come mostrato di seguito.
60
Creazione di più oggetti
Si possono anche creare più oggetti di una classe. Il seguente esempio mostrerà come questo può essere ottenuto.
Qui stiamo creando 3 oggetti (st, st1 e st2) e chiamando i loro membri di istanza e metodi di istanza di conseguenza.
Diamo un'occhiata a un esempio di come è possibile creare più oggetti.
Esempio
/* 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))
L'output del programma di cui sopra sarà come mostrato di seguito.
60
70
60
Eredità
L'ereditarietà può essere definita come il processo in cui una classe acquisisce le proprietà (metodi e campi) di un'altra. Con l'uso dell'ereditarietà, le informazioni vengono rese gestibili in ordine gerarchico.
La classe che eredita le proprietà di altri è nota come subclass (classe derivata, classe figlia) e la classe le cui proprietà vengono ereditate è nota come superclass (classe base, classe genitore).
Vediamo un esempio di eredità in Rexx. Nell'esempio seguente stiamo creando una classe chiamataPerson. Da lì usiamo la parola chiave sottoclasse per creare il fileStudent class come un sub-class of Person.
Esempio
/* 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))
L'output del programma di cui sopra sarà come mostrato di seguito.
60