Diagrama de Sequência UML: mensagens síncronas e assíncronas
Gabarito: letra C. No diagrama de sequência UML, a mensagem msg2 é assíncrona, pois sua seta possui ponta aberta (não preenchida), indicando que o remetente não aguarda uma resposta imediata e pode continuar executando outras atividades. A mensagem msg1, por sua vez, é síncrona, representada por seta com ponta fechada (preenchida), e por isso possui uma linha de retorno tracejada. Essa distinção de notação é o ponto central da questão.
O diagrama de sequência é um diagrama comportamental da UML que descreve a interação entre objetos ao longo do tempo, enfatizando a ordem temporal das mensagens trocadas. Cada objeto é representado por uma linha de vida (linha vertical tracejada), e as mensagens são setas horizontais que ligam uma linha de vida a outra. A forma da ponta da seta é o que determina se a mensagem é síncrona ou assíncrona: seta com ponta fechada (triângulo preenchido) indica chamada síncrona, em que o remetente aguarda a conclusão do método chamado; seta com ponta aberta (triângulo vazio ou meia seta) indica chamada assíncrona, em que o remetente não bloqueia e segue seu fluxo. Mensagens síncronas costumam ter uma linha de retorno tracejada (mensagem de resposta), enquanto mensagens assíncronas não possuem retorno explícito.
No diagrama da questão, observa-se que msg1 parte do objeto a em direção ao objeto b com seta de ponta fechada, caracterizando uma chamada síncrona. Após a execução, há uma linha tracejada de retorno de b para a, confirmando a natureza síncrona. Já msg2 parte de a em direção a b com seta de ponta aberta, sem linha de retorno, caracterizando uma chamada assíncrona. Além disso, o objeto b é criado durante a execução do diagrama, o que é representado por um retângulo mais abaixo na linha de vida (instanciação), e não simultaneamente com a.
A banca explora a confusão entre os dois tipos de mensagem: muitos candidatos associam a ausência de retorno a assíncrona, mas esquecem que a forma da seta é o critério decisivo. Outra pegadinha é a instanciação: o objeto b não é instanciado por uma ocorrência de execução do objeto a, mas sim por uma mensagem de criação (estereótipo <<create>>), que não aparece no diagrama. A alternativa E tenta confundir a criação de b com uma chamada de método comum.
Guarde a regra: seta fechada = síncrona (com retorno); seta aberta = assíncrona (sem retorno). É exatamente essa distinção que separa as alternativas corretas das incorretas.
Alternativa A — ❌ Incorreta
A mensagem msg2 não é uma chamada recursiva. Recursão ocorre quando um objeto envia uma mensagem a si mesmo, ou seja, a seta parte e chega na mesma linha de vida. No diagrama, msg2 parte de a e chega em b, portanto é uma mensagem entre objetos distintos, não recursiva.
Alternativa B — ❌ Incorreta
A mensagem msg1 é síncrona, não assíncrona. A seta de msg1 possui ponta fechada (preenchida), indicando chamada síncrona, e há uma linha de retorno tracejada de b para a. A ausência de retorno não define assincronia; o que define é o formato da seta. Mensagens assíncronas têm seta com ponta aberta.
Alternativa C — ✅ Correta ⟵ GABARITO
A mensagem msg2 é assíncrona, pois sua seta possui ponta aberta (não preenchida), indicando que o remetente não aguarda resposta e pode continuar executando. Não há linha de retorno associada, o que reforça a natureza assíncrona. Essa é a leitura correta da notação UML.
Alternativa D — ❌ Incorreta
Os objetos a e b não foram instanciados simultaneamente. No diagrama, o objeto a existe desde o início (topo da linha de vida), enquanto b é criado durante a execução, representado por um retângulo mais abaixo na linha de vida. A instanciação de b ocorre em um momento posterior, não simultâneo.
Alternativa E — ❌ Incorreta
O objeto b não foi instanciado por uma ocorrência de execução do objeto a. A criação de um objeto em diagrama de sequência é representada por uma mensagem com estereótipo <<create>>, que não aparece no diagrama. A mensagem msg1 é uma chamada de método comum, não uma mensagem de criação. Portanto, a afirmação não encontra respaldo na notação UML.
Gabarito: letra C — a mensagem msg2 é assíncrona, conforme a notação de seta aberta.