Question

It'a un fait bien connu que UML ne complète Turing (contrairement aux langages de programmation habituels). Mais il me semble UML est encore plus flexible que les langues traditionnelles. Je ne peux pas imaginer un problème que vous pouvez décrire à l'aide d'un langage comme C ++ (f.e) mais en même temps ne peut décrire au moyen d'UML. Bien au contraire, il est beaucoup plus facile pour moi de fantaisie d'une construction existante en UML, mais unreliazable en C ++ (Java, Delphi, VB et ainsi de suite ...) Pourriez-vous me aider à comprendre ce moment? Je ne peux pas l'attraper.

Était-ce utile?

La solution

que je dirais UML est un langage complet turing depuis l'ajout du paquet Action Semantics (ce qui est arrivé dans la version UML 1.5).

UML comprend un langage d'action impératif (à ne pas confondre avec OCL) qui permet une définition précise du comportement des méthodes de classe. Ce langage d'action impératif comprend l'ensemble typique des affectations, si les conditions, itérateurs, ... attendent de toute utilisateur Vous langage de programmation.

Ce langage d'action est l'une des composantes populaires des approches UML Executable mais maintenant partie de d'une manière standard UML lui-même

Autres conseils

Question intéressante. Un couple de points viennent à l'esprit, bien qu'il y ait probablement plus tout à elle. Toutes mes excuses, il est assez long.

Que pouvez-vous décrire avec par exemple C ++ que vous ne pouvez pas décrire avec UML?

D'abord, vous devez définir ce que vous entendez par « UML ». En général, les gens ont tendance à dire les éléments « de base » - ceux des diagrammes de classes, diagrammes d'états, diagrammes d'activités, etc. -., Plus OCL (la langue de contrainte)

Étant donné ces éléments que vous ne pouvez pas spécifier des algorithmes impératives. , Tout ce qui exige expressément l'affectation. Cependant, vous pouvez obtenir très proche: les étapes et la logique de décision peut être exprimée en utilisant par exemple Activité de diagrammes, et la fonction de chaque étape définie comme pré- et post-conditions OCL. Cependant, vous avez jamais tout à fait de spécifier complètement le comportement. Prenons l'exemple d'une étape atomique dont le but est d'augmenter la valeur d'un nombre entier. L'entrée a est un nombre entier - par exemple X. La sortie est décrite par l'X == X@pre+1 post-condition. Cependant, il n'y a rien à UML réellement mettre en œuvre l'étape.

Maintenant, il est tout à fait concevable d'étendre l'utilisation d'UML à l'adresse ci-dessus. L'action UML Sémantique ont été développés précisément pour permettre la spécification des actions. Cela rend le langage complet. Les problèmes sont simplement pratique:

  1. Il n'y a pas universellement accepté et la syntaxe adoptée pour la sémantique;
  2. Il y a très peu implémentations

Que pouvez-vous décrire avec UML qui ne peut pas être mis en œuvre par exemple C ++?

En rien l'essence. Cependant, il y a deux limites pratiques:

  1. UML « spécifications » sont généralement imprécises, ambiguës et / ou incomplètes. Activité diagrammes, par exemple, laissent souvent des chemins ballants. Se pourrait-il être représenté directement en C ++? Oui. Ne serait-il compiler? Non.
  2. Certains des correspondances pour UML construit impératives, langages de la pile ne sont pas négligeables. Les modèles de l'État sont un exemple: alors qu'il ya des motifs bien connus, la cartographie est assez complexe. Cela est particulièrement vrai pour le comportement hiérarchique et / ou en même temps. Dans un diagramme d'activités, il est facile d'exprimer que deux activités se produisent en parallèle, puis synchroniser avant de passer à l'étape suivante. Cela peut bien sûr être fait en C ++, mais nécessite l'utilisation de par exemple bibliothèques filetage.

Il peut cependant être fait. En fait, il est ce que les outils UML Executable font: Modèle prendre un modèle Compilateurs UML exécutable et le traduire dans 100% de fonctionnement du code impératif

.

HTH.

Comme son nom l'indique UML est un langage de modélisation. Il peut parfois être appliqué une méthodologie de conception de logiciels.

Il était une fois qu'ils rêvaient des moyens de génération automatique de code, ils ont été appelés outils CASE. Ils ont échoué à obtenir les générateurs de code pour travailler efficacement, bien qu'ils ont fait enlever beaucoup de code de plaque de la chaudière de la langue. Cette augmentation est devenue la clé de UML comme il a fourni un moyen d'augmenter l'expérience de la conception et de logiciels de programmation.

Je ne sais pas si UML est « complète Turing », je l'espère, il est, ne serait-il pas merveilleux de trouver des solutions en décrivant le problème à l'ordinateur au format pictural et de laisser l'ordinateur faire tout ce dur programmation mauvaise pour vous.

UML est le langage de méta à faire dans le code. Il décrit les objets, comment ils se rapportent / Interagir et ce qu'ils font.

UML est ajouté à de nouveaux objets de conception sont ajoutés année par année, et si elle est pas déjà complète Je ne Turing vois pas pourquoi il ne pouvait pas être.

Cependant, je pense, quelque part le long de la ligne que je lis quelque chose sur les langues étant « équivalent Turing » si elles le pouvaient à la fois exprimer et résoudre la même solution.

Depuis UML est le langage de conception et le code est le langage de mise en œuvre basée sur la conception UML Je dirais que UML et le code (c #, java, etc.) sont équivalents Turing. Si elles sont d'accord pour être équivalent alors UML Turing doit être complet Turing.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top