Diagramas de Interação
Projeto de Sistemas
2
• Descrição da dinâmica do sistema
• Obter informações adicionais para completar e aprimorar outros modelos (principalmente o diagrama de classes)
– Quais as operações de uma classe?
– Quais os objetos participantes da realização de requisitos (ou cenário deste)?
– Para cada operação, qual a sua assinatura? – Uma classe precisa de mais atributos?
– Fornecer aos programadores uma visão detalhada dos objetos e mensagens envolvidos na realização dos requisitos.
Interações e Mensagens
• Uma interação é um comportamento composto da
troca de um conjunto de mensagens entre um grupo de objetos a fim de atingir um determinado objetivo.
• Uma mensagem é uma comunicação entre objetos
que resulta na transmissão de informação com o intuito de que alguma atividade seja realizada.
4
• O princípio básico da interação entre objetos é o conceito de Mensagem.
• Um sistema OO pode ser visto como uma rede de objetos. Funcionalidades são realizadas
pelos objetos, que só podem interagir através do envio de mensagens.
• Uma mensagem representa a requisição de um objeto remetente a um objeto receptor para que este último execute alguma
operação definida em sua classe.
• Essa mensagem deve conter informação suficiente para que a operação do objeto receptor possa ser executada.
6
• O fato de um objeto “precisar de ajuda” indica a necessidade de este enviar mensagens.
• Na construção de diagramas de interação,
mensagens de um objeto a outro implicam em operações que classes devem ter.
Uma mensagem implica na existência de uma operação no objeto receptor.
A resposta do objeto receptor ao recebimento de uma mensagem é a execução da operação correspondente.
8
• Mensagem síncrona ( )
– É aquela em que o objeto remetente espera que o objeto receptor processe a mensagem antes de recomeçar o seu processamento, ou seja, o
remetente fica bloqueado até que o receptor termine de atender a requisição.
• Mensagem assíncrona ( )
– É aquela na qual o objeto remetente não espera a resposta para prosseguir com o seu processamento.
• Mensagem reflexiva (self)
– É aquela enviada de um objeto para ele mesmo solicitando a execução de uma operação definida em sua própria classe.
• Mensagem de retorno ( )
– Indica o final da execução de uma operação (retorno do fluxo de controle)
10
• Diagrama de Colaboração (Comunicação) • Diagrama de Sequência
12 Diagrama de Colaboração (Comunicação)
• É um diagrama de interação que enfatiza a organização dos objetos que participam da interação.
• Um caminho é uma ligação entre objetos. • Números de sequência indicam a ordem
Diagrama de Colaboração (Comunicação) : Transaction c: Client 1: «create» p: ODBCProxy 2: setActions (a,d,o) 3: «destroy» 2.1: setValues(d,3,4)
14
Diagrama de Sequência
• É um diagrama de interações que enfatiza a ordem temporal das mensagens.
• Uma linha de vida é uma linha tracejada
vertical que representa o tempo de vida de um objeto.
• Um foco de controle é um retângulo fino
vertical sobreposto à linha de vida que mostra o período durante o qual um objeto está
Diagrama de Sequência
: Ticket Agent c: Client «create» setItinerary(i) calculateRoute() route16
• Assim como os outros diagramas da UML, os diagrama de interação possuem um conjunto de elementos gráficos. – Elementos básicos: • Atores • Objetos • Classes • Mensagens
Elementos Básicos
vendas
vendas : Departamento
: Departamento
Nome de um dado Objeto Nome de Objeto e Classe
Objeto nomeado Objeto Anônimo da Classe Departamento
Representação de Objetos e Classes
18
maria : Cliente
: Cliente Nomeado: recebe um nome e
necessita ser referenciado posteriormente.
Anônimo: não recebe um nome
específico
Às vezes, uma mensagem é enviada para uma
classe. Nesse caso, a operação a ser executada é uma operação de classe (estática).
Representação de Objetos e Classes
DIAGRAMAS DE COLABORAÇÃO
(COMUNICAÇÃO)
20
• Diagrama de colaboração
– Ilustra interações num formato de grafo ou rede
– A mensagem não-numerada (a primeira) é uma operação de sistema
– Note que mandar uma mensagem m() para um objeto x corresponde a executar o código x.m(), isto é, invocar o método m() de x
Diagramas de Colaboração
:ClassAInstance :ClassBInstance 1: message2() 2: message3() message1()Diagramas de Colaboração
• Exemplo para a operação fazerPagamento, do sistema Ponto de Vendas de um supermercado
1: makePayment (amount)
1.1: create(amount)
:POST :Sale
makePayment(amount)
direction of message first internal message
link line
1.2: associate(p)
22
• Classes e instâncias
• Links
Notação Básica
Sale :Sale s1: Sale
class instance named instance
1: makePayment(amount)
:POST :Sale
msg1()
• Mensagens • Parâmetros
Notação Básica
1: message1() 2: message2() 3: message3() :POST :Sale msg1()all messages flow on the same link
msg1()
24
• Valor de retorno
Notação Básica
1: tot := total(): Real
:POST :Sale
msg1()
return value type
• Mensagem para “self” ou “this” • Iteração
Notação Básica
:POST msg1() 1: clear() msg1() iteration26
• Cláusula de iteração
• Iteração com múltiplas mensagens
Notação Básica
1*: [i := 1..10] li := nextLineItem(): SalesLineItem :POST :Sale msg1() iteration clause 1*: [i := 1..10] msg2() :A myB :B msg1()note that iteration clauses are equal
myC :C 2*: [i := 1..10] msg3() msg1() { for i := 1 to 10 { myB.msg2() myC.msg3() } }
• Criação de instância
Notação Básica
1: create(cashier)
:POST :Sale
msg1()
create message, with optional initializing parameters
new created instance
«new» :Sale "«new»" is optionally
28 • Seqüenciamento de mensagens
Notação Básica
:ClassA msg1() :ClassB 1: msg2() :ClassC 1.1: msg3() not numbered legal numbering• Seqüenciamento complexo de mensagens
Notação Básica
;ClassA msg1() 1: msg2() :ClassB :ClassC 1.1: msg3() 2.1: msg5() 2: msg4() :ClassD 2.2: msg6() first second fourth sixth fifth third30
• Mensagens condicionais
Notação Básica
1: [nova venda] create()
:TV :Venda
:LinhaDeVenda 1.1: create()
entrarItem()
• Caminhos condicionais mutuamente exclusivos
Notação Básica
1a: [test1] msg2() :ClassA :ClassB :ClassC 1a.1: msg3() msg1() :ClassD 1b: [not test1] msg4() 1b.1: msg5() :ClassE 2: msg6() unconditional aftereither msg2 or msg4 1a and 1b are mutually
32
• Operação entrarItem() (diagrama parcial)
Notação Básica
1: [nova venda] create()
:TV :Venda
:LinhaDeVenda 3: create()
entrarItem()
conditional message, with test
2: [velha venda] criarLinhaDeVenda()
• Coleções (multiobjects)
• Mensagens para uma coleção
Notação Básica
Sale
sales : Sale multiobject
msg1()
message sent to the collection object itself
34
• Mensagens para uma coleção e um elemento
Notação Básica
1: create() :Sale sl: SalesLineItem SalesLineItem :SalesLineItem 2: addElement(sl) msg1() 2: print() :Sale sl: SalesLineItem SalesLineItem :SalesLineItem 1: sl := get(key) msg1()Como Fazer um Diagrama de
Colaboração
• Regras úteis
1. Criar um diagrama em separado para cada uma das operações de sistema, com cada operação como mensagem inicial
2. Se o diagrama ficar muito complexo (não cabe facilmente num folha de papel A4), ele pode ser dividido em
diagramas menores
3. Usar os requisitos (e.g., user stories, casos de uso) para projetar um sistema cujos objetos interagem para cumprir as tarefas exigidas
36
Exercício: Crie o diagrama de
colaboração para Criar Cliente
Fluxo Principal
1. O usuário solicita o cadastro de cliente.
2. O sistema apresenta o formulário para preenchimento.
3. O usuário entra com as informações necessárias do cliente no sistema e submete. 4. O sistema valida o cadastro do cliente. (FE01) (FE02)
5. O sistema armazena os dados do cliente.
6. O sistema cria uma conta em nome do cliente
7. O sistema notifica o usuário sobre o cadastro e o caso de uso termina. Fluxos de Exceção
FE01 - Usuário cadastrado
1. Se o cliente já estiver cadastrado, uma mensagem será exibida e o caso de uso termina. FE02 - Dados incompletos
1. Se os dados estiverem incompletos, o sistema exibe uma mensagem para que o usuário forneça as informações completas e o caso de uso retorna ao passo 3 do fluxo principal.