O que a seta significa em um diagrama de classes?

8

Preciso de ajuda para tentar entender qual é o significado da seta em um diagrama de classes UML, mais especificamente neste diagrama composto. Qual é a diferença entre a linha simples (de uma classe para outra) e a flecha (não a flecha de herança, refiro-me à flecha preta)?

Diagrama de classe UML

John Smith
fonte

Respostas:

13

Para discutir melhor a imagem, anotei sua imagem com alguns números. Espero que isso me ajude a ser mais claro em meus escritos.

Diagrama de classe anotado

Existem realmente três tipos de linhas usadas aqui - associação (1), composição (4-> 2) e herança (3).

Uma linha sólida conectando duas classes, como entre Cliente BookComponenté simplesmente um relacionamento de associação. É freqüentemente usado para indicar que uma classe conhece (talvez como receba como argumento de um método) ou tenha outra classe (talvez como uma variável de instância). Sem nenhuma decoração ou com uma seta nas duas extremidades, o relacionamento é bidirecional - as duas classes compartilham o relacionamento e se conhecem. Em alguns casos, como a linha 1 da figura, o relacionamento é direcional. A Clientclasse sabe BookComponent, mas o oposto não é verdadeiro, pois BookComponentnão tem um ou conhece Client. Observe que também existem outras anotações que podem aparecer nos relacionamentos de associação, como funções de multiplicidade ou classe.

A próxima linha é a linha que conecta BookCompositea BookComponent. É uma associação, bem como a linha entre Cliente BookComponent. No entanto, as anotações nos pontos que eu identifiquei 2 e 4 adicionam informações adicionais sobre o relacionamento. Linha no ponto 1, a seta no ponto 2 significa a mesma coisa - BookCompositeestá ciente das BookComponentinstâncias, mas não o contrário (uma relação direcional). A anotação no ponto 4 indica um relacionamento de agregação - BookCompositeé uma coleção de BookComponent. No entanto, não é um relacionamento forte (como é o relacionamento de composição forte), portanto, a agregação indica que a BookComponentpode indicar em lugares fora de BookComposite(você não precisa de um BookCompositepara ter um BookComponent).

Algo a ser observado é que a seta usada para mostrar associações direcionais geralmente não é uma seta preta sólida, como mostrado nesta imagem. Normalmente, eu a vejo como uma seta aberta que se parece mais com o vque é mostrado na sua imagem.

Finalmente, o ponto 3 é o relacionamento de herança que você mencionou na sua pergunta.

Se você estiver interessado em saber mais sobre a modelagem UML, recomendo comprar o UML Distilled . É um bom livro de Martin Fowler que cobre classe, sequência, objeto, pacote, implantação, caso de uso, máquina de estado, atividade, comunicação, estrutura composta, componente, colaboração, visão geral da interação e diagramas de tempo.

Thomas Owens
fonte
@ThomasOwens, o que significa para um cliente saber sobre o componente do livro? Quando A está ciente de B? Eu realmente não entendo em que direção devo desenhar as setas ...
user1534664
@ user1534664 Se A conhece B, então isso significa que A pode de alguma forma chamar métodos em B. Normalmente, isso significa que B é uma propriedade de A ou B é passada como argumento para um método em B. A direção da seta indica em qual direção a interface pode ser chamado. Uma seta de A apontando para B significa que A pode usar a interface de B (A sabe sobre B).
Thomas Owens
3

Sua imagem mostra vários relacionamentos diferentes.

O relacionamento entre as classes Client e BookComponent é um relacionamento de Contenção. Ou seja, o cliente Contém uma instância do BookComponent.

BookComposite e BookComponent tem dois relacionamentos, a ponta da seta aberta é um relacionamento de Generalização (ou seja, BookComponent generaliza BookComposite ou, em outros termos, BookComposite é especialista / derivado de BookComponent). O arrohead fechado com um diamante na cauda é uma agregação. Ou seja, BookComposite contém uma coleção de BookComponent. O fato de o diamante não estar cheio também é significativo. Isso significa que o ciclo de vida dos BookComponents contidos não está vinculado à vida útil do BookComposite. Se fosse preenchido em vez de Agregação, seria uma Composição e, quando o BookComposite fosse destruído, os BookComponents também seriam

Michael Brown
fonte