Aula10 diagrama colaboracao

7

Click here to load reader

Transcript of Aula10 diagrama colaboracao

Page 1: 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?

Page 2: Aula10 diagrama colaboracao

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

Page 3: Aula10 diagrama colaboracao

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»

Page 4: Aula10 diagrama colaboracao

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

Page 5: Aula10 diagrama colaboracao

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()

Page 6: Aula10 diagrama colaboracao

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

Page 7: Aula10 diagrama colaboracao

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.