Aula10 diagrama colaboracao
Click here to load reader
-
Upload
portaldoestudanteads -
Category
Documents
-
view
365 -
download
2
Transcript of Aula10 diagrama colaboracao
UML – Diagramas de Colaboração
� Zeferino Saugene MSc. ([email protected])
� Dr. Edgar Gemo ([email protected])
Questões
� O que são diagramas de colaboração?
� Em que situações se utilizam diagramas de colaboração?
� Que relação existe entre os diagramas de sequência e os diagramas de colaboração?
� Que tipos de fluxo de controlo podem ser representados num diagrama de colaboração?
� Como é que se representam processos e comunicação entre processos num diagrama de colaboração?
Introdução
� Diagramas de colaboração e diagramas de sequência são colectivamente designados 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 num determinado âmbito (caso de uso, operação, etc.)
� Os diagramas de colaboração dão ênfase à estrutura organizacional dos objectos que enviam e recebem mensagens, enquanto que os diagramas de sequência dão ênfase à ordem temporal das mensagens
� Diagrama de colaboração = diagrama de objectos + diagrama de sequência
� Um diagrama de colaboração é um grafo com objectos (instâncias de classes) e ligações (instâncias de associações) através das quais fluem mensagens numeradas
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
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)
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»
• Exemplo:
p: Pedido
estado=“Pendente”
1:tratar() p: Pedido
estado=“Satisfeito”
1.1: «become»
Mensagens
� As mensagens fluem (passam) através de ligações entre objectos• Ligações são usadas para transportar ou de alguma forma implementar adistribuiçã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
ret
1: msgargs
1: ret:=msg(args) ou
Fluxo de controlo plano (flat)
� Caso em que há uma sequência simples de mensagens indiferenciadas, numeradas 1, 2, etc.
� Tipo de seta: (mensagem indiferenciada)
� Exemplo: comunicação telefónica
quem chama: Pessoa
: Linha telefónica
1: levanta auscultador
3: marca(5)
5: marca(1)
6: marca(1)
12: poisa auscultador
quem é chamado:Pessoa
2: dá sinal de marcar
4: termina sinal de marcar
7: dá sinal de chamada
9: pára sinal de chamada
11: dá sinal de conexão terminada
7: toca o telefone
9: pára de tocar8: levanta auscultador
10: poisa auscultador
Fluxo de controlo encaixado (nested)� Caso em que há sub-sequências de mensagens numeradas de
forma hierárquica (com ponto)
� Tipo de seta: (mensagem síncrona)• Pode iniciar uma sub-sequê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 sub-sequência de comportamento se complete no outro
� Exemplo:
� “Aplanado”:
1: f() 1.1: criar()
1.2: g()
ob2:C2 ob3:C3
2: h()
{new}
«self»
ob1:C1
1: f() 2: criar()
3: g()
ob2:C2 ob3:C3
4: h()
{new}
«self»
ob1:C1
Exemplo: Tratar pedido de stock
«local»
:Janela de Selecção de Pedidos
: Pedido
: Linha de Pedido
e1:Encomenda
: Item de Stock
e2: Encomenda
«self»
{new}
{new}
{new} {new}
1: tratar()
1.1.2.1: b:=baixo?()
1.1: * tratar()
1.1.1: e :=existe?(q)
1.1.2: [e=“sim”] retirar(q)
1.1.3: [e=“não”] criar()
1.1.2.2: [b=“sim”] criar()
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
� Tipo de seta: (mensagem assíncrona)
� 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)
Exemplo: Executar transacção com subtransacções concorrentes
t : Transacção
s2: Subtransacção
{transient}
{transient}
s2: Subtransacção
{transient}
«self»
«self»
«self»
A2:ok
1/ A1:criar
1:criar
1/B1:criar
A2/1.1: f:=restam subtransacções?
B2:ok
A3:destruir
B3:destruir
B2/1.2: f:=restam subtransacções?
Mensagem assíncrona que inicia fio de controlo leva a letra do novo fio de controlo
Exemplo: Forno robotizado
:OvenMgr
:Robot :Oven
:Factory Scheduler
: Factory Manager
curJob:TransferJob
job
job«local»
:OvenDoor
:Factory JobMgr
:RobotMgr
:RobotArm
1: start(job)
1/ B1: start(job)
A5,B4/ 2: completed(job)
1/ A1: start(job)
B4: completed(job) A5: completed(job)
A2: openDoor
B3/A4: closeDoorA3/B2:takeMaterial (job.location)
A3: ready
B3: done
Exercício 1: Cancela automática
� (ES, 9/1/98) Um parque de estacionamento dispõe de um cancela automática para saída de viaturas, ligada a um sensor de veículos sob a cancela e uma maquineta com ranhura para introdução de cartão de estacionamento e mostrador de mensagens. A saída de uma viatura processa-se normalmente da seguinte forma: • O condutor dirige a sua viatura para junto da cancela e introduz o cartão de estacionamento na ranhura disponível para o efeito na maquineta. No caso do cartão estar em situação regular (estacionamento pago e não foi excedido o tempo disponível para a saída após o pagamento), afixa a mensagem "Boa viagem" no mostrador, e envia uma ordem de levantamento para a cancela. A maquineta espera então receber do sensor de veículos sob a cancela uma sequência de notificações de activação e desactivação, após o que envia uma ordem de descida para a cancela e volta à situação inicial.
� Modelize este comportamento através de um diagrama de colaboração em UML. Represente o sistema (cancela, sensor e maquineta) por um objecto composto.