III. Classes spéciales▲
III-A. Définir des structures▲
Pour définir une structure en C++ ou IDL il faut changer le stéréotype d'une classe en struct, et utiliser le bouton Default declaration dans le(s) langage(s) désiré(s). En Java et PHP une structure est implémentée via une classe standard, bien sûr la projection d'un stéréotype d'UML vers un langage donné est définie via les generation settings, regardez la boîte de dialogue précédente et reportez-vous au manuel de référencemanuel de référence de Bouml.
III-B. Définir des unions▲
Pour définir une union en C++ ou IDL utilisez le stéréotype de classe union, puis utiliser le bouton Default declaration dans le(s) langage(s) désiré(s).
III-C. Définir des typedefs▲
Pour définir en C++ le typedef T étant un pointeur sur C1 : créez la classe T, et dessinez une dépendance de T vers C1 :
Éditez la classe et mettez son stéréotype à typedef : le dialogue change et indique un type de base (base type), grâce à la dépendance ce type de base et mis à C1, mais vous pouvez le changer.
Bien évidemment la dépendance n'est pas obligatoire, par exemple pour avoir typedef int turlututu.
Allez dans l'intercalaire C++ et ajoutez une '*' entre ${type} et ${name} :
III-D. Définir des énumérations▲
Les énumérations sont supportées via les stéréotypes de classe enum et enum_pattern.
Créez la classe E, éditez E et changez son stéréotype en enum puis validez par OK. Appelez le menu de la classe E dans le browser et choisissez add item et nommez-le a. Maintenant rappelez le menu et choisissez add attribute et nommez le b. Éditez la classe E et allez dans l'intercalaire C++, demandez la définition par défaut :
Comme vous le voyez, ${items} produit 'a' (les '…' indiquant que seul le nom est affiché, pas la définition complète), mais pas 'b', ceci parce qu'en C++ une énumération peut seulement avoir des items, les attributs et opérations étant illégaux.
Allons dans l'intercalaire Java, c'est une énumération pour au moins la JDK 5 :
'b' est produit par ${member}, le stéréotype attribute permet de distinguer items et attributs.
Allons dans l'intercalaire pour PHP, comme en C++ 'b' n'apparaît pas :
Allons dans l'intercalaire pour IDL, comme en C++ et PHP 'b' n'apparaît pas :
De la même façon, si vous ajoutez une opération à une énumération, celle-ci ne sera pas définie en C++ ni en IDL.
Maintenant, créez la classe OE, éditez la pour mettre son stéréotype à enum_pattern puis validez ma modification via Ok. Regardez le menu de OE dans le browser : il est seulement possible d'ajouter des items. Il n'y a aucune différence entre E et OE en C++ et en IDL, mais tout change en Java où ce type d'énumération est supportée par une classe standard , ceci permet de définir des Énumérations pour des versions de Java précédant la JDK 5:
Comme d'habitude cette forme est définie via les generation settings vous permettant de la modifier.
Je vous propose d'éditer la définition de 'a' dans les classes E et OE et de regarder leur définition pour tous les langages.
III-E. Définir des interfaces▲
Pour définir une interface en Java ou IDL, utilisez le stéréotype de classe interface, puis utiliser le bouton Default declaration dans le(s) langage(s) désiré(s).
Le stéréotype @interface est également pris en compte pour la gestion des annotations en Java.
III-F. Définir des exceptions▲
Pour définir une exception en IDL, utilisez le stéréotype de classe exception, puis utiliser le bouton Default declaration dans le(s) langage(s) désiré(s).
III-G. Templates et Génériques▲
Une classe template en C++ ou générique en Java est une classe ayant des formals définis via l'intercalaire parametrized de l'éditeur de classe.
Lorsqu'une classe généralise ou réalise une classe paramétrée, l'intercalaire instantiate de l'éditeur de classe vous permet d'indiquer les actuals. Bien évidemment une classe paramétrée peut hériter d'une autre, dans ce cas celle-ci possède à la fois des formals et des actuals.