Diagramas de Sequência UML são diagramas de interação que detalham como as operações são realizadas.
Diagramas de Classe e Objeto são visualizações de modelos estáticos (diagramas estruturais), enquanto os diagramas de interação são dinâmicos (diagramas comportamentais).
Estes diagramas capturam a interação entre objetos no contexto de uma colaboração.
Os Diagramas de Sequência mostram a ordem da interação visualmente usando o eixo vertical do diagrama para representar a estrutura de execução das mensagens e a ordem em que são enviadas.
a interação que ocorre em uma colaboração que realiza um caso de uso (diagramas genéricos) ou funcionalidade;
a interação que ocorre em uma colaboração que realiza uma operação (diagramas com objetos);
interações de alto nível entre o usuário do sistema e o sistema, entre o sistema e outros sistemas ou entre subsistemas.
Modelar a interação de alto nível entre objetos ativos em um sistema;
Modelar a interação entre instâncias de objetos dentro de uma colaboração que realiza um caso de uso;
Modelar a interação entre objetos dentro de uma colaboração que realiza uma operação;
Ou modelar interações genéricas (mostrando todos os caminhos possíveis através da interação) ou instâncias específicas de uma interação (mostrando apenas um caminho através da interação).
Um bom diagrama de sequência está um pouco acima do nível do código real;
Os diagramas de sequência são neutros em termos de linguagem;
Não programadores podem fazer diagramas de sequência;
São fáceis de fazer em equipe;
Pode ser usado para a criação de testes e/ou UX wireframing.
Os diagramas de sequência mostram os elementos à medida que eles interagem ao longo do tempo e são organizados de acordo com o objeto (eixo horizontal) e o tempo (eixo vertical).
O eixo horizontal mostra os elementos que estão envolvidos na interação;
Convencionalmente, os objetos envolvidos na operação são listados da esquerda para a direita de acordo com o momento em que participam da sequência de mensagens. No entanto, isto não é obrigatório.
O eixo vertical representa os procedimentos ao longo do tempo;
O tempo em um diagrama de sequência é uma questão de ordenação, não de duração. O espaço vertical em um diagrama de interação não é relevante para a duração da interação;
Atores são representados graficamente pelo desenho de uma pessoa.
Um tipo de papel desempenhado por uma entidade externa que interage com o objeto (por exemplo, trocando sinais e dados).
Uma instância de um ator não faz parte da instância de seu objeto correspondente, pois atores representam funções desempenhadas por usuários humanos, hardware externo ou outros assuntos.
Um ator não representa necessariamente uma entidade física específica, mas meramente um papel particular de alguma entidade. Assim, uma pessoa pode desempenhar o papel de vários atores diferentes e um determinado ator pode ser interpretado por várias pessoas diferentes.
Uma linha de vida representa um participante individual da interação.
Linhas de vida são representadas graficamente por um retângulo que refere-se ao objeto participante e uma linha vertical tracejada representando a vida do objeto participante.
Caixa de Ativação: Linhas de vida podem carregar retângulos que representam ativações, ou seja, o período durante o qual um elemento participante está realizando uma operação. Mostra a distância entre dois instantes de tempo para uma chamada de mensagem.
Objetos interagem através da troca de mensagens durante suas linhas de vida.
As mensagem são usualmente representadas por setas que vão do objeto solicitante (origem) para o objeto solicitado (destino), mas essa notação pode sofrer variação dependendo do tipo da mensagem.
As mensagens pode ser rotuladas com os nomes das operações / estímulos / eventos.
Rótulos podem usar a notação:
<<estereótipo>> [condição] variável = nome_da_mensagem (lista_de_parâmetros) : tipo de retorno
As mensagens podem ser enumeradas para facilitar a ordem de leitura do diagrama.
Podem ser aninhadas ou não, sendo separadas pelas caixas de ativação.
Podem ser síncronas (seta cheia) ou assíncronas (seta simples):
Síncronas: a execução segue a ordem temporal
Assíncronas: a execução não apresenta uma ordem específica, pode até seguir em paralelo (fork implícito)
Exemplos de notação dos tipos de mensagem
Mensagem de Chamada (padrão): é um tipo de mensagem que representa uma invocação da operação da linha de vida de destino.
Mensagem de Retorno/Resposta: é um tipo de mensagem que representa a passagem de informações de volta (saída) para o invocador (origem) de uma mensagem anterior correspondente. A mensagem de retorno possui notação tracejada.
Auto-mensagem: é um tipo de mensagem que representa a invocação de uma operação da própria linha de vida, ou seja, a origem e o destino são do mesmo participante.
Mensagem Recursiva: é um tipo de auto-mensagem que aponta para uma ativação em cima da ativação de onde a mensagem foi invocada.
Mensagem de Criação <<create>>: é um tipo de mensagem que representa a instanciação da linha de vida destino. A mensagem de retorno possui notação tracejada.
Mensagem de Destruição <<destroy>>: é um tipo de mensagem que representa o pedido de destruição do ciclo de vida da linha de vida destino. A notação é de uma mensagem padrão, mas culmina no encerramento da linha da vida do objeto com a notação de um x.
A UML 2.0 introduziu o conceito de fragmentos de sequência (ou interação). Os fragmentos de sequência facilitam a criação e a manutenção de diagramas de sequência precisos.
Um fragmento de sequência é representado como uma caixa, chamada de fragmento combinado, que contorna uma parte das interações dentro de um diagrama de sequência.
O operador de fragmento (indicado no canto superior esquerdo) representa o tipo de fragmento. Os tipos de fragmentos possíveis são:
alt: somente aquele cuja condição for verdadeira será executado (if-else).
opt: o fragmento é executado apenas se a condição fornecida for verdadeira. Equivalente a um alt apenas com uma condição (somente if).
par: cada fragmento é executado em paralelo.
loop: o fragmento pode ser executado várias vezes e a condição indica a base da iteração.
region: o fragmento pode ter apenas uma thread executando-o por vez.
neg: o fragmento mostra uma interação inválida.
ref: refere-se a uma interação definida em outro diagrama. O quadro é desenhado para cobrir as linhas de vida envolvidas na interação. Você pode definir parâmetros e um valor de retorno para o diagrama.
sd: usado para cercar um diagrama de sequência inteiro.
Observe que:
É possível combinar e aninhar fragmentos para representar, por exemplo, loops ou ramificações.
Podem usar condições de guarda como restrições no diagrama e nos fragmentos.
Em UML, um caso de uso é: "a especificação de uma sequência de ações, incluindo suas variantes, que um sistema (ou entidade) pode realizar, interagindo com os atores do sistema."
Os requisitos de usuário são capturados como casos de uso que são refinados em cenários descritivos.
Um caso de uso é uma coleção de interações entre atores externos e um sistema e um cenário é um caminho ou fluxo através de um caso de uso que descreve uma sequência de eventos que ocorre durante uma execução específica de um sistema que geralmente é representado por um diagrama de sequência.
Exemplo de Diagrama de Sequência para reserva de quarto de hotel
Exemplo de Diagrama de Sequência para efetuar login
Exemplo de Diagrama de Sequência para calcular total de um pedido
Veja mais exemplos de Diagramas de Sequência em: https://circle.visual-paradigm.com/category/sequence-diagram/
Mostre o diagrama de sequência relativo ao seguinte código. O diagrama deve começar com a chamada a a.m5().
A a = new A(); // variáveis globais
B b = new B();
C c = new C();
class C {
void m1() { ... }
}
class B {
void m2() { ... c.m1(); ... this.m3(); ... }
void m3() { ... c.m1(); ... }
void m4() { ... }
}
class A {
void m5() { ... b.m2(); ... b.m3(); ... b.m4(); ... }
}