Questão de Programação — Programação Orientada a Objetos — VUNESP 2024
Programação›Programaçã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.Nesse contexto, pode-se afirmar que
Amsg corresponde a uma mensagem de e-mail.
Bprocessar_mensagem, internamente, inicia uma nova thread para tratar o evento recebido.
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.
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 💪