¿Qué significa la flecha en un diagrama de clase?

9

Necesito ayuda para tratar de entender cuál es el significado de la flecha en un Diagrama de clase UML, más específicamente en este Diagrama compuesto. ¿Cuál es la diferencia entre la línea simple (de una clase a otra) y la flecha (no la flecha de herencia, me refiero a la negra)?

Diagrama de clase UML

John Smith
fuente

Respuestas:

13

Para discutir mejor la imagen, anoté su imagen con algunos números. Espero que esto me ayude a ser más claro en mi escritura.

Diagrama de clase anotado

Aquí realmente se utilizan tres tipos de líneas: asociación (1), composición (4-> 2) y herencia (3).

Una línea continua que conecta dos clases, como entre Clienty BookComponentes simplemente una relación de asociación. A menudo se usa para indicar que una clase conoce (tal vez como en recibe como argumento de un método) o tiene otra clase (tal vez como una variable de instancia). Sin decoraciones o con una flecha en ambos extremos, la relación es bidireccional: las dos clases comparten la relación y se conocen entre sí. En algunos casos, como la línea 1 en la figura, la relación es direccional. La Clientclase sabe BookComponent, pero lo contrario no es cierto, ya BookComponentque no tiene ni sabe Client. Tenga en cuenta que también hay otras anotaciones que pueden aparecer en las relaciones de asociación, como la multiplicidad o los roles de clase.

La siguiente línea es la línea que se conecta BookCompositea BookComponent. Es una asociación, muy parecida a la línea entre Clienty BookComponent. Sin embargo, las anotaciones en los puntos que etiqueté 2 y 4 agregan información adicional sobre la relación. Línea en el punto 1, la flecha en el punto 2 significa lo mismo: BookCompositees consciente de los BookComponentcasos, pero no al revés (una relación direccional). La anotación en el punto 4 indica una relación de agregación, BookCompositees una colección de BookComponent. Sin embargo, no es una relación fuerte (como lo es la relación de composición fuerte), por lo que la agregación indica que un BookComponentpuede indicar en lugares fuera de un BookComposite(no necesita un BookCompositepara tener un BookComponent).

Algo a tener en cuenta es que la flecha utilizada para mostrar asociaciones direccionales generalmente no es una flecha negra sólida como se muestra en esta imagen. Normalmente lo veo como una flecha abierta que se parece más va lo que se muestra en su imagen.

Finalmente, el punto etiquetado 3 es la relación de herencia que mencionó en su pregunta.

Si está interesado en obtener más información sobre el modelado UML, le recomiendo comprar UML destilado . Es un buen libro de Martin Fowler que cubre clase, secuencia, objeto, paquete, implementación, caso de uso, máquina de estado, actividad, comunicación, estructura compuesta, componente, colaboración, visión general de interacción y diagramas de tiempo.

Thomas Owens
fuente
@ThomasOwens, ¿qué significa para un cliente saber sobre el componente del libro? ¿Cuándo es A consciente de B? Realmente no entiendo en qué dirección debo dibujar las flechas ...
user1534664
@ user1534664 Si A sabe acerca de B, eso significa que A de alguna manera puede invocar métodos en B. Por lo general, eso significa que B es una propiedad de A o B se pasa como argumento a un método en B. La dirección de la flecha indica en qué dirección la interfaz puede ser llamado. Una flecha de A que apunta a B significa que A puede usar la interfaz de B (A sabe acerca de B).
Thomas Owens
3

Su imagen muestra varias relaciones diferentes.

La relación entre las clases Client y BookComponent es una relación de contención. Es decir, el cliente contiene una instancia de BookComponent.

BookComposite y BookComponent tiene dos relaciones: la punta de flecha abierta es una relación de generalización (es decir, BookComponent generaliza BookComposite o, en otros términos, BookComposite se especializa / deriva de BookComponent). La cabeza cerrada con un diamante en la cola es una Agregación. Es decir, BookComposite contiene una Colección de BookComponent. El hecho de que el Diamante no esté lleno también es significativo. Significa que el ciclo de vida de los BookComponents contenidos no está vinculado a la vida del BookComposite que los contiene. Si se llenara en lugar de Agregación, sería una Composición y cuando BookComposite fuera destruido, también lo serían los Componentes del Libro

Michael Brown
fuente