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.
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 Client
y BookComponent
es 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 Client
clase sabe BookComponent
, pero lo contrario no es cierto, ya BookComponent
que 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 BookComposite
a BookComponent
. Es una asociación, muy parecida a la línea entre Client
y 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: BookComposite
es consciente de los BookComponent
casos, pero no al revés (una relación direccional). La anotación en el punto 4 indica una relación de agregación, BookComposite
es 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 BookComponent
puede indicar en lugares fuera de un BookComposite
(no necesita un BookComposite
para 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 v
a 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.
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
fuente