/ / Comment représenter un paramètre générique dans la méthode UML? - java, uml

Comment représenter un paramètre générique dans la méthode UML? - java, uml

Je dois inverser l'ingénierie de certaines classes d'unApplication Java dans un diagramme de classes UML 2. Jusqu'ici tout va bien, j'ai trouvé comment représenter les modèles de classe pour toute la classe comme proposé par Jon Skeet ici: Quelle est la bonne façon de représenter des classes de modèles avec UML?. Avec ces informations, j'ai inversé l'ingénierie d'une classe comme celle-ci:

public class Foo<T> {
//class fields and methods...
}

J'ai maintenant un dilemme à essayer de désosser une classe dont seule une méthode contient un paramètre générique:

public class OtherFoo {
public <T extends Comparable<T>> boolean bar(T x, T y) {
//fancy code goes here...
}
}

Savez-vous comment réaliser indépendamment de tout outil UML 2? Je veux juste comprendre le concept.

Réponses:

9 pour la réponse № 1

Je ne sais pas comment faire cela dans l'outil de votre choix, mais au niveau du modèle, cela fonctionne exactement comme pour les classes. Vous créez une opération de modèle avec votre signature.

Chapitre 17.4.14 du Superstructure UML2 spécifie ceci pour la notation:

Les paramètres de modèle et la liaison de paramètres de modèle d'une opération de modèle sont deux listes entre le nom du fonctionnement et les paramètres de l'opération.
* <visibilité> <nom> ‘<‘ <template-parameter-list> ‘>’ ‘<< << <binding-expression-list>‘ >> ’’ (‘<parameter> [‘,’ <parameter>] ** ‘)’ [‘:’ <property-string>]

Dans votre cas, voyons d'abord le cas simple de

public <T> boolean bar(T x, T y)

Cela correspondrait à

+ barre <T> (x: T, y: T): booléen

Votre exemple original semble un peu pluscompliqué parce que le paramètre de modèle est contraint à une autre classe, comparable, qui est à son tour également un modèle dont le paramètre (je l'appellerai T1) est lié au paramètre de l'opération à son tour. Cela nous donne

+ bar <T> Comparable <T1-> T >> (x: T, y: T): booléen


Remarque: (Un peu de randonnée en profondeur) Modèles tels que spécifiés par UML (et pour certainsdegré C ++) sont une bête très différente des génériques en Java. Ils se ressemblent plus ou moins, mais il existe des différences - parfois subtiles - dans leur sémantique qui peuvent rendre difficile la correspondance des deux. Le plus important dans UML est le suivant:

Un modèle ne peut pas être utilisé de la même manière qu'unélément non modèle du même type. L'élément de modèle peut être utilisé uniquement pour générer des éléments liés (par exemple, une classe de modèle ne peut pas être utilisée comme type d'élément typé) ou comme partie de la spécification d'un autre modèle (par exemple, une classe de modèle peut spécialiser une autre classe de modèle).

Cela signifie qu'en UML, OtherFoo doit être unmodèle, aussi - c'est-à-dire avoir une signature de modèle (avec 0 paramètres). Pour utiliser ensuite correctement le modèle d'opération en dehors de la portée du modèle - c'est-à-dire l'appeler dans une activité ou similaire - vous devez d'abord le lier à une opération concrète, qui est utilisée à la place. Dans le cas de votre exemple, cela signifie:

  1. Lier le modèle OtherFoo à une classe liée (anonyme).
  2. Modèle d'opération de barre de liaison à une opération de la classe liée.