Existe-t-il une approche UML inituitive pour représenter les threads
J'aime utiliser des diagrammes UML pour décrire mon logiciel. Dans la majorité des cas, les diagrammes sont pour mon propre usage et je les utilise pour des morceaux de code plus impliqués, des interactions, etc. où je vais bénéficier de pouvoir regarder en arrière sur eux dans le futur.
Une chose que je me suis retrouvée à faire de différentes manières est de schématiser les threads. Les Threads de par leur nature ont tendance à apparaître dans les morceaux de code les plus impliqués et le suivi d'eux est souvent un but principal de ma conception document.
Dans le passé, j'ai utilisé un symbole dans un diagramme de séquence pour montrer la création d'un nouveau thread, mais en regardant certains diagrammes, il est parfois ambigu entre la durée de vie d'un objet - pour laquelle les diagrammes de séquence sont - et la durée de vie d'un thread. Existe-t-il une meilleure approche pour incorporer des threads dans UML?
8 réponses
J'ai réussi à produire un diagramme qui a du sens pour moi au moment de le dessiner. La prémisse de base est que j'ai superposé des boîtes grises représentant des instances de classe avec des boîtes bleues représentant des durées de vie des threads. La principale chose qu'il me permet de garder une trace est de savoir sur quel thread je vais exécuter quand j'appelle certaines méthodes.
Il n'y a aucun doute qu'il existe des moyens meilleurs et plus intuitifs de faire de la modélisation de threads et de classes. La mesure du succès pour moi est de savoir si mon propre diagramme me donne toujours le même niveau de compréhension 6 mois sur la piste.
Les diagrammes D'activité, de séquence et D'État sont Tous des façons correctes d'afficher le comportement du thread.
1st: (aux commentaires de vs) il y a deux ensembles de Diagrammes ou d'éléments de modélisation dans UML, la structure statique, comme vous le dites, et comportementale. Tout livre vous aidera à comprendre la scission, généralement dans le contenu/TOC, en outre, il peut être vu à la page 11 de L'UML de Martin Fowler distillé une norme presque de fait pour commencer UML à mon avis.
2ème: (À sipwiz's question and comment) les diagrammes D'activité ne sont pas communément compris pour modéliser les processus métier, ils peuvent être utilisés pour cela cependant, et la plupart des exemples ou des tutoriels simples l'aborderaient du point de vue commercial.
Discussion sur vos options pour modéliser les threads:
Diagrammes D'activité - permet de bifurquer et de spécifier la concurrence en utilisant une barre et des lignes d'utilisation. Notez que l'exemple en bas n'est pas un processus métier, exemple . La plupart des les gens peuvent lire ceux-ci, les entreprises, la gestion et les développeurs, mais parfois ils peuvent manquer de détails ou devenir désordonnés.
Diagrammes D'Interaction de Séquence - dans le même article, exemple , vous verrez des diagrammes de séquence vous permettent de spécifier un comportement parallèle dans une séquence en boxant un comportement parallélisable avec une étiquette "par" , ceci est utile pour montrer au lecteur quelles méthodes peuvent ou doivent être appelées en parallèle, c'est-à-dire par différents threads. C'est la méthode que j'ai utiliser pour développeur détaillé comme des discussions autour de la construction d'un objet.
State diagram - le graphique d'état tout comme l'activité permet la concurrence en utilisant une barre et des lignes d'utilisation.
NOTE: ceux-ci ne modéliseront pas un thread spécifique et c'est un cycle de levage exact, car cela fait partie du niveau d'instance/exécution de la modélisation, si ce que vous voulez clarifier votre question et je répondrai. Je le modéliserais simplement en utilisant l'un des éléments ci-dessus comme personne d'autre qu'un MDA / UML expert vous appellera, et vous ne générez pas un système en cours d'exécution.
Aussi: Veuillez noter que plus de détails peuvent être trouvés dans la plupart des livres UML. Également mobilisé: http://www.jguru.com/faq/view.jsp?EID=56322
Traditionnellement, le filetage a été représenté schématiquement à l'aide de filets de Petri. Rob Martin a un article sur le multithreading en UML que vous trouverez peut-être utile.
Update-je viens de me rappeler que vous pouvez représenter des threads avec des fourches dans des diagrammes d'activité-j'ai réussi à Trouver quelque chose qui explique cela .
Il est très difficile de trouver des tutoriels gratuits pour les filets Petri, mais je sais que les filets Petri sont bons pour la modélisation de la concurrence, donc J'ai Google " producteur-consommateur Petri Nets " (mon truc de threading préféré) et trouvé ceci .
J'ai aussi trouvé quelques diapositives qui montrent des filets de Petri modélisant un sémaphore .
Je ne connais pas de moyen, mais l'utilisation d'un diagramme de séquence ne semble pas tout à fait inappropriée, étant donné qu'un thread est dans de nombreux langages implémenté en tant que Classe Thread
(ou similaire).
La manière la plus compatible avec UML serait probablement d'ajouter une annotation indiquant que 'object' représente un thread.
L'UML est défini par la Superstructure UML, vous pouvez le trouver ici http://www.omg.org/spec/UML . Si vous lisez la spécification, vous constatez qu'une classe UML peut être active. Une classe Active est une classe avec le méta-attribut isActive défini sur true. Il est également représenté différemment. Une instance d'objet d'une classe active exécute automatiquement un "comportement de classificateur". Comme pour tout comportement vous pouvez le définir au moyen d'une activité dans laquelle vous attendez des signaux asynchrones (AcceptEventActions) et appelle des méthodes (CallOperationAction) ou d'autres comportements (CallBehaviorActions). C'est ainsi que les objets actifs sont modélisés dans UML. Vous avez juste à lire la spécification UML.
Les diagrammes D'activité modéliseront le fonctionnement interne de votre logiciel avec forks et jointures pour représenter les threads . Pour savoir exactement {[4] } comment modéliser cela correctement, veuillez consulter L'excellente série D'articles de Conrad Bock. Voici l'article qui couvre les fourches et les jointures, mais vous devez suivre les liens vers le premier article de la série pour apprendre à modéliser correctement en utilisant des "filets de Petri colorés". Ce n'est pas comme ça que vous pensez (et c'est assez facile)!
Il y a une nouvelle norme en cours de processus à la OMG pour un langage appelé Alf qui fournit une notation de surface plus pratique pour les diagrammes d'activité et est destiné à représenter le code. De la spécification:
Un objectif principal d'un langage d'action est d'agir comme la notation de surface pour spécifier l'exécutable comportements dans un modèle plus large qui est principalement représenté en utilisant les notations graphiques habituelles de UML. Par exemple, cela peut inclure des méthodes sur le opérations de classes ou effet de transition comportements sur les machines d'état.
Pour un programmeur, vous ne pouvez probablement pas être plus intuitif que Alf. Et il se convertira parfaitement en diagrammes D'activité UML.
Le point le plus fort UML représente la structure statique. Si vous utilisez des threads de courte durée, Je ne vois pas non plus de moyen facile de les schématiser. Peut-être que vous pouvez trouver une solution en retournant un peu les choses: pourquoi utilisez-vous/avez-vous besoin de threads? Quelle est la fonctionnalité qu'ils fournissent? S'ils interagissent les uns avec les autres et suivent une API (passage de message), les dessiner en tant que composants pourrait avoir du sens.