2.1 - O Que é a Programação Procedimental?
A programação procedimental é um paradigma de programação que organiza o código em funções ou procedimentos. Cada função executa uma tarefa específica, e o programa é estruturado para seguir uma sequência de comandos pré-definida. Neste paradigma, o fluxo de execução é controlado por estruturas como loops (for, while) e condicionais (if, else), de forma linear e sequencial.
Num sistema procedimental, o controlo do programa é tipicamente centrado no programador, que define exatamente o que o programa faz em cada passo. O utilizador tem menos controlo, uma vez que o programa segue um conjunto de instruções predefinidas, como acontece num ambiente de linha de comandos.
2.2 - O Que é a Programação por Eventos?
A programação por eventos, por outro lado, é um paradigma mais dinâmico, onde o fluxo do programa é controlado pelas interações do utilizador ou por eventos externos. Em vez de seguir um caminho linear de execução, o programa aguarda e responde a eventos, como cliques do rato, toques no ecrã, ou a interação com uma janela.
No contexto de uma interface gráfica, discutida no Capítulo 1, os componentes gráficos como janelas, botões, menus e ícones estão sempre prontos para receber eventos. Quando o utilizador interage com esses elementos, o programa processa essas ações e responde em tempo real. O comportamento da aplicação é, assim, governado por eventos, o que oferece uma experiência mais interativa e fluida.
2.3 - Diferenças Fundamentais entre Programação Procedimental e Programação por Eventos
A principal diferença entre os dois paradigmas reside na forma como o programa é controlado:
- Programação Procedimental: O programador define a sequência de ações, e o programa segue um fluxo linear. Cada comando é executado de forma sequencial, e o utilizador apenas interage quando o programa o permite. Por exemplo, um programa de linha de comandos que recebe uma sequência de instruções, como "Abrir ficheiro", "Editar ficheiro", e "Guardar ficheiro".
- Programação por Eventos: O utilizador tem o controlo sobre as ações, e o programa responde a esses eventos conforme eles ocorrem. O fluxo de execução é mais imprevisível, uma vez que depende de quando e como o utilizador interage com a interface. Um exemplo clássico é um editor de texto gráfico, onde o utilizador pode clicar em vários botões, menus e ícones a qualquer momento, e o programa reage imediatamente.
Um aspeto importante da programação por eventos é que a aplicação está constantemente a "escutar" os eventos (por exemplo, um clique num botão) e responde de acordo com o que foi programado. Isto contrasta com a programação procedimental, onde o programa só age de forma reativa após o utilizador inserir um comando ou dado.
2.4 - O Ciclo de Vida de um Programa por Eventos
Na programação por eventos, o ciclo de vida do programa é controlado por um loop de eventos, que está em execução durante todo o tempo de vida da aplicação. Este loop monitoriza a interação do utilizador com a interface gráfica e responde conforme necessário.
O ciclo de vida de um programa por eventos pode ser descrito nos seguintes passos:
- Inicialização: O programa configura a interface gráfica e coloca-se "à escuta" de eventos, aguardando interações do utilizador.
- Escuta de Eventos: O programa entra num ciclo contínuo onde "escuta" eventos como cliques do rato, teclas pressionadas ou movimentos no ecrã.
- Processamento de Eventos: Quando um evento é detetado (por exemplo, um clique num botão), o programa executa a função ou ação associada a esse evento. Esta ação pode abrir uma nova janela, modificar dados ou fornecer feedback ao utilizador.
- Fim: O ciclo continua até que um evento de encerramento ocorra (por exemplo, o utilizador fecha a aplicação).
Este modelo torna a aplicação mais flexível, permitindo ao utilizador decidir quando e como interagir, ao contrário da programação procedimental, onde o fluxo é rigidamente controlado pelo programador.
2.5 - Exemplo Prático de Programação por Eventos
Para ilustrar a diferença entre os dois paradigmas, vejamos um exemplo de como funcionaria uma aplicação simples de contagem (incrementar um número) nos dois modelos.
Programação Procedimental:
int contador = 0;
for (int i = 0; i < 10; i++) {
contador++;
printf("Valor do contador: %d\n", contador);
}
Neste exemplo, o programa segue uma sequência predefinida de incrementar o valor do contador 10 vezes e imprimir o resultado. O utilizador apenas observa o resultado final e não pode interagir com o processo.
Programação por Eventos:
// Interface gráfica com um botão para incrementar o contador
int contador = 0;
onButtonClick() {
contador++;
updateLabel("Valor do contador: " + contador);
}
Neste caso, o programa espera que o utilizador clique num botão. Cada vez que o botão é clicado, o contador é incrementado e o valor atualizado é exibido. O utilizador controla o número de vezes que o contador é incrementado, e o programa responde conforme os eventos ocorrem.
2.6 - Como a Programação por Eventos se Integra com a Interface Gráfica
Como vimos no Capítulo 1, a interface gráfica é composta por janelas e componentes visuais como botões, menus e campos de texto. Estes componentes são essenciais na programação por eventos, pois servem como os "pontos de interação" que geram os eventos.
Cada componente visual (por exemplo, um botão) está associado a um evento específico (como um clique), e a aplicação responde a esses eventos de forma dinâmica. Isto permite criar uma experiência de utilizador mais rica, onde cada interação gera uma resposta visual imediata, como a abertura de uma nova janela ou a execução de uma ação específica.
Ao programar aplicações gráficas, o programador define o comportamento dos componentes visuais em resposta aos eventos do utilizador. Assim, a programação por eventos torna-se uma extensão natural do design de interfaces gráficas, uma vez que o foco está na interação em tempo real com os componentes visuais.
2.7 - Conclusão
A programação por eventos é fundamental para criar aplicações gráficas interativas e responsivas, onde o utilizador tem controlo sobre o fluxo de execução da aplicação. Ao contrário da programação procedimental, que segue um caminho linear, a programação por eventos coloca o utilizador no centro da ação, permitindo-lhe interagir com o programa em tempo real através de janelas e componentes visuais. Este paradigma é amplamente utilizado no desenvolvimento de software moderno, especialmente em sistemas operativos gráficos e aplicações web.
Quiz do Capítulo 2
- Explique a principal diferença entre a programação procedimental e a programação por eventos.
- O que é um ciclo de vida numa aplicação baseada em eventos?
- Como é que a programação por eventos se relaciona com a interface gráfica do utilizador (GUI)?
- Descreva um exemplo simples onde a programação por eventos melhora a interatividade de uma aplicação gráfica.