viernes, 27 de noviembre de 2009

Diagramas de Clases en UML

Un diagrama de clases muestra un conjunto de clases, interfaces, y colaboraciones y sus relaciones. Gráficamente un diagrama de clase es una colección de vértices y arcos. Es justo un tipo especial de diagrama y comparte propiedades comunes al igual que todos los otros diagramas -un nombre y un contenido gráfico son una proyección dentro de un modelo. Muestra un conjunto de clases, interfaces, y colaboraciones y sus relaciones entre ellos.

Los diagramas de clase se usan en el diseño del modelo estático para ver un sistema. Para las demás partes, este modelado involucra el vocabulario del sistema, el modelado de colaboraciones, o modelado de esquemas. Son importantes no solo para la visualización, especificación y documentación del modelo estructural, pero también para la construcción de sistemas ejecutables. Ingeniería hacia adelante e ingeniería inversa.

UML, usa los diagramas de clase para visualizar el aspecto estático de esa construcción de bloques y sus relaciones y especificar esos detalles para la construcción.

Un diagrama de clases comúnmente con tiene lo siguiente:

  • Clases
  • Interfaces
  • Colaboraciones
  • Dependencia
  • Generalización
  • Relaciones de asociación

Los otros diagramas de clase pueden contener notas y restricciones. Los diagramas de clase pueden también contener paquetes o subsistemas ambos de los cuales son usados para agrupar elementos de su modelo. Algunas veces se quieren instancias de lugar en el diagrama de clases, como también especialmente cuando se quiere visualizar el tipo de una instancia.

Estos diagramas de clase son muy útiles ya que de aquí podemos sacar directamente el código fuente para varias plataformas en las que queramos implementar nuestro sistema, esto es con la ingeniería hacia adelante; o bien, podemos tomar un código fuente que ya este programado, y posteriormente importarlo en un programa que maneje UML, y de esta manera creara el diagrama de clases desde el código, a esto se le llama ingeniería inversa.



Ingeniería hacia adelante.

Es el proceso de transformar un modelo en código a un mapeo en un lenguaje de implementación. La ingeniería hacia adelante resulta en una pérdida de información, porque el modelo escrito UML es semánticamente más rico que cualquier lenguaje de programación orientado a objetos. De hecho esta es una mayor razón por lo que es necesario modelar en adición al código. Características estructurales tales como colaboraciones, y características de comportamiento tales como interacciones pueden ser visualizadas claramente en UML , pero no son tan claras para un línea de código.

Ingeniería inversa.

Es el proceso de transformar código en un modelo a un mapeo de la especificación del lenguaje de implementación. La ingeniería inversa es resultado de la abundancia de información, algo de lo cual está en un nivel bajo de detalle que se necesita para construir modelos útiles. En algún momento la ingeniería inversa es incompleta. Esto trae pérdida de información de los modelos de la ingeniería hacia adelante al código, y también cuando no se puede recrear completamente un modelo de código a menos que las herramientas dosifiquen información en la fuente de comentarios semánticamente más allá del lenguaje de implementación.

Hay algo que quieras aportar? Siéntete libre de comentar

2 comentarios:

Jose Roberto dijo...

En el núcleo de la narración... Como podrás haber aprendido, los diagramas UML son indispensables cuando se trata de un trabajo de software serio, profesional y sobre todo de gran tamaño, este mismo software no debería de sorprendernos que sea realizado por un equipo con un número de participantes significativo, donde, para darse a entender cada uno de esos integrantes, que mejor manera de hacerlo que mediante precisamente un diagrama UML (y es aquí donde también actúa lo que mencionas como ingeniería e ingeniería inversa). A futuro después de haber realizado el trabajo, los diagramas de UML facilitan la detección de errores y mejoras, para (de necesitarse) una mejora constante de tu software. Entiéndelo como el diagrama del arquitecto para hacer su obra, si ocupara quitar un pilar y no tuviese el diagrama de la construcción, y se propone al tanteo buscar la manera de reforzar la construcción, eso no es nada factible, lo llamo anti-ingeniería.

Jero!! dijo...

Creo que es importante hacer un diseño efectivo y que trate de abarcar todos los aspectos necesarios para el sistema, en eso se basa lo que dices ingenieria hacia adelante, pero muchas veces nosotros los estudiantes al principio no logramos abarcar todos los puntos necesarios en el sistema y tenemos que ir y reorganizar y crear las clases de vuelta, por lo que suele ser mas facil para algunos lo que es la ingenieria inversa.
En mis experiencias la ingenieria inversa me ha ayudado mucho, sin embargo es bueno aprender siempre para no depender de ella y saber como llevar a cabo una ingenieria hacia adelante con una buena estructura desde los requerimientos, casos de uso y clases.
Saludos.