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