::i
UML-1550
=:i
-=- ::I
l
....l
o
-c
o
~
'""" l
cJ Z
e,
~
::J
::i
::i
::I
~
'" o '"-c >
5.2 - Diagrama de Sequência
:l:
"" '" X .:.J
o
<
., '" o
Bloco de Construção do Aprendizado
l
:;j
x :5
.,
...o
o
'"O,
:i ~
::I
=
~
:I
:3
= =
:I ~ ~
=
INSTITUTO INFNET - 209
r
UML-I550
I
Tipos de Diagramas
o .« o
« o
:J
ow
• Interação é o conjunto de mensagens trocadas entre objetos
f
w Z u.
:i: o:
oQ. (fJ
o
• Uma interação pode ser representada enl UML de quatro maneiras:
o > o:
« w w
(fJ
,o:
o .« (fJ
- Diagrama de Visão Geral
- Diagrama Temporal
- Diagrama de Comunicação
(fJ
o
!::: w
o: i5 (fJ
o (fJ oo
- Diagrama de Sequência
o f
I
210
Diagramas de interação representam a troca de mensagens entre objetos e são usados para modelar o comportamento de vários objetos dentro de um caso de uso. A UML 2.0 define quatro maneiras de se representar a comunicação existente entre objetos de um caso de uso:
I
Diagrama de Visão Geral: variante do diagrama de atividades que representa o fluxo de um processo. Cada nó deste diagrama pode ser outro diagrama de interação. É um diagrama de alto-nível que mostra conjuntos de interações combinadas em uma sequência lógica, incluindo lógica de controle de fluxo e de navegação.
•
Diagrama de Comunicação: tem o foco na organização estrutural dos objetos que enviam e recebem mensagens. Baseia-se no diagrama de colaboração das versões anteriores da UML. Diagrama Temporal: mostra as restrições de tempo na mensagens enviadas e recebidas durante uma interação. Diagrama de Sequência: apresenta a sequência de troca de mensagens entre os objetos.
i
I
•
-i
!
i
•
I I
I INSTITUTO INFNET - 210
I
•
::I
UML-155D
::I
:I
:I
::I
ci.
Diagrama de Sequência
;:
-'
o « o <
~
Li
• Mostra interações (trocas de mensagens) entre objetos em uma sequência temporal. • É utilizado para descrever casos de uso, métodos e serviços. • Facilita a visualização da dinâmica do sistema, pois mostra quais os métodos e as situações em que eles serão chamados. • Enfatiza o ordenamento temporal das operaçoes.
L
Z
L
~
~:: c
:::: < >
:I '".. ..s ~ ~
L!
:J
:z:::
o
<
i:
I:
:;:
s ~
::I
211
::I
~
~
~
=
~
:11
= :I
= =
=ti
Os diagramas de seqüência são utilizados para descrever o fluxo de execução de casos de uso, métodos e serviços (transações complexas e web services). Neles são representados atores, objetos e métodos ordenados por tempo. Possibilitam que o fluxo de execução seja, ao mesmo tempo, documentado e validado. Oferecem um excelente nível de detalhamento e facilitam a visualização da dinâmica do sistema. Por isso é considerado um dos mais importantes diagramas da.UML, sendo a técnica preferida de modelagem da dinâmica de um sistema. Os diagramas estudados até aqui não possuem qualquer significado com relação a posição relativa de seus elementos. Nos diagramas de sequência esta posição é importante pois eles podem ser conssão gráficos 2D, nos quais o eixo horizontal representa a execução de um determinado método e o eixo vertical mostra quais métodos são chamados. Ferramentas case possuem muitas facilidades para o relacionamento entre diagramas de classes e de sequência, como por exemplo: escolha de um método existente em uma classe, criação de novo método, uso e criação de classe dinamicamente, entre outras.
INSTITUTO INFNET - 211
UML-I55D
f
Componentes Principais
~
o o c
.
-f
w
li:; z u..
jObjetol
~
jObjeto2
-
E
ti:
o Q. CIl
o c ti:
j: Ator 1 : mensagem 1()
W CIl W
-
r
2 : mensagem2()
. ti:
o
.
CIl
-
r
3 : resposta 1
...
o u:;
4 : m nsagem3()
ti:
5 : menseqerns
C CIl o CIl o c o
~-----------
:
-
r
---------- --
6 : resposta2
...
~
-
I 212
f
Diagramas de sequência são construídos de acordo com as seguintes convenções: • Linhas verticais representam os objetos; • Setas horizontais representam as mensagens passadas entre os objetos; • Rótulos das setas são as mensagens, na maioria das vezes operações; • A posição na vertical mostra o ordenamento relativo das mensagens, o decorrer das ações no tempo;
-
r
..r
f
• Retângulos situados nas linhas verticais para indicar o tempo de vida dos objetos (caixas
de ativação).
• A caixa de ativação indica o tempo que o objeto ficará ativo em memória. Esta figura
representa que o objeto l irá acionar um método de outro objeto e ficará ativo aguardando
sua resposta (método síncrono) para posteriormente acionar um método próprio.
• A mensagem4 representa um método assíncrono, ou seja, um método que é invocado
sem que o chamador precise ficar aguardando a resposta.
• A representação da seta de retomo é facultativa.
'E
E
-E INSTITUTO INFNET - 212
=
UML-1550
3
=~
=~
=~
=
~
Componentes
~
< :> ~
il
• A representação de uma classe pode aparecer no lugar de um objeto, mas sempre respeitando a regra de nomenclatura:
ii: z Lo ~
~ ~
<:
> :c: JJ.
'"
.LI.
l:
c1ientel:Cliente
< D li
:::
Objeto:Classe
il ~
.. ~ f?
:Ciiente
213
:3
=
:
= = =
Existe a possibilidade da representação de classes em um diagrama de sequência, o que é comumente utilizado quando não se tem necessidade de um elemento específico de uma classe, por exemplo uma listagem de clientes. Outra situação para a utilização de classes é a chamada a métodos de classe (métodos que não precisam de objetos para serem chamados). Se for necessário o acesso a uma instância específica da classe é utilizada a notação nome do objeto ":" e o nome da classe. A representação dos objetos no diagrama de sequência sempre é seguida do nome da classe ao qual eles pertencem. A posição dos objetos também tem significado: um objeto que esteja posicionado acima da primeira chamada do diagrama já existia (já havia sido instanciado) antes do início da operação descrita.
:I
:I
:
= :li :I
INSTITUTO INFNET - 213
UML-~
Exemplo: Agenda
~
o ,« C> « o ~ o w
...w Z u. ~
a:
~
I: Usuário
CIl
o o «
1 : dados do contata0
iC
w
Nome válido
CIl
3 : valídarNo_fY)~O-
~.
~
, _-- - - -- ~ - -. -. possui duas palavras
o ,«
CIl
CIl
4 : nomeválido
...o
jjj
a:
Õ CIl
o CIl o
f«-------------------- 6 : contato cadastrado
o
~
214
o diagrama acima mostra a representação do caso de uso "Inserir Contato" em uma
agenda. Como este diagrama é uma descrição de casos de uso, não é necessário ( e nem desejável) especificar exatamente quais são as classes de interface e de controle. Para indicar a existência deste tipo de classe sem a necessidade de detalhamento é comum a utilização de uma classe denominada "Fronteira" (Boundary no original). A condição de guarda (texto entre colchetes) mostra alternativas possíveis durante a execução de uma função. O estereótipo "create" é utilizado para indicar uma mensagem de criação. Anotações são utilizadas para inserir informações adicionais, normalmente referentes a forma como certos trechos do diagrama devem ser implementados. A ativação determina uma janela no tempo em que o objeto está executando uma ação, que pode ser seu próprio código ou aguardando o retorno de alguma mensagem enviada. Ocorre quando o objeto recebe uma mensagem. A linha da vida representa a existência do objeto em um dado momento. As mensagens são mostradas como setas (síncronas, assíncronas ou simples) entre as linhas de vida. Diagramas de seqüência podem ser das formas genéricas ou instância. Na forma de instância, mostra as interações necessárias em um cenário específico em detalhes. Na forma genérica mostra todas as possíveis alternativas de um cenário.
INSTITUTO INFNET - 214
~
UML-1550
:I
::3
~
Criação e Destruição de Objetos
--'
o < <
.,.
:I ~;:
iZ
z
/Fronteira
'
::I
~
~
~
5 :ê>
i: Usuário 1 : dados do contato()
i5
'":o::
.u
::J
<
:t
'"'"o
3 : exclusão()
Li
<<destroy>> 4
E
:::
:I
5
::
~
Õ
:J
215
:I
::J
::I
::I
::I
:J
Criação e exclusão de objetos também são representados em um diagrama de sequência. Quando uma mensagem de criação é enviada (geralmente síncrona), o símbolo do objeto é mostrado no local onde foi criado. No diagrama pode-se observar que a instância de Contato é criada a partir da Fronteira. Note que a instância da Fronteira aparece um pouco abaixo da instância da janela, indicando que ela foi criada depois. A figura mostra um 'X' na linha de vida da instância de Contato indicando a sua exclusão. Note que a linha de vida do objeto não segue adiante, ou seja, ele não pode mais ser acessado. Como em muitas linguagens modernas não existe a possibilidade do programador solicitar a exclusão de um objeto, este símbolo não aparece muito nos diagramas atuais.
::I
~
:J
:i :I ~
INSTITUTO INFNET - 215
UML-I550
Exemplo: Banco Money
~
o
'
:> o w
IFronteira.
f
I
Conta.Corrente
w
I1
Cliente I
Z
u,
~ 11:
I
o o..
'"oo
pessoa ; 1 : Informar Agêr.ciarIConta(
2 : validarCoota()
> 11:
K---- -- - - - ---- - - - - - - --- - -
w w
----- - - - - - - - - - - - - - -
4 : Solicitar Valor e Tipo
'"
3 : conta válida
o. ]
:
11:.
o
'
:
'" o '"
S: Valor e Tipo Depósito(). :
W
l---------
Õ
:
8 : nome parcial
:
9 : Confirmação()
f
_h
11:
:
'"o '"oo
6 : busca;f\Iome()
rt_-----------i~~;i~~i;;; is L~~ lr : d~-~~~~- --------- --~Q: '
!
«(reate» 10
o f
216
'~
o diagrama acima mostra a sequência de mensagens do caso de uso efetuar depósito do Banco Money. A fronteira representa a interface entre o usuano e o sistema. É usada para esconder os detalhes da interação, facilitando o foco na modelagem do processo. O ator "pessoa" fornece dados para o sistema em três situações diferentes, recebendo a resposta em cada uma delas. Nem sempre a resposta é mostrada, pois em muitas situações ela é bastante óbvia. Omitir a resposta toma o diagrama mais legível.
INSTITUTO INFNET - Z16
r
I UML-I550
I:
E
<é
Descrevendo um Caso de Uso
o
!:i
o .« o « o ::l
o w
• Os diagramas de seqüência são orientados para exprimir o desenrolar temporal de seqüências de ações. E" difícil representar lógicas de seleção e repetição sem prejudicar a legibilidade do diagrama, • Os roteiros representam desdobramentos da lógica do caso de uso. E" preferível usar diagramas separados para representar roteiros resultantes de diferentes caminhos lógicos.
tuz u,
;t;
a: o
!1. CIl
o o
«
ir
w CIl w a: o
.«
CIl
CIl
o m l
a: C
CIl
o CIl oo o I-
I:
E
!:
I: ~
~
E
218
I:
E
.~
INSTITUTO INFNET - 218
:3
UML-1550
:I
:3
~
Caso de Uso: Registrar Venda
--'
o «
:.Jo
< o
~
::? i3
• Partindo de um Caso de Uso ...
.Li..:
Z
.....
:?;
::I
- O Caixeiro registra itens de mercadoria.
'" ~ ~
- O Sistema totaliza venda. - O Caixeiro registra modo de venda.
<:
:>
~
I::
J...:
:: :o >::
~ ::
:JI
I::
- Se venda a prazo, o Caixeiro insere venda em contas a receber.
5
- Senão, o Caixeiro registra pagamento.
::
o
:ti
:;::;
:I
õ
:l
=
:I
219
:I
~
:=I
~
:I
:I
~
o diagrama de sequência pode ser feito a partir da descrição do caso de uso e da definição das classes. Ele é um descobridor de métodos das classes pois normalmente quando desenhamos o diagrama de classes não temos uma idéia muito clara a respeito das interações, métodos e objetos. Desenhar um diagrama de classes sem o auxílio do diagrama sequência é uma tarefa difícil, principalmente quando o desenvolvedor não conhecer a fundo o processo ou quando ele for inexperiente. A descrição acima se refere a um processo de registro da venda em um supermercado. Na descrição existem duas condições que podem ser identificadas em diagramas separados ou no mesmo diagrama. As operações descritas devem ser traduzidas em chamadas a métodos e, portanto, este é o momento para decidir qual classe conterá o método se por acaso ele ainda não existir no diagrama de classes.
~
:I
=
~
=s
INSTITUTO INFNET - 219
UML -1550
c(
Registrar Venda a Vista
(J
~
o .«
o
«
o
::l (J
w f
w
Z u,
~
a: o O-
Ul
o
(J
«
> a: w
ffi
a: o .«
• Cria-se o Diagrama de
*
Seqüência Principal • O fluxo alternativo é ignorado pois será desenhado em outro diagrama de sequência.
:Venda I I
:Caixeiro I I I 1: totalizar(
:Caixa
I
I
I I I I I I I I
I I I I I I
i, :
"U /0
Ul
Ul
I
I~
2: registrarM2.do( )
o
t:
w
a: E
I
Ul
3: reqistrarPaqamento() ,
O
Ul
O
I I
(J
O
I
'-
f-
I I
I I
/0 I I
220
o primeiro diagrama desenhado refere-se ao fluxo típico. Neste caso como não há indicação clara de qual é o fluxo típico, escolhe-se um deles como principal. Observe que a sequência de passos da figura é a mesma da descrição do caso de uso. A novidade aqui é a identificação das classes "donas" dos métodos.
"
/,
\
\yJjJ'-- .~. [)/W . 'xJ
./~,
'~íY
!E:
'~ INSTITUTO INFNET - 220
:3
UML-1550
~
:ti ~
~
Registrar Venda a Prazo
.<::>
~
ü
ii zLo
• Diagramas de
:]I
~ ~
<:
~
:11 ~
.. .<.. .. > z::
..,;
/U
2: registrarModo( )
:;
~O
u ~
..
I
~
13: inserir(Venda)
:2 "3
I
~ 221
:I
I I I I I I
I
I I 1: totalizar( )" :
foi desenhado o fluxo alternativo
JJ.
z::
I
:Caixeiro I
• Neste diagrama
I :Contas a I
:Venda
*
Seqüência Alternativos
~
"
I I I I I
I,
receber I I I I I I I I I I
I I I I
I I I
I I
/0 I
I I
\
~
~ ~
=t ~ ~ ~
=t :=I :=J
::li
INSTITUTO INFNET - 221
r
I
-
;: '
UML-1550
-
Condição de Guarda
~
o
f
'<1:
o ow
• Um fluxo pode ser executado dependendo de uma determinada condição:
tuz u,
~ lI:
o
c, Ul
oo
- [condição] - lógica de seleção
• Exemplo: I IFronteira I
'o '<1:
Ul
Ul
o
E
I I : Ag,enda I
E
l:: w
lI:
Õ Ul
o Ul oo
1 [nome válido] : inserirContatoO
~
... '
D
~
E
-
>
lI: W Ul W lI:
-E
..
r
222
-
~
Uma determinada mensagem pode estar sujeita a condições para a sua ativação. Estas condições são mostradas no diagrama como textos entre colchetes acima ou à frente do nome do método invocado.
-
~
Na figura acima o método inserirContato da classe Agenda só será chamado se o nome do contato for válido. É comum o retomo de um método chamado previamente ser usado como a condição de execução da mensagem.
-2
-
c:
~
-
E
-
~
-
E
-f INSTITUTO INFNET - 222
-
E
3
UML-155D
3
~
~
Condição de Guarda
-
.:<:.;. C(
~
;,:
3
i1 Z '" Lo
~
3
~
::I
=
:I:
[
:Venda I
I
:Caixeiro I I
I 1: totalizar( ) ,
~
Ê <: ....
.. :> :I:
I
I
I
I
I
I
I
I
.~
....
2
2: registrarMod~( )
/0 I
Li
[Venda a Pra:zo] 3: inserir(Venda)
~
.. o
I
I
o
g
.Caixa
I
I
I
I
I
i§
o <
:Contas a I
receber I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
I
>0
[Venda a Vista] 4: registrarJDagamento( ) I
I
I
::11
I
223
3
= ~
o exemplo acima mostra o caso de uso descrito por apenas um diagrama. Isto foi possível graças ao uso das condições de guarda. Se a venda for a prazo, o método inserir da classe Contas a Receber é chamado. Se a venda for a vista, o método registrarPagamento da classe Caixa é chamado.
~
:íI ~ ~ ~
~
:I
:!I
~
INSTITUTO INFNET - 223
UML-I550
Iteração
o ~
o
'
o
• Um fluxo pode ser repetido diversas vezes de acordo com alguma condição de guarda:
::l
o
W
ti; Z
u,
;;
a:
- *[condição] -lógica de iteração (loop).
oo.. CIJ
o
o a:
l/Fronteira
I
w w
CIJ
a: /: Usuário
O'
:
'
CIJ CIJ
1: palavra chevef)
2 : buscarContatosO
~
o
!:: w a:
3: montarRespostaO ,---------,
< > 4 "[pera cada contato]
Õ CIJ
o
II:Contato I I I
1
CIJ
o o
1'::- ------- ---- ---- ---
~
5 : contatos encontrados
~------------------: 6: lista de contatos ';
224
Iterações (repetições) são especificadas como condições de guarda precedidas de um asterisco. O diagrama de sequência acima é a descrição do caso de uso "Buscar Contatos" de um sistema de agenda eletrônica. O usuário informa a palavra chave e a fronteira invoca o método "buscarContatos" da classe Agenda. Este método por sua vez, chama o método montarResposta que cria um objeto do tipo Contato para cada contato encontrado de acordo com o critério de busca.
INSTITUTO INFNET - 224
I~
=
UML -1550
:a
~
:a :a
:=J
::I ~
~
Anotações
-
-<:;;; <
:;;:
• Diagramas de seqüência também podem ser complementados por meio de anotações.
:;;: Z JL.
~
2 ~
• Os detalhes de processamento que não correspondem a interações entre classes são lançados como anotações.
<'
.. :>
:z: .11 LI.
:z:
..
.:< ~
:;;: ~
• Essas anotações podem servir como especificações das operações das classes envolvidas.
~
~
~ 225
~ ~
No caso de diagramas de sequência, anotações podem ser usadas para descrever o conteúdo de métodos.
~
=:r.
:I
:J
=t
:J
::I
:=I
:I
INSTITUTO INFNET - 225
UML- L55G
Anotações
o ~ o
.« o « o ::::>
o
w t w
Z
u,
~
, G;::.f:d9t dA
a:
~
oQ.
:km
: Ccclrõh" &e. GêSeC_.,z-e
FemBrAdmeS
f,:;n-.g:~
rJl
o o «
> a:
1rmro-rnece.-.iores
eXlbê ê
habilita o ~13rnP3' Código
li:
da Nove Mi'fcaJ.::tiEt e c besêc OK.
w rJl w
a: d ,« rJl rJl
o
t
m a: Õ
"~.,,~".,~,.c:~'
rJl
o rJl o o o
t
I
) Gf{:=m-;;;l":=of:::-n;~::-:-::-.d~Qf:="-=-':=,::-g.:-::-'c.:=OO;=d,,"--,,"--,,+:e,"--$a-:CbJ:""-1itac:-:-"-=-c.s=m:=.pô-=-.-----... Cbd ,god di Nü'!o1El fi! €f;;:;.sdórl a ~ 6 00 §O Oi<.
I 226
Exemplo de anotações com detalhes de implementação.
INSTITUTO INFNET - 225