versiones sirve que para objetos ejemplos diagramas diagrama colaboracion clases caracteristicas uml modeling model-driven-development

sirve - uml ejemplos



¿Es UML un lenguaje de programación? (12)

¿En teoria? Sí, puede usar diagramas de máquina de estados de gajillion y especificar todo con minucioso detalle, luego conecte los diagramas de máquina de estado a los métodos en su diagrama de clase y ejecute una herramienta horriblemente complicada para generar todo esto.

Pero esto no es algo que quieras hacer. No tendrás más libertad en la forma en que te expresas, porque tienes que usar el tipo correcto de sintaxis para que la herramienta entienda todo lo que escribes. No solo eso, sino que usted mismo podría escribir el código real en mucho menos tiempo del que le llevaría hacer todos esos diagramas, y lo único que le ofrece es que el código es una copia al carbón de la especificación. (porque la especificación genera el código). Puede que sea algo bueno, pero como no tiene un código real, eso también significa que depurar significa depurar los diagramas, y eso es casi seguro que será casi imposible.

Podría usarse UML para programar un sistema informático por sí solo, sin un lenguaje de implementación de soporte, por ejemplo, diagramas directamente al código de máquina (tal vez a través de C o C ++, etc.) sin intervención de codificación humana.


Ahora existe una semántica de ejecución totalmente estandarizada, completamente completada por OMG, para un subconjunto de UML 2.3, conocida como "UML fundamental" (fUML). Busque aquí una implementación de referencia y un puntero a la especificación OMG. También hay trabajo en curso en un lenguaje de acción UML estándar OMG.

Para bien o para mal, cuando se realice este trabajo, fUML será un lenguaje de programación.

- Ed



El diagrama de clase puede ser dirigido hacia el lenguaje de programación dependiendo de la herramienta UML que esté utilizando. Creo que todavía necesitas codificar tu propia lógica de negocios, etc.


Existen algunas herramientas para convertir diagramas de modelado UML en código, específicamente, diagramas de estado UML. Por ejemplo, usé una herramienta llamada "Rhapsody" (de I-Logix) en 2000 que convertiría un diagrama UML a C ++. Fue genial porque la herramienta podía ejecutar la máquina de estado directamente y también podía ejecutar código en una máquina remota (en este caso, una placa que ejecuta vxworks).

Pero en general, UML se utiliza mejor como herramienta de modelado. Úselo para modelar su sistema y proporcionar diagramas para sus documentos de diseño, o lo que sea. Luego use ese conocimiento para desarrollar su sistema de una manera organizada.


La semántica de acción UML tiene soporte para la asignación / disposición de objetos, lectura / escritura de atributos y variables locales, invocación de una operación, lanzamiento y captura de excepciones, navegación de una relación, bloques, bucles y comportamiento condicional, y mucho más.

Ver:

http://abstratt.com/blog/2008/11/02/what-can-uml-do-for-you/

http://abstratt.com/blog/2008/11/07/executable-models-with-textuml-toolkit-12-m1/

Para aquellos que dicen "no": la pregunta es sobre UML , no sobre las "herramientas UML que usa", amigos. UML es un lenguaje enorme, y las herramientas implementan un subconjunto de él, que a menudo puede ser bastante pequeño.


No lo es. De ningún modo.

No puede tomar decisiones (si las hay) o ejecutar bucles. Es menos un lenguaje de programación que una máquina de estados finitos. Al menos un FSM puede tomar decisiones. UML ni siquiera tienen estado.


Respuesta corta: Tal como está ahora, no puede generar el 100% del código.

Probablemente podría generar la estructura de clase de sus sistemas a través del Diagrama de clase, y probablemente parte del cuerpo de los métodos a través de Diagramas de interacción y / o Gráficos de estado, pero creo que eso es todo.


Respuesta corta: no. Algunas herramientas de modelado UML pueden generar Java, C ++ y código en otros lenguajes de programación. Sin embargo, lo que genera son generalmente interfaces y relaciones de clase. Estas herramientas generan talones para los cuales aún se necesita proporcionar la implementación, por lo que es necesaria la intervención humana.


