No olvides que en las ciencias informáticas cualquier problema suele tener más de una soluciones, por lo tanto aquí te enseñamos lo más óptimo y mejor.
Solución:
En UML no es tan importante mostrar si es un puntero o no. ¿Por qué? Porque puede estar usando UML describiendo un OOD para un lenguaje sin punteros.
Respuesta rápida: de su código, A agrega B (diamante vacío en la clase A, conectando B con una línea continua). Eso es porque no hay un destructor que borre lo que UN.attribute referencias de puntero.
Lo realmente importante es decir cuál es la vida útil del objeto al que se hace referencia. Entonces, para un objeto referenciado (tiene relación) que muere cuando el propietario es destruido, debe usar un diamante sólido (relleno). Se llama composición. Entonces, el propietario tiene que administrar el tiempo de vida del objeto de propiedad. Un ejemplo de ello es que el ser humano tiene manos. Las manos no sobreviven cuando el objeto humano es destruido.
Cuando el el diamante no está lleno (agregación), entonces el dueño no es responsable de administrar la vida del objeto poseído. Por ejemplo, no esperará ver que el objeto de propiedad se elimine en el destructor. Un empleador tiene un TeamLeadRole, pero cuando el empleador es “destruido” (es decir, deja la empresa), el TeamLeadRole todavía está disponible.
Ahora, tradicionalmente, cuando ve un diamante relleno, generalmente (no todo el tiempo) tendrá un objeto por valor. Cuando vea un diamante vacío, puede usar una referencia o un puntero.
Si su clase usa otra clase pero no mantiene instancias (o referencias/punteros) a esa clase, entonces puede indicar la dependencia con solo una línea simple (sólida) entre los objetos. Eso significa que hay una relación que se llama asociación.
Un puntero simple de C++ corresponde directamente a una propiedad de referencia en un diagrama de clases UML, como se muestra en el siguiente diagrama:
Tal propiedad de referencia expresa una asociación unidireccional (binaria), como se muestra en el siguiente diagrama:
Observe el “punto” en el lado B de la línea de asociación. Significa que la asociación termina con el nombre “attribute” es propiedad de la clase A, lo que significa que corresponde a la propiedad de referencia que se muestra en el diagrama anterior (la asociación se puede reemplazar con la propiedad de referencia). Para obtener más información, consulte el Capítulo 5 de este tutorial.
No puede usar el símbolo de C++ “*” en el diagrama de clases UML porque
- es específico de Cpp, mientras que su diagrama probablemente debería ser independiente de la plataforma;
- no hay necesidad de usar tal símbolo en UML porque está claro que el attribute referencias a objetos B;
- este símbolo tiene un significado diferente en UML (la multiplicidad ilimitado).
En cualquier caso, la relación entre las clases A y B es una asociación. Puede ser una composición, si tiene la semántica adicional de una relación de componente agregado. Tenga en cuenta que su pregunta debe redactarse: “¿Qué tipo de asociación es?” en lugar de “¿Qué tipo de composición es?” porque la composición y la agregación son tipos especiales de asociaciones.
Existe la posibilidad de diferenciar entre *, & y [] campos en diagramas de clases UML. Se llama “Modificador de tipo”. El problema es mostrarlo en el diagrama de su herramienta. Si tiene una herramienta de diagramación, simplemente dibújela al final como un estereotipo del final. ¡Pero ten cuidado de no mezclarlo con la multiplicidad! Si tienes una herramienta de modelado, tendrás que buscar cómo hacerlo.
Pero tenga en cuenta que se supone que ese campo de puntero/referencia es predeterminado, por lo que realmente no necesita especificar su caso en el diagrama de clase.
Si desea mostrar esta información de manera correcta, utilice un diagrama de estructura compuesta más detallado. Allí puede mostrar estos &,*,[] a tu deseo
Para diferentes variantes de asociación en el diagrama de clase, mire esta mi respuesta para la pregunta similar: https://stackoverflow.com/a/21478862/715269