O diagrama de colaboração modeliza o processo de saída de um veículo de um parque de estacionamento com cancela automática, representando a interação entre os objetos cancela, sensor e maquineta. O condutor introduz o cartão na maquineta, que verifica a situação do cartão e levanta a cancela. O sensor notifica a maquineta quando o veículo passa, fazendo-a descer a cancela.
1. UML – Diagramas de Colaboração
Zeferino Saugene MSc. (zsaugene@ustm.ac.mz)
Dr. Edgar Gemo (errgemo@ustm.ac.mz)
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?
2. 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
3. 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:
1:tratar() p: Pedido 1.1: «become» p: Pedido
estado=“Pendente” estado=“Satisfeito”
4. Mensagens
As mensagens fluem (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
1: msg
1: ret:=msg(args) ou
args
ret
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
2: dá sinal de marcar 1: levanta auscultador
4: termina sinal de marcar 3: marca(5)
7: dá sinal de chamada 5: marca(1)
9: pára sinal de chamada 6: marca(1)
11: dá sinal de conexão terminada 12: poisa auscultador
: Linha telefónica
8: levanta auscultador 7: toca o telefone
10: poisa auscultador 9: pára de tocar
quem é chamado:Pessoa
5. 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: {new}
ob1:C1 ob2:C2 ob3:C3
1: f() 1.1: criar()
«self» 2: h() 1.2: g()
“Aplanado”: {new}
ob1:C1 ob2:C2 ob3:C3
1: f() 2: criar()
«self» 4: h() 3: g()
Exemplo: Tratar pedido de stock
:Janela de Selecção de Pedidos
1: tratar()
«local»
: Pedido
1.1: * tratar()
{new}
e2: Encomenda {new} : Linha de Pedido
1.1.3: [e=“não”] criar() 1.1.1: e :=existe?(q)
1.1.2: [e=“sim”] retirar(q)
: Item de Stock 1.1.2.1: b:=baixo?()
«self»
{new} 1.1.2.2: [b=“sim”] criar()
e1:Encomenda {new}
6. 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
A3:destruir
1/ A1:criar {transient}
Mensagem assíncrona que
inicia fio de controlo leva s2: Subtransacção
a letra do novo fio de A2:ok «self»
controlo
1:criar
{transient} A2/1.1: f:=restam subtransacções?
t : Transacção
B2/1.2: f:=restam subtransacções?
«self»
{transient} B3:destruir
1/B1:criar
s2: Subtransacção
B2:ok «self»
7. Exemplo: Forno robotizado
: Factory Manager
:Factory Scheduler
job
1: start(job)
curJob:TransferJob
A5,B4/ 2: completed(job)
«local» job
:Factory JobMgr
1/ B1: start(job) 1/ A1: start(job)
B4: completed(job) A5: completed(job)
:Robot A3: ready :Oven
:RobotMgr :OvenMgr
B3: done
A2: openDoor
A3/B2:takeMaterial (job.location)
B3/A4: closeDoor
:RobotArm :OvenDoor
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.