Cómo dibujar múltiples retornos en el diagrama de secuencia UML

En el diagrama de secuencia UML, un método puede tener solo una línea de retorno (al menos en Astah, no puedo dibujar dos líneas de retorno de un método), ¿cómo puedo modelar múltiples retornos en bloques if-else?

En el siguiente ejemplo, la línea de retorno 'a' termina con methodX(), ¿cómo dibujar la línea de retorno 'b'?

String methodX(int i) {
  if (i>0)
    return 'a';
  else
    return 'b';
}

     +------------+            +------------+
     |    Foo     |            |     Bar    |
     +-----+------+            +------+-----+
           |                          |
           |        methodX(i)         |
          +-+----------------------->+-+
          | |                        | |
  +-----+------------------------------------+
  | alt | | |  [i>0]                 | |     |
  +-----+ | |           a            | |     |
  |       | |<- - - - - - - - - - - -+-+     |
  |       | |                         |      |
  |       | |                         |      |
  +------------------------------------------+
  |       | |  [else]                 |      |
  |       | |                         |      |
  |       | |           b             |      |
  |       | |<- - - - - - - - - - - - | ??   |
  |       | |                         |      |
  |       | |                         |      |
  +------------------------------------------+
          | |                         |
          +-+                         |
           +                          +

preguntado el 12 de junio de 12 a las 14:06

2 Respuestas

El problema es con su herramienta, no con UML. Verificar paradigma visual para UML. Puede agregar activaciones manualmente al comienzo de cada alt fragment y al final de la activación envía el mensaje de respuesta.

Respondido el 13 de junio de 12 a las 14:06

Observaciones rápidas:

(1) Recuerde, que una clase/objeto puede enviarse mensajes a sí mismo ("DoSomething"), esto hace que las "alternativas" sean más difíciles de apreciar.

(2) Al usar "alt", debe mencionar las condiciones. "alt", representa "if-then-else", "switch-case" y conceptos similares de los lenguajes de programación.

Y esas oraciones tienen condiciones, que deben agregarse a los diagramas UML ("[condición]").

(3) Dentro de cada condición o caso del "alt", puede haber varios mensajes entre varios objetos, o para ellos mismos, o ninguno (solo la flecha de "retorno").

..........................................................
.......+---------+..............+---------+...............
.......|   Foo   |..............|   Bar   |...............
.......+----+----+..............+----+----+...............
............|........................|....................
..........+-+-+....................+-+-+..................
..........|   |......methodX().....|   |..................
..........|   +------------------->+   |..................
..........|   |....................|   |..DoSomething()...
..........|   |....................|   +---+..............
..........|   |....................|   |...|..............
..........|   |....................|   |...|..............
..........|   |....................|   |...|..............
..........|   |....................|   |<--+..............
..........|   |....................|   |..................
..+-----+-------------------------------------+...........
..|.alt.|.|   |....................|   |......|...........
..+-----+-------------------------------------+...........
..|.[option=1].....................|   |......|...........
..|.......|   |....................|   |......|...........
..|.......|   |....................|   +---+..|...........
..|.......|   |....................|   |...|..|...........
..|.......|   |....................|   |...|..|...........
..|.......|   |....................|   |...|..|...........
..|.......|   |....................|   |<--+..|...........
..|.......|   |<-------------------+   |......|...........
..|.......|   |....................|   |......|...........
..+-----+-------------------------------------+...........
..|.[option=2].....................|   |......|...........
..|.......|   |....................|   |......|...........
..|.......|   |....................|   |......|..// The wide bar its kept,
..|.......|   |<-------------------+   |......|..// even if there is a
..|.......|   |....................|   |......|..// previous return arrow
..+-------------------------------------------+...........
..|.[else]|...|....................|   |......|...........
..|.......|   |....................|   |......|...........
..|.......|   |....................|   |......|...........
..|.......|   |<-------------------+   |......|...........
..|.......|   |....................|   |......|...........
..+-------------------------------------------+...........
..........|   |....................|   |..................
..........+-+-+....................+-+-+..................
............|........................|....................
............|........................|....................
............X........................X....................
..........................................................

Saludos.

PD ¿Alguna hamburguesa con queso o atún para el gato?

Respondido 14 Oct 14, 20:10

Su respuesta no resuelve mi problema de cómo dibujar más de una línea de retorno de un método. La línea de retorno de doSomething() solo puede apuntar a la clase/objeto que lo llama, en el ejemplo es Bar, no Foo. Pruébelo en la herramienta UML, por ejemplo, Astah. - Aleung

@aleung: Por favor, revisa la actualización. La barra ancha de clase se mantiene, incluso si hay una "flecha de retorno" antes. Si un "guardia" no es verdadero, se omite y se ignora, ya que no existía, y se comprueba el siguiente "alt", y así sucesivamente. Su gráfico, corta la barra ancha, en la primera "guardia". - umlcat

Supongo que es la limitación de Astah, termina la barra en el primer retorno. Astah es mi editor UML favorito. No probé el paradigma visual para UML porque requiere registro. - Aleung

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.