Pregunta

It'a un hecho bien conocido de que UML no Turing completo (en contraste con los lenguajes de programación habituales). Pero me parece que UML es aún más flexible que los lenguajes tradicionales. No me puedo imaginar un problema se puede describir por medio del lenguaje como C ++ (f.e), pero al mismo tiempo no se puede describir por medio de UML. Muy por el contrario, es mucho más fácil para mí a la fantasía una construcción existente en UML pero unreliazable en C ++ (Java, Delphi, VB y así sucesivamente ...) ¿Podría ayudarme a entender este momento? Realmente no puedo cogerlo.

¿Fue útil?

Solución

Me dicen que UML es un lenguaje Turing completo ya que la adición del paquete Semántica de acción (esto ocurrió en UML 1.5 Versión).

Ahora UML incluye un lenguaje de acción imperativa (que no debe confundirse con la línea aérea de contacto) que permite una definición precisa del comportamiento de los métodos de la clase. Este lenguaje imperativo de acción incluye el conjunto típico de asignaciones, si las condiciones, iteradores, ... you'd esperan de cualquier lenguaje de programación.

Este lenguaje de acción es uno de los componentes populares de UML Ejecutable enfoques, pero Está ahora forma parte de la propia

estándar UML

Otros consejos

Es una pregunta interesante. Un par de puntos vienen a la mente, aunque es probable que haya toda una más a él. Disculpas es bastante largo.

¿Qué se puede describir con, por ejemplo C ++ que no se puede describir con UML?

En primer lugar, hay que definir lo que entendemos por "UML". En general, la gente tiende a significar los elementos 'básicos' - los de Clase diagramas, diagramas de estado, diagramas de actividad, etc -., Más OCL (el lenguaje de restricción)

Teniendo en cuenta esos elementos no se puede especificar algoritmos imperativos. Específicamente, cualquier cosa que requiere asignación. Sin embargo, puede llegar muy cerca: la lógica de pasos y la decisión se puede expresar utilizando, por ejemplo, Los diagramas de actividad, y la función de cada paso definido como pre- y post-condiciones en OCL. Sin embargo, nunca llega a especificar por completo el comportamiento. Tomemos un ejemplo de un paso atómica cuyo propósito es incrementar el valor de un número entero. La entrada es un número entero - X digamos. La salida se describe mediante la post-condición X == X@pre+1. Sin embargo, no hay nada en realidad UML a implemento el paso.

Ahora es completamente concebible para extender el uso de UML a la dirección anterior. La acción semántica UML se han desarrollado precisamente para permitir la especificación de las acciones. Si lo hace, hace que el lenguaje computacional completa. Los problemas son meramente práctica:

  1. No hay acuerdo universal y adoptó sintaxis de la semántica;
  2. Hay muy pocas implementaciones

¿Qué se puede describir con UML que no puede ser implementado en, por ejemplo, C ++?

En esencia nada. Sin embargo, hay dos limitaciones prácticas:

  1. UML "especificaciones" suelen ser imprecisos, ambiguos y / o incompletos. Los diagramas de actividad, por ejemplo, a menudo dejan los caminos colgantes. Podría ser representado directamente en C ++? Si. ¿Sería compilar? No.
  2. Algunas de las asignaciones para UML construye de imperiosas, lenguajes basados ??en pila no son triviales. Modelos de estado son un ejemplo: mientras que hay patrones bien conocidos, el mapeo es bastante complejo. Esto es especialmente cierto para el comportamiento jerárquico y / o concurrente. En una actividad Diagrama, es fácil de expresar que dos actividades ocurren en paralelo y luego se sincronizan antes de pasar al siguiente paso. Que pueden por supuesto ser hecho en C ++, pero requiere el uso de, por ejemplo, enhebrar bibliotecas.

Se puede sin embargo ser hecho. De hecho, es lo que las herramientas UML Ejecutable hacen: Modelo compiladores tomar un modelo UML ejecutable y lo traducen en 100% funcionando código imperativo

.

HTH.

Como su nombre indica UML es un lenguaje de modelado. A veces puede ser aplicado como una metodología para el diseño de software.

Hubo un tiempo en que estaban ideando formas de generación automática de código, que fueron llamados herramientas CASE. No pudieron conseguir los generadores de código para trabajar con eficacia, a pesar de que lo quitaron una gran cantidad de código de placa de la caldera de la lengua. Este aumento de convirtió en la clave para UML ya que proporciona una manera de aumentar la experiencia en el diseño y programación de software.

No sé si se UML "Turing completa", espero que lo sea, ¿no sería genial para llegar a soluciones mediante la descripción del problema en el ordenador en formato pictórico y dejar que el ordenador haga tan difícil programación desagradable para usted.

UML es el lenguaje meta con respecto al hacerlo en el código. En él se describen los objetos, cómo se relacionan / interactúan y lo que hacen.

UML se añade a, nuevos artefactos de diseño se están añadiendo año tras año, y si no está ya completa Turing no veo por qué no podría ser.

Sin embargo creo que en algún momento leí algo sobre lenguas son "Turing equivalente" si pudieran expresar y resolver la misma solución.

Desde UML es el lenguaje de diseño y el código es el lenguaje de implementación basado en el diseño UML diría que UML y el código (C #, Java, etc.) se Turing equivalente. Si están de acuerdo en ser Turing Equivalente a continuación UML debe ser Turing completo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top