Sí, es posible, solo compruebe los enfoques como ExecutableUML (y se acerca un nuevo estándar en el mismo sentido) que se basan en el uso de un lenguaje de acción para expresar los detalles del comportamiento del sistema (una especie de psedocode con iteradores, condiciones, y crear, leer, actualizar y destruir acciones).

Una discusión completamente diferente es que esto vale la pena. Modelar el sistema con suficiente precisión y detalle para poder generar el 100% del código no siempre da sus frutos. Prefiero mantener mi principio de pareto (o la regla 80-20) para el desarrollo basado en modelos: el 20% del esfuerzo de modelado es suficiente para generar el 80% del código de la aplicación

Una explicación más detallada aquí: http://modeling-languages.com/blog/content/pareto-principle-applied-mdd


UML puede modelar una máquina de estados. Por lo tanto, puede representar una máquina de Turing. Un compilador con suficiente sofisticación puede leer esta representación y crear una representación binaria (ejecutable) de la máquina de Turing .

Por lo tanto, mi respuesta es sí.

Editar

Ya que mi respuesta parece ser desagradable para algunos ... permítanme aclarar que este "compilador con suficiente sofisticación" es completamente imaginario y probablemente muy lejano en el futuro ... pero parece que a partir de las otras respuestas, hay algunos programas que pueden generar Algún código repetitivo o incluso generar y ejecutar un programa completo.

Creo que eso prueba que UML (o algún subconjunto de él) califica como un lenguaje de programación, pero probablemente no sea uno bueno.


Voy a ir en contra de la tendencia general y compartir una experiencia que muestre lo que UML puede hacer hoy, y lo que podría ser alguna versión futura de UML (u otro enfoque de modelado).

Primero, un poco de historia.

Mucho antes, cuando la gente programaba las computadoras en ensamblaje (sin ir TODO atrás). Luego vinieron lenguajes de nivel superior como C y Basic. Los programadores que eran muy buenos en ensamblaje argumentaron que no se puede expresar completamente todo lo que el procesador es capaz de hacer (de una manera optimizada) en un lenguaje de nivel superior. De hecho, tenían razón. Algunas cosas eran mucho menos óptimas desde el punto de vista de la memoria y el rendimiento en idiomas de nivel superior porque no podía controlar por completo las instrucciones emitidas al procesador.

La cuestión es que los lenguajes de nivel superior proporcionaron una forma de expresión mucho más abstracta. Entonces, se dieron cuenta y después de un tiempo, a la gente realmente no le importó que no pudieras controlar completamente todos los aspectos del procesador porque los desarrolladores eran mucho más productivos ( la Ley de Moore también ayudó).

Rondas similares ocurrieron con lenguajes orientados a objetos, y nuevamente con lenguajes administrados. Cada vez, un mayor nivel de abstracción estuvo disponible y eventualmente ganó porque era más eficiente de usar como desarrollador. De hecho, generalmente las ineficiencias en los niveles más altos de expresión desaparecen a medida que los compiladores mejoran y las técnicas de optimización mejoran.

El desarrollo guiado por modelos es un nivel más alto de expresión. No puede representar completamente ningún código que pueda escribir, por ejemplo, C # o Java. Especialmente no fuera de la caja. Sin embargo, es posible generar una parte muy importante de una aplicación directamente desde un modelo UML.

Dirigí el esfuerzo de generación de código basado en UML para varios proyectos bastante grandes. En muchos casos, podríamos generar del 30% al 60% del código fuente completo de las aplicaciones (de la vida real, de clase empresarial). Y eso es solo con un pequeño equipo que escribe generadores para un dominio en particular. Eventualmente, toda una industria estará detrás de las herramientas para generar más y más aplicaciones de la vida real a partir de modelos.

Ese es el siguiente paso en la evolución natural que hemos visto en nuestra industria una y otra vez, desde que los primeros códigos de ensamblaje resumieron los códigos de operación (probablemente hubo algo antes de eso, pero eso fue antes de mi tiempo).