Unified Modeling Language
Diagramas de Sequência
José Correia, Abril 2006
(http://paginas.ispgaya.pt/~jcorreia/)
UML: modelação do comportamento
A modelação do comportamento de um sistema de software consiste, segundo a abordagem orientada por objectos, em dois tipos distintos de especificações:
• na modelação do comportamento inter-objectos
- identificação dos seus padrões de trocas de mensagens -diagramas de interacção
• na modelação do comportamento intra-objecto
- identificação dos estados em que um objecto se pode encontrar ao longo do seu ciclo de vida, dos eventos envolvidos, bem como dos seus algoritmos de implementação - diagramas de estados e de actividades
A modelação de um sistema de software com base em diagramas de classes e de objectos traduz apenas as suas relações estruturais e estáticas
José Correia UML - Diagramas de Sequência 3
Diagramas de interacção
Um diagrama de interacçãomostra um padrão de interacção entre vários objectos, com objectos e mensagens trocadas entre esses objectos por uma certa ordem
• diagramas de sequênciadão ênfase à ordem temporal de transmissão das mensagens
- ou seja, realçam a ordem pela qual as coisas acontecem
• diagramas de colaboraçãodão ênfase ao relacionamento entre os objectos
• os diagramas de sequência e diagramas de colaboração são colectivamente designados diagramas de interacção
- os diagramas de interacção são usados para modelar casos de uso, operações, etc.
A seguir é apresentado um exemplo de um diagrama de sequência, correspondente à execução de uma reserva num hotel
• exemplo extraído de “Practical UML: A Hands-On Introduction for Developers”
José Correia UML - Diagramas de Sequência 5
Objectos e Linhas de Vida
Cada objectoparticipante é representado por uma caixa em cima duma linha vertical a traço interrompido (linha de vida)
• no exemplo apresentado, os objectos participantes são instâncias de janela de reservas (Reservation window), cadeia de hotéis (HotelChain) e hotel
Podem aparecer actores (objectos externos ao sistema), a iniciar interacções
• no exemplo, o objecto que inicia a sequência de mensagens é uma janela de reservas
Cada linha tracejada vertical é uma linha de vida(lifeline), representando o tempo em que um objecto existe
O tempo cresce de cima para baixo
Mensagens
Uma mensagemé uma comunicação entre objectos (emissor e receptor) que veicula informação na expectativa de provocar uma resposta (acção ou actividade)
Uma mensagem é representada por uma seta horizontal do emissor para o receptor, com um nome e possíveis argumentos
• uma janela de reservas envia uma mensagem makeReservation() para uma cadeia de hotéis (HotelChain)
• de seguida, a cadeia de hotéis envia uma mensagem
makeReservation()para um Hotel. Se o Hotel tiver quartos livres, então faz uma reserva e uma confirmação
objecto1:Classe1 objecto2: :Classe3
mensagem
José Correia UML - Diagramas de Sequência 7
Mensagens condicionais, iteradas e com
retorno
O valor de retornode uma mensagem síncrona pode ser indicado na chamada, com atribuição :=, ou na mensagem de retorno
• exemplo: isRoom := available()
• “isRoom” poderá (e, neste caso é) ser usado em mensagens e condições a seguir
• Também se pode escrever “isRoom” na mensagem de retorno
Uma mensagem condicionalé indicada por uma condição de guarda entre parêntesis rectos [ ]
• exemplo: [isRoom] new
• a mensagem só é enviada se a condição se verificar
• condições permitem mostrar várias sequências num único diagrama, possivelmente com bifurcações de controlo
Uma mensagem iteradaé indicada com asterisco *, seguido ou não de uma fórmula de iteração
• exemplo: *[i:=1..n] update(i)
Activação ou Foco de controlo
Uma activação(ou foco de controlo) mostra o período de tempo durante o qual um objecto está a executar uma acção, quer directamente quer indirectamente (através de um procedimento subordinado)
Notação: barra rectangular fina sobre a linha de vida do objecto (barra de activação)
• a sua indicação é opcional
Uma seta vai de um emissor para o topo da barra de activação da mensagem na linha de vida do receptor
• a barra de activação representa a duração da execução da mensagem
• o retorno de chamada é implícito quando o objecto perde o foco de controlo
José Correia UML - Diagramas de Sequência 9
Criação e destruição de objectos
Criação de objectoé representada por mensagem dirigida à própria caixa que representa o objecto (em vez de ser dirigida à linha de vida)
• a mensagem de criação pode ter estereótipo «create»
Destruição de objectoé representada por um Xno fim da linha de vida do objecto
• mensagem de destruição pode ter estereótipo «destroy»
• pode ocorrer na recepção de mensagem ou no retorno de chamada
• objecto pode auto destruir-se
ob1:C1
ob1:C1
Mensagens
Mensagens (chamadas) recursivasou auto-chamadas
• no exemplo apresentado, o Hotel lança uma chamada a si próprio, para determinar se há algum quarto livre. Se houver, então o Hotel cria uma reserva e uma confirmação
• o asterisco na auto-chamada significa iteração (para ter a certeza que existe um quarto livre em cada um dos dias da estadia no hotel)
• as chamadas recursivas provocam barras empilhadas
Em geral, uma acção de um objecto capaz de provocar uma resposta noutro objecto pode ser modelada como uma mensagem do primeiro objecto para o segundo objecto
As mensagens podem ser síncronas, assíncronas ou indiferenciadas
José Correia UML - Diagramas de Sequência 11
Mensagens síncronas
Mensagem síncrona: o emissor fica parado à espera de resposta
Corresponde normalmente a chamada de operaçãodo receptor
• o Receptor pode ser o mesmo objecto que o Emissor
Origina fluxo de controlo encaixado, com sub-sequências de mensagens
• a execução da operação chamada pode envolver a emissão de uma sub- sequência de mensagens
Notação: seta cheia
Opcionalmente, pode-se indicar o retorno de uma mensagem síncrona com linha a traço interrompido
Exemplo: Tratar Pedido de Stock
[e=“sim"]retirar(q) :Janela de Selecção
de Pedidos :Pedido
:Linha de Pedido
e2:Encomenda tratar()
* tratar()
:Item de Stock
e:=existe?(q)
b:=baixo?()
[b=“sim”] criar()
[e=“não”] criar()
e1:Encomenda Para cada
linha do pedido
Quantidade pedida
Para repor stock
Para poder satisfazer
pedido Bifurcação
de controlo
Sincronização de controlo Mensagem
Objecto
José Correia UML - Diagramas de Sequência 13
Mensagens assíncronas
Mensagem assíncrona: o emissor não fica parado à espera de resposta.
Uma mensagem é assíncrona se permitir que o seu emissor envie mensagens adicionais enquanto a mensagem original estiver a ser processada.
Corresponde normalmente a envio de sinalentre dois objectos concorrentes (em processos ou threads separados).
Originam fluxo de controlo concorrente, com sequências de mensagens concorrentes.
Notação:
O timing de uma mensagem assíncrona é independente do timing das mensagens intervenientes.
Exemplo: Executar transacção com sub-
transacções concorrentes
Adormecida à espera de sinal
de sub- transacção
t: Transacção criar
s1: Sub-transacção
s2: Sub-transacção criar
criar
restam sub- transacções?
ok
restam sub- transacções?
ok
auto-destruição do objecto e executar
José Correia UML - Diagramas de Sequência 15
Mensagens indiferenciadas
Mensagem indiferenciada(ou mensagens simples): não se decide se é síncrona ou assíncrona
Normalmente são usadas na modelação de interacções na fronteira do sistema
• entre actores e o sistema representado por um ou mais objectos
Originam fluxo de controlo plano(flat), com sequência simples de mensagens
Notação:
Exemplo: Fazer chamada telefónica
restrição temporal
quem é chamado: Pessoa quem chama: Pessoa :Rede telefónica
levanta auscultador dá sinal de marcar marca (1)
termina sinal de marcar marca (1)
marca (2)
dá sinal de chamada toca o telefone levanta auscultador pára de tocar pára sinal de chamada
poisa auscultador conexão terminada
poisa auscultador
conexão terminada a
{b-a < 10 seg.}b
marca temporal
nesta altura decorre a conversação
José Correia UML - Diagramas de Sequência 17
Exemplo: Requisição de teste-diagnóstico
Nota: Exemplo extraído de “Practical UML: A Hands-On Introduction for Developers”
O diagrama de sequência seguinte, ilustra a acção de uma enfermeira (nurse), requisitando um teste-diagnóstico num laboratório médico (medical lab), o qual depende da aprovação de uma companhia de seguros (insurance company)
Existem duas mensagens assíncronas a partir da Enfermeira:
• pedir ao Laboratório Médico para reservar uma data para o teste
• pedir à Companhia de Seguros para aprovar o teste
• a ordem pela qual estas mensagens são enviadas, ou completadas, é irrelevante
Se a Companhia de Seguros aprovar o teste (valor de retorno OK=True), então a Enfermeira marcará o teste ( schedule(t,d) ) para a data (d) fornecida pelo Laboratório Médico
Requisição de teste-diagnóstico: uma possível
solução...
José Correia UML - Diagramas de Sequência 19
Exemplo: Falha de sub-transacção
t: Transacção criar
s1: Sub-transacção
s2: Sub-transacção criar
criar
matar sub- transacções
falhou
matar
desfazer alterações
Relação com diagramas de casos de uso
Tipicamente, um diagrama de interacção captura um comportamento possível de um único caso de uso
• mostra exemplos de objectos participantes e mensagens que são trocadas entre esses objectos no âmbito do caso de uso
A um caso de uso podem-se associar vários diagramas de sequência
• para sequências normais e sequências excepcionais de funcionamento
Actores podem aparecer em diagramas de sequência, como objectos externos ao sistema
• normalmente iniciam as interacções
José Correia UML - Diagramas de Sequência 21 Repor Bebidas de
acordo com Vendas
Abrir a Máquina
Fechar a Máquina Agente do
Fornecedor
Repor Bebidas
<<extend>> <<include>>
<<include>>
Retirar Dinheiro
<<include>>
<<include>>
Dono Cliente Comprar Bebida
Extension Point encher prateleiras
Desenhe o diagrama de sequência (representando as barras de activação) correspondente ao caso de uso “Comprar Bebida”.
Considere que a máquina de bebidas é composta por três objectos principais: Interface (painel de interface com o utilizador), Registadora (caixa registadora que guarda o dinheiro) e Dispensa (armário onde são guardadas as bebidas) e o seguinte cenário ideal (em que tudo corre bem, i.e., existe a bebida pretendida, há troco, etc): «O cliente insere o dinheiro na ranhura existente no painel de interface da máquina e, de seguida, selecciona o tipo de bebida. O dinheiro cai na caixa registadora e o painel de interface pede a bebida à dispensa. A dispensa envia a bebida seleccionada para o painel de interface, o qual a entrega ao cliente juntamente com o troco.»
Exemplo: Comprar bebida (cenário ideal)
: Interface
: Cliente : Registradora : Dispensa
Inserir(dinheiro)
Selecionar(tipoBebida)
Guardar(dinheiro)
Pedir(tipoBebida) Entregar(bebida) Entregar(bebida)
Troco(dinheiro) DevolveTroco(dinheiro)
José Correia UML - Diagramas de Sequência 23
Diagramas de classes vs. Interacções: Operações
O comportamento de uma classe é representado pelas suas operações...
... mas as operações podem ser encontradas a partir dos diagramas de interacção
RegistrationManager
addCourse(Student,Course) :Registration
form
add course(joe, math 01)
:Registration manager
Diagramas de classes vs. Interacções: Relações
Existem 3 tipos de relações entre objectos:
• associações
• agregações
• dependências
As relações fornecem um caminho para a comunicação entre objectos
• as relações podem ser encontradas a partir dos diagramas de interacção ... mas para dois objectos “falarem” tem de haver uma ligação entre eles
RegistrationManager : Registration
manager
add student(joe)
Math 101: Course
Course
José Correia UML - Diagramas de Sequência 25
Exemplo: Envio/Recepção de faxes
Num contexto de envio/recepção de faxes, considere um sistema composto pelos seguintes objectos:
• Emissor (máquina de onde o fax é enviado)
• Receptor (máquina onde o fax é recebido)
• Central (central que encaminha faxes e chamadas telefónicas)
Desenhe o diagrama de sequência (representando as barras de activação) correspondente ao cenário em que tudo corre bem (envio do número, estabelecimento da ligação, envio do fax, desligar, etc)
Emissor : Maq Fax : Central Receptor : Maq Fax
enviar(numero)
estabelecerLigacao() LigacaoEstabelecida() LigacaoEstabelecida()
enviar(fax)
desligar
ConexaoTerminada() ConexaoTerminada()
ImprimirReportConfirmacao()
José Correia UML - Diagramas de Sequência 27
Diagramas de Sequência:
Resumo da notação
Diagramas de Sequência:
Resumo
Um diagrama de sequênciaé um diagrama de interacção que detalha como as operações são levadas a cabo
• que mensagens são enviadas (entre objectos) e quando
Os diagramas de sequência são organizados de acordo com o tempo
• mostram interacções de objectos ordenados numa sequência de tempo
• o tempo progride à medida que descemos na página
• os objectos envolvidos na operação são listados da esquerda para a direita, de acordo com a altura em que tomam parte na sequência de mensagens
• captura o comportamento dinâmico (time-oriented)
Objectivo dos diagramas de sequência:
• modelizar o fluxo de controlo
• ilustrar cenários típicos
José Correia UML - Diagramas de Sequência 29
Referências
Estes apontamentos foram baseados em:
“UML – Unified Modeling Language”, Curso em Tecnologia de Objectos, FEUP, Novembro 2000
Ademar Aguiar, Gabriel David, João Pascoal Faria
“UML – Diagramas de Interacção”, ISPGaya, Novembro 1998 César Toscano
“Practical UML: A Hands-On Introduction for Developers”, TogetherSoft Corporation
“UML, Metodologias e Ferramentas CASE”, Alberto Rodrigues da Silva, Carlos Videira, Maio 2001