Les bases – Création d’attributs, de propriétés et d’holders

En reprenant notre exemple de l’article Les bases – Création de types, de sous-types et d’instances nous allons voir comment ajouter des attributs et des propriétés sur notre type Vehicle.

Introduction

Generic System permet de poser des attributs et des propriétés sur un type :

  • un attribut peut avoir plusieurs valeurs ;
  • une propriété ne peut avoir qu’une seule valeur.

Attribut

Dans Generic System, la valeur d’un attribut est représentée par un holder : c’est un nœud qui encapsule la valeur de l’attribut.
Reprenons notre exemple, et ajoutons l’attribut Options au type  Vehicle :

Les premières lignes de code permettent de récupérer une information dans le moteur de Generic System, à savoir le type Vehicle et son instance myVehicle. Nous verrons dans un prochain article comment rechercher une information dans Generic System.

Vous pouvez constater que la création d’un attribut n’est pas plus compliquée que celle d’un type. Cette fois, c’est la méthode addAttribute du type Vehicle qui est appelée.
Ajoutons maintenant quelques options à notre véhicule :

Comme nous l’avons vu plus haut, la valeur d’un attribut est représentée par un holder. On fait donc appel à la méthode addHolder de myVehicle pour ajouter de nouvelles options.

Représentation schématique

Voici comment pourrait être représentée de façon schématique un type Vehicle et son instance myVehicle, associé à un attribut Options comportant deux holders music et ABS :

[3D] Représentation d'un attribut et de deux holders
[SCHEMA] Représentation d'un attribut et de deux holders

Propriété

Une propriété est un cas particulier d’attribut, puisqu’elle ne peut avoir qu’une seule valeur. Dans notre exemple, Options est un attribut pour lequel il est logique de posséder plusieurs valeurs : ABS, ESP, autoradio, GPS, etc.
Un exemple d’attribut qui ne pourrait avoir qu’une seule valeur serait la puissance de la voiture : elle est (normalement) unique.

Reprenons notre exemple, et ajoutons une propriété Power à notre type Vehicle :

Comme pour créer un attribut, on crée une propriété grâce à la méthode addAttribute du type Vehicle. Par contre, il faut indiquer au moteur de Generic System que notre nouvel attribut est une propriété. On utilise pour cela la méthode enablePropertyConstraint() de notre attribut, qui permet d’indiquer que l’attribut Power ne peut avoir qu’un seul holder.

Nous parlerons plus en détails des contraintes dans l’article Avancé – Les contraintes dans Generic System.

Pour terminer notre exemple, indiquons la puissance de nos deux instances de Vehicle :

Si vous essayez d’ajouter un autre holder à myVehicle ou yourVehicle, votre modification sera refusée et Generic System lèvera une exception  PropertyConstraintViolationException.

Représentation d’une propriété et d’un holder par instance :

Représentation schématique

Voici comment pourrait être représentée de façon schématique un type Vehicle comportant deux instances, associé à une propriété  Power :

[3D] Représentation d'une propriété et d'un holder par instance

En résumé

Generic System permet de créer des attributs et des propriétés. Les instances des attributs et des propriétés sont représentées par un holder.

  • un attribut peut prendre plusieurs valeurs ;
  • une propriété ne peut avoir qu’une seule valeur.

Pour déclarer un attribut ou une propriété sur un type, il faut faire appel à la méthode addAttribute de ce type. Pour déclarer une propriété, il faut ajouter une contrainte d’unicité  PropertyConstraint sur l’attribut grâce à la méthode  enablePropertyConstraint().

Enfin, l’ajout de valeurs se fait grâce à la méthode addHolder. Un holder est un nœud qui représente la valeur d’un attribut ou d’une propriété ; il peut être assimilé à une instance.