Les associations décrivent des relations structurelles entre des classes, qui deviennent des liens entre les instances de ces classes. Ces liens représentent une navigation interobjet, c'est-à-dire le fait qu'une instance puisse extraire une autre instance via le lien navigable.
Lorsque l'extrémité d'une association est navigable, cela signifie que vous souhaitez pouvoir extraire l'instance de la classe à laquelle cette extrémité est liée, cette instance s'affiche sous forme d'attribut migré dans l'instance courante d'une classe. Le nom de rôle de cette extrémité peut être utilisé pour clarifier la structure utilisée pour représenter le lien.
Par exemple, considérons une association entre la classe Société et la classe Personne. La navigation est possible dans les deux directions pour permettre à Société d'obtenir la liste des employés, et à chaque employé d'obtenir le nom de sa société.
PowerAMC prend en charge différents modes de mise en oeuvre des associations dans chaque langage objet.
Par défaut, les attributs migrés utilisent la classe dont ils proviennent comme type.
Lorsque la multiplicité d'association est supérieure à un, le type est le plus souvent un tableau de la classe, affiché avec des signes [ ]. Dans notre exemple, l'attribut Employé de la classe Société est de type Personne et a un tableau de valeurs. Lorsque vous instanciez la classe Société, vous obtenez une liste d'employés à stocker pour chaque société.
public class Company { public String Name; public String Catalog; public String Address; public Person[] employee;
Selon le type de langage sur lequel vous travaillez, vous pouvez mettre en oeuvre des attributs migrés de façons différentes. PowerAMC permet de choisir une mise en oeuvre dans l'onglet Détails de la feuille de propriétés d'associations.
Unconteneur est un type de collection d'objets qui stocke des éléments. La structure de conteneur est plus complexe que celle du type de tableau et fournit plus de méthodes pour accéder aux éléments (tester l'existence de l'élément, insérer l'élément dans la collection, etc.) et pour gérer l'allocation de mémoire de façon dynamique.
Vous pouvez sélectionner un type de conteneur à partir de la liste Type de conteneur. Ce type sera utilisé par les attributs migrés. Le code d'un attribut migré qui utilise un type de conteneur contient des fonctions getter et setter utilisées pour définir la mise en oeuvre de l'association. Ces fonctions sont visibles dans l'onglet Aperçu du code, mais ne s'affichent pas dans la liste des opérations.
Lorsque vous utilisez la fonctionnalité de migration de rôle pour visualiser des attributs migrés et sélectionner un type de conteneur, le code généré est identique.
Selon le langage et les bibliothèques que vous utilisez, le type de conteneur peut être associé à une classe de mise en oeuvre. Dans ce cas, le type de conteneur est utilisé comme une interface pour déclarer les fonctionnalités de la collection, et la classe de mise en oeuvre développe cette collection. Par exemple, si vous sélectionnez les type de conteneur java.util.Set, vous savez que cette collection ne contient aucun élément en double. Vous pouvez alors sélectionner une classe de mise en oeuvre parmi les suivantes : HashSet, LinkedHashSet ou TreeSet.
Pour plus d'informations sur les types de conteneur et les classes de mise en oeuvre, reportez-vous à la documentation relative au langage approprié.
Le mécanisme de mise en oeuvre par défaut est défini dans le fichier de ressources situé sous la catégorie Profile\Association. Ce mécanisme utilise des templates pour définir la syntaxe générée pour l'attribut migré, les opérations à générer, et les autres détails relatifs à l'association. Par exemple, le template roleAMigratedAttribute permet de récupérer la visibilité et la valeur initiale du rôle d'association. Vous pouvez utiliser l'interface de l'éditeur de ressources pour modifier les détails de mise en oeuvre.
Pour plus d'informations sur la définition de template, voir Personnalisation et extension de PowerAMC > Personnalisation de la génération à l'aide du langage de génération par template