Rexx - Orienté objet

Lorsque vous installez ooRexx conformément au chapitre sur l'environnement, vous aurez également la possibilité de travailler avec des classes et des objets. Veuillez noter que tout le code suivant doit être exécuté dans l'interpréteur ooRexx. L'interpréteur Rexx normal ne pourra pas exécuter ce code orienté objet.

Déclarations de classe et de méthode

Une classe est définie avec la déclaration de syntaxe suivante.

Syntaxe

::class classname

classname est le nom donné à la classe.

Une méthode dans une classe est définie avec la déclaration de syntaxe suivante.

Syntaxe

::method methodname

methodname est le nom donné à la méthode.

Une propriété dans une classe est définie avec la déclaration de syntaxe ci-dessous.

Syntaxe

::attribute propertyname

propertyname est le nom donné à la propriété.

Exemple

Voici un exemple de classe dans Rexx.

::class student 
::attribute StudentID 
::attribute StudentName

Les points suivants doivent être notés à propos du programme ci-dessus.

  • Le nom de la classe est étudiant.
  • La classe a 2 propriétés, StudentID et StudentName.

Méthodes Getter et Setter

Les méthodes Getter et Setter sont utilisées pour définir et obtenir automatiquement les valeurs des propriétés. Dans Rexx, lorsque vous déclarez une propriété avec le mot-clé attribut, les méthodes getter et setter sont déjà mises en place.

Exemple

::class student 
::attribute StudentID 
::attribute StudentName

Dans l'exemple ci-dessus, il y aurait des méthodes Getter et Setter pour StudentId et StudentName.

Un exemple de la façon dont ils peuvent être utilisés est présenté dans le programme suivant.

/* 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

La sortie du programme ci-dessus sera comme indiqué ci-dessous.

1 
Joe

Méthodes d'instance

Les objets peuvent être créés à partir de la classe via le ~new operator. Une méthode de la classe peut être appelée de la manière suivante.

Object~methodname

methodname est la méthode qui doit être invoquée depuis la classe.

Exemple

L'exemple suivant montre comment un objet peut être créé à partir d'une classe et la méthode respective appelée.

/* 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))

La sortie du programme ci-dessus sera comme indiqué ci-dessous.

60

Création de plusieurs objets

On peut également créer plusieurs objets d'une classe. L'exemple suivant montre comment cela peut être réalisé.

Ici, nous créons 3 objets (st, st1 et st2) et appelons leurs membres d'instance et leurs méthodes d'instance en conséquence.

Jetons un coup d'œil à un exemple de la façon dont plusieurs objets peuvent être créés.

Exemple

/* 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))

La sortie du programme ci-dessus sera comme indiqué ci-dessous.

60 
70 
60

Héritage

L'héritage peut être défini comme le processus par lequel une classe acquiert les propriétés (méthodes et champs) d'une autre. Avec l'utilisation de l'héritage, les informations sont rendues gérables dans un ordre hiérarchique.

La classe qui hérite des propriétés des autres est appelée subclass (classe dérivée, classe enfant) et la classe dont les propriétés sont héritées est appelée superclass (classe de base, classe parent).

Voyons un exemple d'héritage dans Rexx. Dans l'exemple suivant, nous créons une classe appeléePerson. À partir de là, nous utilisons le mot-clé subclass pour créer leStudent class comme un sub-class of Person.

Exemple

/* 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))

La sortie du programme ci-dessus sera comme indiqué ci-dessous.

60