Engenharia de Software 4.4. UML Diagramas de interacção Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt
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 num determinado âmbito (caso de uso, operação, etc.) Os diagramas de interacção dividem-se em dois subgrupos: Diagramas de comunicação (ou colaboração) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 2
Os diagramas de comunicação (ou colaboração) dão ênfase à estrutura organizacional dos objectos que enviam e recebem mensagens; Os diagramas de sequência dão ênfase à ordem temporal das mensagens; Diagrama de comunicação = diagrama de objectos + diagrama de sequência (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 3
Diagrama de comunicação Mostram as interacções entre objectos, insistindo sobre a estrutura espacial estática que permite que os objectos de um grupo colaborem entre si São grafos com objectos (instâncias de classes) e ligações (instâncias de associações) através das quais flúem mensagens numeradas (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 4
Diagrama de comunicação Nos diagramas de comunicação o tempo não é representado de maneira explícita. Por isso, as sucessivas mensagens têm que ser numeradas para exprimir a ordem de envio Exemplo: representação de uma ordem de envio de mensagens (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 5
Diagrama de comunicação A notação permite fazer figurar actores nos diagramas de colaboração para exprimir o desencadear de interacções provocadas por elementos externos ao sistema (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 6
Diagrama de comunicação Tipos de objectos em diagramas de colaboração Objecto passivo - objecto que contém dados, mas não inicia actividade de controlo; pode enviar mensagens enquanto processa um pedido recebido Notação: rebordo normal Objecto activo - objecto que possui um processo ou fio de controlo (thread) e pode iniciar actividade de controlo Notação: rebordo espesso Podem-se indicar estereótipos «process» e «thread» Actor - objecto externo que normalmente inicia uma interacção Notação: ícone de pessoa Objecto composto - objecto que agrega outros objectos (componentes) por relação de composição Notação: objectos componentes e ligações entre componentes dentro do objecto composto (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 7
Diagrama de comunicação Tipos de ligações em diagramas de colaboração Como todas as mensagens têm de passar por ligações, para além das ligações que representam instâncias de associações, pode ser necessário indicar ligações mais dinâmicas Assim, em qualquer extremo de uma ligação, pode-se indicar o tipo de ligação (do ponto de vista do objecto no outro extremo) através de um estereótipo: «association» - instância de associação (tipo por omissão) «parameter» - parâmetro de operação do objecto que faz a chamada «local» - variável local de operação do objecto que faz a chamada «global» - variável global (usada pelo objecto no outro extremo da ligação) «self» - auto-ligação (para enviar mensagens para o próprio) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 8
Diagrama de comunicação Dinâmica de objectos e ligações Objectos e ligações podem ser criados e/ou destruídos durante a execução duma interacção Notação: junto de um objecto ou ligação indicar {new} - criado durante a interacção {destroyed} - destruído durante a interacção {transient} - criado e destruído durante a interacção Um objecto pode mudar de estado (valores de atributos e ligações) durante a execução duma interacção Notação: replicar o objecto, ligando as réplicas com mensagem «become» (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 9
Diagrama de comunicação Mensagens As mensagens flúem (passam) através de ligações entre objectos Ligações são usadas para transportar ou de alguma forma implementar a distribuição de mensagens Ligações funcionam para as mensagens como canais de comunicação O fluxo (passagem) de uma mensagem é indicado por uma seta, do emissor para o receptor, acompanhada de uma string com: Número de sequência da mensagem seguido do separador : Nome da mensagem e argumentos entre parêntesis Há 3 tipos de fluxos de controlo, correspondentes a diferentes tipos de mensagens e sistemas de numeração: plano, encaixado e assíncrono Valores de retorno e argumentos de uma mensagem também podem ser indicados com fluxos de dados (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 10
Diagrama de comunicação Mensagens Resultado (retorno) O resultado é constituído por uma lista de valores devolvidos pela mensagem Esses valores podem ser utilizados como parâmetros das outras mensagens que compõem a interacção Este campo não existe quando não há valores devolvidos O formato do campo é livre Nome da mensagem O nome corresponde frequentemente a uma operação definida na classe do objecto destinatário da mensagem (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 11
Diagrama de comunicação Mensagens Argumentos Trata-se da lista de parâmetros da mensagem Os argumentos e o nome da mensagem identificam de maneira única a acção que deve ser desencadeada no objecto destinatário Os argumentos podem conter valores devolvidos por mensagens enviadas anteriormente, assim como expressões de navegação construídas a partir do objecto fonte A notação propõe também a representação gráfica dos argumentos sob a forma de setas que originam a partir de pequenos círculos (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 12
Diagrama de comunicação Fluxo de controlo plano (flat) Caso em que há uma sequência simples de mensagens indiferenciadas, numeradas 1, 2, etc. Exemplo: comunicação telefónica (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 13
Diagrama de comunicação Fluxo de controlo encaixado (nested) Caso em que há subsequências de mensagens numeradas de forma hierárquica (com ponto) Pode iniciar uma subsequência de mensagens Aplicada normalmente com chamadas de procedimentos ordinárias Também aplicável entre objectos activos concorrentes, quando um deles envia um sinal e espera que uma subsequência de comportamento se complete no outro (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 14
Diagrama de comunicação Fluxo de controlo encaixado (nested) Exemplo: tratar pedido de stock (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 15
Diagrama de comunicação Fluxo de controlo assíncrono Caso em que há múltiplos fios (threads) de controlo, em múltiplos objectos activos concorrentes que trocam entre si mensagens assíncronas Sequências concorrentes são designadas por letras (A, B, etc.) a sequência principal não leva nenhuma letra (como se tivesse letra dummy) Uma mensagem pode ter uma parte inicial, chamada predecessor, constituída por uma lista de nºs de sequência de mensagens precedentes (de outros fios de controlo) os elementos da lista são separados por vírgula e a lista é terminada com / exemplo: A3, B4/ C3: update() mensagem C3 é a seguir às mensagens A3 e B4 (explicitamente) e a seguir à mensagem C2 (implicitamente) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 16
Diagrama de comunicação Fluxo de controlo assíncrono Exemplo: Executar transacção com sub transacções concorrentes (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 17
Um diagrama de sequência mostra uma interacção, isto é, uma sequência de mensagens trocadas entre vários objectos num determinado contexto (caso de utilização, operação, etc.) Enfatiza a comunicação e passagem de controlo entre objectos ao longo do tempo Úteis para descrever uma sequência particular de funcionamento, mas não muitas sequências alternativas e ciclos nem acções realizadas por um objecto que não envolvem comunicação com outros objectos (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 18
O eixo vertical pode ser graduado para exprimir com precisão as restrições temporais (ex.: modelação de um sistema de tempo real) Há dois tipos de utilização distintas dos diagramas de sequência, consoante a fase do ciclo de desenvolvimento em que nos encontramos Documentação dos casos de uso (Outras) representações de interacções entre objectos (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 19
Documentação dos casos de uso Interacções descritas em termos gerais, sem entrar em pormenores de sincronização As setas limitam-se a indicar eventos, e não mensagens no sentido específico entendido em programação Em geral não se pretende distinguir fluxos de controlo e fluxos de dados (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 20
O utilizador (actor) pode ser ilustrado para mostrar a sua interacção com o sistema (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 21
Objectos e linhas de vida Cada objecto participante é representado por uma caixa em cima duma linha vertical a traço interrompido (linha de vida) Podem aparecer actores (objectos externos ao sistema), normalmente a iniciar interacções O tempo cresce de cima para baixo tempo (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 22
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 acção de um objecto capaz de provocar uma resposta noutro objecto pode ser modelada como uma mensagem do primeiro para o segundo objecto Uma mensagem é representada por uma seta horizontal, do emissor para o receptor, com o nome e possíveis argumentos (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 23
Mensagens Tipos de mensagens síncrona - o emissor fica parado à espera de resposta corresponde tipicamente a chamada de operação/procedimento no receptor retorno de mensagem síncrona desnecessário indicar quando se usam barras de activação (ver adiante) assíncrona - o emissor não fica parado à espera de resposta corresponde tipicamente a envio de sinal entre dois objectos concorrentes simples ou indiferenciada - não se decide se é síncrona, de retorno ou assíncrona usadas normalmente na modelação de interacções na fronteira do sistema (entre actores e o sistema representado por um ou mais objectos) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 24
Mensagens A seta pode ser representada numa posição oblíqua para exprimir atrasos de transmissão que não sejam desprezáveis relativamente à dinâmica do conjunto Um objecto pode também mandar uma mensagem a si próprio. Trata-se de uma mensagem reflexiva ou auto-delegação (pode não ser uma verdadeira mensagem, mas sim o início de uma actividade de mais baixo nível que tem lugar no interior do objecto) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 25
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: ret := msg(args) Nome ret será usado em mensagens e condições a seguir Também se escreve ret na mensagem de retorno Uma mensagem condicional é indicada por uma condição de guarda entre parêntesis rectos [ ] Exemplo: [x<0] invert(x,color) A mensagem só é enviada se a condição se verificar Condições permitem mostrar várias sequências alternativas num único diagrama Uma mensagem iterada é indicada com asterisco *, seguido ou não de uma fórmula de iteração Exemplo: *[i:=1..n] update(i) (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 26
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) Mensagem de criação pode ter estereótipo «create» (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 27
Criação e destruição de objectos 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 (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 28
Barra de activação Uma barra de activação 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 chamado inclui situação em que está á espera de retorno de uma chamada síncrona não inclui situação em que um processo está adormecido à espera de receber uma mensagem assíncrona que o acorde Em termos de processos, significa que o objecto tem um processo ou thread activo associado A sua indicação é opcional (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 29
Barra de activação Retorno de chamada síncrona é implícito no fim da barra de activação, não é necessário representá-lo = No caso dos envios assíncronos, o retorno deve ser representado, quando existe (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 30
Barra de activação Chamadas recursivas provocam barras empilhadas (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 31
Os diagramas de sequência podem ser completados com indicações textuais, em texto livre ou em pseudocódigo O instante do envio de uma mensagem, denominado transição, pode ser descrito no diagrama junto ao ponto de partida da seta que simboliza a mensagem (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 32
A inclusão de pseudo-código na parte esquerda do diagrama permite representar ciclos e saltos, pelo que se pode recorrer aos diagramas de interacção para representar a forma geral de uma interacção, para além da simples descrição de um cenário particular (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 33
Exemplo: Tratar pedido de stock (c) Nuno Miguel Gil Fonseca - Escola Superior de Tecnologia e Gestão de Oliveira do Hospital - Engenharia de Software 34