quinta-feira, fevereiro 05, 2009

O Não Tão Básico do Básico - Paradigmas de Programação - Parte 1

De uma forma informal, podemos dizer que um Paradigma de Programação é um estilo de programação, sugerindo como um programa deve ser estruturado quanto às suas estruturas de dados e controle de fluxo.

O Básico do Controle de Fluxo

Embora os computadores se notabilizem pela rápida e precisa execução de sequências de instruções, o seu poder e flexibilidade vem da sua capacidade de decidir quais instruções serão executadas.

Os computadores atuais seguem a filosofia de programa armazenado no qual as instruções estão armazenadas em memória e um registrador (o contador de programa) aponta para a próxima instrução a executar. Na operação normal este registrador é incrementado a cada instrução executada para apontar para a instrução no endereço seguinte de memória.

Instruções de desvio permitem alterar este comportamento. O exemplo mais simples é o desvio incondicional (conhecido como goto ou jump) que coloca um novo valor no contador de programa, desviando o fluxo de execução para uma outra região da memória. As instruções de desvio condicional prosseguem sequencialmente ou desviam o fluxo em função de alguma condição. A forma como os desvios condicionais são implementados variam um pouco conforme o processador. O mais comum é a instrução definir (de forma absoluta ou relativa) o endereço para o qual o controle será desviado se a condição for verdadeira, mas existem processadores em que todas as instruções podem ser condicionais ou que possuam instruções do tipo skip que pulam a instrução seguinte se a condição for verdadeira (neste caso a instrução seguinte costuma ser um desvio incondicional).

Uma situação recorrente na programação é a necessidade de executar a mesma sequência de instruções em vários pontos do programa. A solução mais simples é repetir esta sequência em cada ponto, mas isto consome memória de forma redundante e dificulta a manutenção do programa. Surge assim a necessidade de uma instrução que desvie o fluxo para uma sequência de instruções (sub-rotina) porém permita retornar ao ponto seguinte à chamada. Existem várias formas de implementar isto, mas a mais usual é utilizar uma pilha para armazenar o endereço de retorno. A maioria dos processadores possui instruções dedicadas para chamar uma sub-rotina salvando o endereço de retorno no topo da pilha (CALL) e para retornar de uma sub-rotina para o endereço que está no topo da pilha (RET). O uso da pilha não somente permite termos vários níveis de sub-rotina como situações em que uma sub-rotina chama a si mesma (recursividade) ou é chamada por uma rotina que ela chamou (o que também causa uma re-entrância).

É em cima destas instruções básicas do processador que as linguagens de alto nível constroem as suas instruções de controle de fluxo, que os programadores usam para implementar os paradigmas de programação.

A seguir: A programação Não Estruturada

Nenhum comentário: