2010-10-13 10 views

Répondre

0

Vous êtes la seule personne à identifier les détails de vos diagrammes UML. Donc UML ne dicte pas (si cela dicte qui s'en soucie :-)) vous quelque chose ... Vous pouvez le montrer ou non.

La vraie question est:

Pourquoi vous dessiner ce diagramme? Qui est votre public? [Qui va lire des diagrammes]

et

Pour vous ou pour votre public, est-il nécessaire que montrent en détail? Quel genre de bénéfice vous gagnez?

Juste informations techniques

En C++

Déclarant une fonction membre avec le mot-clé const indique que la fonction est une fonction « lecture seule » qui ne modifie pas l'objet de qui s'appelle.

Alors ...

Si fnc ne change rien sur elle (il peut changer le Logger) Il peut être "étiqueté" comme "requête".

enter image description here

1

La syntaxe est en fait un peu alambiquée, par exemple:

<<query>> -fnc() 

Le const peut être représenté comme un stéréotype (par exemple, < < requête >> ou «requête» si vous avez un ordinateur post-1980

+0

Bien que si l'exécution du comportement 'fnc' quitte l'état du système inchangé, et étant' void' ne renvoie aucune valeur , ça arrive vraiment? –

+0

@Pete oui ce fnc écrit un journal. –

+0

Eh bien, ce n'est pas tellement la syntaxe. Dans la syntaxe abstraite de UML, il vous suffit de définir le drapeau que cette fonction est une requête d'effets secondaires, de sorte que les guillemots sont juste eye-candy dans la représentation textuelle. – ShiDoiSi

0

Si votre fonction a des effets secondaires comme l'écriture d'un fichier journal, il ne s'agit pas d'une requête au sens UML. De la "UML Superstructure 2.3", Sec. 7.3.36 "Fonctionnement":

isQuery: Boolean Indique si une exécution du BehavioralFeature quitte l'état du système inchangé (isQuery = true) ou si les effets secondaires peuvent se produire (isQuery = false). La valeur par défaut est false.

+0

Cela dépend de ce que "le système" est supposé être. Je suppose qu'il se réfère au logiciel décrit, auquel cas il serait approprié d'utiliser ici. – qid

2

Vous cherchez en effet pour la isQuery propriété sur un Opération.

Selon l'UML (2.5) caractéristiques:

Si la propriété isQuery est vrai, une invocation de l'opération ne doit pas modifier l'état de l'instance ou tout autre élément dans le modèle.

En ce qui concerne la notation UML dit le texte suivant:

[<visibility>] <name> ‘(‘ [<parameter-list>] ‘)’ [‘:’ [<return-type>] [‘[‘ <multiplicity-range> ‘]’][‘{‘ <oper-property> [‘,’<oper-property>]* ‘}’]]

<oper-property> indique les propriétés de l'opération.

<oper-property> ::= ‘redefines’ <oper-name> | ‘query’ | ‘ordered’ |‘unordered’ | ‘unique’ | ‘nonunique’ | ‘seq’ |‘sequence’ |<oper-constraint>

Donc, pour vous par exemple qui deviendrait

+ func() : void {query}