SlideShare uma empresa Scribd logo
1 de 7
Baixar para ler offline
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?
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:

          1:tratar()        p: Pedido       1.1: «become»        p: Pedido
                       estado=“Pendente”                    estado=“Satisfeito”
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
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}
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»
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.

Mais conteúdo relacionado

Mais procurados

Mais procurados (18)

Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
POO - 16 - Polimorfismo
POO - 16 - PolimorfismoPOO - 16 - Polimorfismo
POO - 16 - Polimorfismo
 
Aula1 c++ builder
Aula1   c++ builderAula1   c++ builder
Aula1 c++ builder
 
Javascript avançado
Javascript avançadoJavascript avançado
Javascript avançado
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoes
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
Java 06
Java 06Java 06
Java 06
 
Estruturas
EstruturasEstruturas
Estruturas
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
 
Java5
Java5Java5
Java5
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Estruturas
EstruturasEstruturas
Estruturas
 
Curso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NETCurso de OO com C# - Parte 06 - ADO.NET
Curso de OO com C# - Parte 06 - ADO.NET
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 

Mais de Portal_do_estudante_ADS (16)

Diagrama de classes
Diagrama de classesDiagrama de classes
Diagrama de classes
 
Diagramas de pacotes
Diagramas de pacotesDiagramas de pacotes
Diagramas de pacotes
 
Diagramas de distribuicao
Diagramas de distribuicaoDiagramas de distribuicao
Diagramas de distribuicao
 
Diagramas de componentes
Diagramas de componentesDiagramas de componentes
Diagramas de componentes
 
Aula9 diagrama de_sequencia
Aula9 diagrama de_sequenciaAula9 diagrama de_sequencia
Aula9 diagrama de_sequencia
 
Aula8 diagrama de_objectos
Aula8 diagrama de_objectosAula8 diagrama de_objectos
Aula8 diagrama de_objectos
 
Aula2 paradigmas
Aula2 paradigmasAula2 paradigmas
Aula2 paradigmas
 
Aula1 eng software
Aula1 eng softwareAula1 eng software
Aula1 eng software
 
Aula capitulo9 diagrama_estados
Aula capitulo9 diagrama_estadosAula capitulo9 diagrama_estados
Aula capitulo9 diagrama_estados
 
Aula 7 diagramas_classes2
Aula 7 diagramas_classes2Aula 7 diagramas_classes2
Aula 7 diagramas_classes2
 
Aula 6 -_casos_de_uso
Aula 6 -_casos_de_usoAula 6 -_casos_de_uso
Aula 6 -_casos_de_uso
 
Aula 5 -_fundamentos_de_uml
Aula 5 -_fundamentos_de_umlAula 5 -_fundamentos_de_uml
Aula 5 -_fundamentos_de_uml
 
Aula 4 -_metodologia_e_tecnicas_de_analise_oo
Aula 4 -_metodologia_e_tecnicas_de_analise_ooAula 4 -_metodologia_e_tecnicas_de_analise_oo
Aula 4 -_metodologia_e_tecnicas_de_analise_oo
 
Aula -diagrama_de_actividade
Aula  -diagrama_de_actividadeAula  -diagrama_de_actividade
Aula -diagrama_de_actividade
 
Aula 3 -_fundamentos_sobre_aoo
Aula 3 -_fundamentos_sobre_aooAula 3 -_fundamentos_sobre_aoo
Aula 3 -_fundamentos_sobre_aoo
 
Rup vs. xp
Rup vs. xpRup vs. xp
Rup vs. xp
 

Aula10 diagrama colaboracao

  • 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.