Pular para o conteúdo principal

Questão de Programação — Programação Orientada a Objetos — VUNESP 2024

ProgramaçãoProgramação Orientada a Objetos
Código
vu086446
Banca
VUNESP
Órgão
SAAE de Aparecida - SP
Ano
2024
Nível
Superior
Cargo
Analista de Tecnologia da Informação
O seguinte trecho de código, escrito na forma de pseudo-código, é parte de uma implementação característica de programas orientados a eventos.Imagem associada para resolução da questãoNesse contexto, pode-se afirmar que
  1. Amsg corresponde a uma mensagem de e-mail.
  2. Bprocessar_mensagem, internamente, inicia uma nova thread para tratar o evento recebido.
  3. Cprocessar_mensagem, internamente, dispara event handlers adequados.
  4. Dobter_proxima_mensagem é uma rotina conhecida como event handler.
  5. Eprocessar_mensagem, internamente, realiza um fork no processo em execução para tratar o evento recebido.
Revelar gabarito e comentário

GabaritoC — processar_mensagem, internamente, dispara event handlers adequados.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Programação orientada a eventos

Gabarito: letra C. Em programas orientados a eventos, o fluxo de execução é dirigido por eventos (cliques, mensagens, timers), e a rotina que recebe um evento e o despacha para as funções de tratamento registradas é justamente o que a alternativa C descreve: processar_mensagem dispara os event handlers adequados. As demais alternativas confundem o conceito com e-mail, threads, fork de processo ou rotulam erroneamente a função de obtenção da mensagem como event handler.

A programação orientada a eventos é um paradigma em que o controle do programa é invertido: em vez de o código chamar funções diretamente, ele fica à espera de eventos e reage a eles. O evento pode ser uma ação do usuário (clique, tecla), uma mensagem de outro programa, um timer que expira, ou uma resposta de rede. O coração desse modelo é o event loop (laço de eventos), que fica em execução contínua, aguardando a chegada de eventos e os distribuindo para as funções que foram registradas para tratá-los.

Essas funções de tratamento são chamadas de event handlers (ou listeners). Quando um evento ocorre, o sistema identifica qual handler está associado àquele tipo de evento e o invoca. A função que faz essa distribuição — muitas vezes chamada de dispatcher ou event emitter — é quem "dispara" os handlers. No pseudo-código da questão, processar_mensagem é essa função despachante: ela recebe a mensagem (o evento) e chama os handlers adequados. Já obter_proxima_mensagem é a função que busca o próximo evento da fila, não o handler em si.

Um exemplo concreto: em uma interface gráfica, quando o usuário clica em um botão, o sistema operacional gera um evento de clique. O event loop captura esse evento e o entrega à função de despacho, que verifica qual handler foi registrado para o botão e o executa. O mesmo padrão aparece em servidores web, onde cada requisição HTTP é um evento que dispara o handler correspondente à rota.

A pegadinha da banca está em confundir o papel de cada função: processar_mensagem não cria threads nem faz fork — ela apenas despacha o evento para os handlers. E obter_proxima_mensagem não é um handler, é a função que alimenta o loop com o próximo evento. Guarde essa distinção: quem obtém o evento ≠ quem trata o evento ≠ quem despacha o evento.

1Event loop
Obtém o próximo evento (obter_proxima_mensagem)
Aguarda e distribui eventos
2Dispatcher (processar_mensagem)
Recebe o evento
Dispara os handlers adequados
3Event handlers
Funções registradas
Tratam o evento
4Eventos
Clique, tecla, timer
Mensagem de rede
Programação orientada a eventos
LEVELsoulevel.com.br
Programação orientada a eventos: Event loop (Obtém o próximo evento (obter_proxima_mensagem), Aguarda e distribui eventos); Dispatcher (processar_mensagem) (Recebe o evento, Dispara os handlers adequados); Event handlers (Funções registradas, Tratam o evento); Eventos (Clique, tecla, timer, Mensagem de rede)

Alternativa A — ❌ Incorreta

Afirma que msg corresponde a uma mensagem de e-mail. No contexto de programação orientada a eventos, msg é um evento — pode ser um clique, uma tecla, uma mensagem de rede, um timer — e não especificamente um e-mail. A banca usa o nome "mensagem" para induzir o candidato a pensar em e-mail, mas o conceito é genérico.

Alternativa B — ❌ Incorreta

Diz que processar_mensagem, internamente, inicia uma nova thread para tratar o evento. Isso não é característico da programação orientada a eventos: o despacho de eventos normalmente ocorre na mesma thread do event loop, de forma síncrona ou assíncrona, mas sem necessariamente criar uma nova thread. A criação de threads é uma técnica de concorrência, não uma característica do paradigma de eventos.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta é a definição correta. processar_mensagem é a função que recebe o evento e dispara os event handlers adequados — ou seja, ela identifica quais handlers estão registrados para aquele tipo de evento e os invoca. É exatamente o papel do dispatcher em um sistema orientado a eventos.

Alternativa D — ❌ Incorreta

Afirma que obter_proxima_mensagem é um event handler. Isso está errado: obter_proxima_mensagem é a função que busca o próximo evento da fila para ser processado — ela faz parte do event loop, não é um handler. O handler é a função que trata o evento, não a que o obtém.

Alternativa E — ❌ Incorreta

Diz que processar_mensagem, internamente, realiza um fork no processo para tratar o evento. Fork é uma operação de criação de processos em sistemas Unix, usada para concorrência entre processos — não é uma característica da programação orientada a eventos. O despacho de eventos não envolve fork; ele apenas chama os handlers registrados.

NÃO CAIA NESSA!

A banca troca os papéis das funções: processar_mensagem é o dispatcher (dispara handlers), não um criador de threads/processos; e obter_proxima_mensagem é o event loop (obtém o evento), não o handler. Confundir quem obtém, quem despacha e quem trata o evento é a armadilha central — com treino, você identifica esses papéis de longe 💪

Gabarito: letra C

Link permanente: /questoes/vu086446