web-dev-qa-db-fra.com

Comment dessiner une méthode abstraite dans un diagramme de classes UML

public abstract class Shape {   
    abstract int area();
}

Comment dessiner le diagramme de classe UML pour la méthode abstraite? Utilisation +, - ou #?

public class Room { 
    int nWindows;   
}

Et si la variable d'instance de classe n'a pas public, private ou protected?

10
Nicholas Chan

Abstrait

Selon la spécification UML:

Le nom d'un classificateur abstrait est indiqué en italique, lorsque la police utilisée le permet. Alternativement ou en plus, un classificateur abstrait peut être affiché en utilisant l'annotation textuelle {abstract} après ou sous son nom.

Notez cependant que Operation est pas un classificateur. Il a toujours un attribut isAbstract en tant que BehavioralFeature mais la spécification 2.5 ne définit pas comment modéliser le fait d'être abstrait. Les spécifications plus anciennes (1.4.x) utilisaient la même méthode que pour les classificateurs et c'est une méthode largement reconnue pour montrer l'abstraction des opérations. Notez seulement que les éléments entre accolades pour les fonctionnalités sont présentés à la fin de la ligne plutôt que juste après le nom (le classificateur n'a simplement aucune autre spécification directement après le nom).

Il est possible que les auteurs aient fait une erreur dans la spécification 2.5 pour la notation d'abstraction de fonctionnalité par une erreur.

Une opération abstraite peut bien sûr avoir n'importe quel type de visibilité.

Bien sûr, l'opération peut être abstraite uniquement si son classificateur contenant (la classe dans votre cas) est également abstrait.

Pas de visibilité

En général, le type de visibilité dans UML est facultatif, c'est-à-dire que vous pouvez simplement l'omettre. Il suffit de prendre en considération que UML est un modèle afin qu'il puisse en fait ignorer certains éléments non pertinents ou les spécifier à un stade ultérieur de la modélisation. Ne pas utiliser de type de visibilité dans UML ne vous permet pas de faire d'hypothèse sur son type de visibilité final.

D'un autre côté, si dans le code réel vous n'utilisez pas de spécification de type de visibilité (si cela est autorisé), il y a un comportement par défaut. Par exemple

  • dans Java c'est package (#) - dans la compréhension UML, Java l'appelle "package-private",
  • en C++ vous vous retrouverez avec une fonctionnalité privée (-),
  • dans PHP ces fonctionnalités sont traitées comme publiques (+)

etc.

12
Ister