3.1 Paradigma Estrutural
Nos primórdios da computação, quando o paradigma imperativo era o único conhecido e se programava apenas em linguagens puramente imperativas, tais como Assembly , FORTRAN e COBOL , havia um recurso implementado pelo comando goto, que permitia saltos transferir a execução para qualquer linha específica dos programas. Fazendo uso deste recurso, era possível quebrar a linearidade do código, ou seja, a execução das linhas de código na ordem que foram escritas, o que tornava o software incrivelmente difícil de manter e compreender. Este estilo de programação era conhecido como código espaguete, uma vez que toda estrutura estava toda entrelaçada.
Em 1968 e 1987, Edsger W. Dijkstra e Niklaus Wirth respectivamente, publicaram artigos nos quais defendiam a abolição do goto nas linguagens de programação de alto nível, alegando que o comando induzia a vários erros de programação e promovia práticas ruins, além de tornar extremamente difícil a leitura de programas.
Este movimento deu origem à programação estruturada, que se fundamenta em três estruturas de controle de fluxo de código :
- Estrutura de sequência: na qual um comando é executado após o outro, de forma linear, e, portanto sem o uso de goto;
- Estrutura de decisão: na qual trechos do programa podem ser executados dependendo do resultado de um teste lógico;
- Estrutura de iteração: na qual determinado trecho de código é repetido por um número finito de vezes, enquanto um teste lógico for verdadeiro.
Os exemplos a seguir evidenciam a melhora significativa no fluxo de controle proporcionada pelo paradigma estrutural.
O Exemplo 3 mostra um programa (em pseudocódigo) que lê dois números e imprime o maior entre eles (execução condicional), usando goto. O Exemplo 4 mostra um programa estruturado correspondente, sem o uso de goto.
Exemplo 3:
begin:
read a
read b
if b > a goto impb
print a
goto end
impb:
print b
end:
Exemplo 4:
read a
read b
if b > a
print b
else
print a
O Exemplo 5 mostra um programa (em pseudocódigo) que exibe os números de 1 a 10 (execução iterativa), usando goto. O Exemplo 6 mostra um programa estruturado correspondente, sem o uso de goto.
Exemplo 5:
begin:
x = 1
while:
if x > 10 goto end
print x
x = x + 1
goto while
end:
Exemplo 6:
x = 1
while x <= 10
print x
x = x + 1
end