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: namodelação do comportamento inter-objectos - identificação dos seus padrões de trocas de mensagens - diagramas de interacção namodelaçã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 2
Diagramas de interacção Um diagrama de interacção mostra 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ência dão ênfase à ordem temporal de transmissão das mensagens - ou seja, realçam a ordem pela qual as coisas acontecem diagramas de colaboração dã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 3 José Correia UML - Diagramas de Sequência 4
Objectos e Linhas de Vida Cada objecto participante é 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 José Correia UML - Diagramas de Sequência 5 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 6
Mensagens condicionais, iteradas e com retorno O valor de retorno de 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) José Correia UML - Diagramas de Sequência 7 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 8
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» ob1:c1 Destruição de objecto é representada por um X no 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 José Correia UML - Diagramas de Sequência 9 Mensagens Mensagens (chamadas) recursivas ou 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 10
Mensagens síncronas Mensagem síncrona: o emissor fica parado à espera de resposta Corresponde normalmente a chamada de operação do 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 subsequência de mensagens Notação: seta cheia Opcionalmente, pode-se indicar o retorno de uma mensagem síncrona com linha a traço interrompido José Correia UML - Diagramas de Sequência 11 Exemplo: Tratar Pedido de Stock :Janela de Selecção de Pedidos Objecto tratar() :Pedido * tratar() :Linha de Pedido e:=existe?(q) :Item de Stock Quantidade pedida Mensagem Para cada linha do pedido [e= sim"]retirar(q) b:=baixo?() Para repor stock Bifurcação de controlo [b= sim ] criar() e2:encomenda [e= não ] criar() e1:encomenda Sincronização de controlo Para poder satisfazer pedido José Correia UML - Diagramas de Sequência 12
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 sinal entre 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. José Correia UML - Diagramas de Sequência 13 Exemplo: Executar transacção com subtransacções concorrentes criar Adormecida à espera de sinal de subtransacção e executar t: Transacção criar criar ok restam subtransacções? s1: Sub-transacção s2: Sub-transacção ok restam subtransacções? auto-destruição do objecto José Correia UML - Diagramas de Sequência 14
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: José Correia UML - Diagramas de Sequência 15 Exemplo: Fazer chamada telefónica quem chama: Pessoa :Rede telefónica quem é chamado: Pessoa a {b-a < 10 seg.} b restrição temporal marca temporal nesta altura decorre a conversação levanta auscultador dá sinal de marcar marca (1) termina sinal de marcar marca (1) marca (2) dá sinal de chamada pára sinal de chamada conexão terminada poisa auscultador toca o telefone levanta auscultador pára de tocar poisa auscultador conexão terminada José Correia UML - Diagramas de Sequência 16
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 José Correia UML - Diagramas de Sequência 17 Requisição de teste-diagnóstico: uma possível solução... José Correia UML - Diagramas de Sequência 18
Exemplo: Falha de sub-transacção criar t: Transacção criar criar s1: Sub-transacção s2: Sub-transacção falhou matar subtransacções matar desfazer alterações José Correia UML - Diagramas de Sequência 19 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 20
Repor Bebidas de acordo com Vendas Comprar Bebida Cliente <<extend>> <<include>> Abrir a Máquina <<include>> Agente do Fornecedor Repor Bebidas Extension Point encher prateleiras <<include>> <<include>> Retirar Dinheiro Dono Fechar a Máquina 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.» José Correia UML - Diagramas de Sequência 21 Exemplo: Comprar bebida (cenário ideal) : Cliente : Interface : Registradora : Dispensa Inserir(dinheiro) Selecionar(tipoBebida) Guardar(dinheiro) Pedir(tipoBebida) Entregar(bebida) DevolveTroco(dinheiro) Troco(dinheiro) Entregar(bebida) José Correia UML - Diagramas de Sequência 22
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 :Registration form :Registration manager RegistrationManager add course(joe, math 01) addcourse(student,course) José Correia UML - Diagramas de Sequência 23 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 : Registration manager Math 101: Course RegistrationManager add student(joe) Course José Correia UML - Diagramas de Sequência 24
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) José Correia UML - Diagramas de Sequência 25 Emissor : Maq Fax : Central Receptor : Maq Fax enviar(numero) LigacaoEstabelecida() estabelecerligacao() LigacaoEstabelecida() enviar(fax) desligar ConexaoTerminada() ConexaoTerminada() ImprimirReportConfirmacao() José Correia UML - Diagramas de Sequência 26
Diagramas de Sequência: Resumo da notação José Correia UML - Diagramas de Sequência 27 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 28
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 José Correia UML - Diagramas de Sequência 29