5.5. C-types et Valeurs

Les différents C-types du module de types acceptent chacun des valeurs bien spécifiques. En effet, pour qu'un objet soit considéré comme valide pour un C-type, voire un δ-type, donné il doit répondre à certaines règles. Les couples (C-types,Valeurs) sont donnés dans le tabeau qui suit:

Tableau 5-1. Valeurs admises pour les C-types de base

C-TypeType Java des Valeurs
integerjava.lang.Long
booleanjava.lang.Boolean
stringjava.lang.String
floatjava.lang.Double
ListCTjava.util.List
SetCTjava.util.Set
RecordCTarom.kr.util.Record

Avertissement

Pour les valeurs des C-types ListCT et SetCT, il est à noter que deux comportements sont possibles. Si l'on prend l'exemple d'une variable typée par ListCT

  • Lors de l'attribution d'une valeur à cette variable, l'utilisateur passe au système n'importe quelle valeur de type List. Une copie de cette liste est sauvegardée par le système. Ceci signifie que TOUTES modifications ultérieures ne seront PAS VISIBLES au niveau de la variable.

  • Par contre, lorsque l'utilisateur demande la valeur de cette variable au système celui-ci renvoie la liste elle-même. Par conséquent, TOUTES les modifications ultérieures réalisées sur cette liste seront VISIBLES au niveau de la variable.

Ces comportement sont également vrais pour les valeurs des types SetCT.

5.5.1. Objets MUABLE

La descrition du comportement des objets valuant des ListCT et SetCT lève un problème qui devra également être pris en compte par les nouveaux C-types. En effet, les instances permettent à des écouteurs d'être avertis lorsque la valeur d'un de ses slots est modifiée. Or, si il est possible de modifier la valeur d'un slot sans passer par les méthodes de l'API (setValue()), l'instance n'est pas avertie qu'une modification a eu lieu et elle ne peut donc pas notifier ses propres écouteurs.

C'est pour remédier à ce problème que le concept de MutableObject a été définie. L'interface MutableObject doit être implémentée par tout Objet (Valeur de C-types) dont l'état interne peut changer. D'autre part les AMInstance tout comme les valeurs des C-types construits implémentent l'interface MutableObjectListener. Ces listeners s'enregistrent auprès des MutableObject qui les composent. Ainsi, lorsqu'un tel Objet verra son état changé, il notifiera ses listeners. Cette solution permet donc aux AMInstances d'etre avertis lorsque l'état interne d'un de ses slots est modifié. Mais elle permet également aux valeurs de C-types construits, tel que les List ou les Set d'etre notifiées lorsqu'un élémént de leur valeur, ici un élément de la collection, est modifié. Ces valeurs construites peuvent alors eux-meme notifier leurs éventuelles listeners.

Il est à noter que, par conséquent, ce sont des implémentations particulières de List et de Set qui sont utilisées dans l'implémentation d'AROM afin qu'elles soient également des MutableObject et des MutableObjectListener.

Figure 5-6. Les MutuableObjects et associés.