segunda-feira, fevereiro 09, 2009

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

A programação Não Estruturada

No começo havia o caos... Bem, não exatamente.

Os primeiros computadores eram programados diretamente em linguagem de máquina, por falta de outra opção. Posteriormente surgiu a linguagem Assembly onde cada instrução normalmente corresponde diretamente a uma instrução de linguagem de máquina. Nos anos 50 surgiram as primeiras linguagens de alto nível, particularmente FORTRAN e COBOL.

Em todos estes casos as estruturas de controle de fluxo refletiam de forma bem direta as instruções de máquina, com predomínio do GOTO como forma de desvio do fluxo. Isto se refletia na forma de representação da lógica de programas (antes ou depois da programação): os fluxogramas.


O fluxograma acima representa o algoritmo de Euclides para cálculo do maior divisor comum. O seu entendimento é bastante simples, assim como a sua tradução para uma linguagem de programação como BASIC:
10 INPUT "M: ", M
20 INPUT "N: ", N
30 R = M MOD N
40 IF R = 0 THEN GOTO 80
50 M = N
60 N = R
70 GOTO 30
80 PRINT "MDC = "; N
90 STOP
Uma consequência deste paradigma é a liberdade total no desvio de fluxo, o que permite criar coisas mais complexas como:
6000 REM
6010 REM MOVIMENTACAO
6020 REM
6030 N9=N
6040 N8=0
6050 GOSUB 7000
6060 IF N <> 1 THEN N0=N : A0=A1
6070 PRINT
6080 I = M(A1)
6090 IF I = -2 THEN I=N9
6100 IF I<500 i="I-500" j="O" n="I" n="I-100" t="-1" n="N+1" t =" -1" n="I-200+P" n="I-200"> 2 THEN GOSUB 8000
6420 IF N <> 1 THEN 6500
6430 REM BECO SEM SAIDA. SO SERA POSSIVEL SAIR POR ONDE SE ENTROU
6440 FOR J=1 TO 6
6450 M(J)=2
6460 NEXT J
6470 M(7-A0)=N0
6500 REM ANOTA A VISITA
6530 W(N)=1
6540 N8=N
6600 IF M(1) <> -2 THEN RETURN
6610 REM MOVIMENTO FORCADO, COM DESTINO ALEATORIO
6620 I=M(6)
6630 J=-1
6640 IF M(4) > 100*RND(J) THEN I=M(5)
6650 J=-1
6660 IF M(2) > 100*RND(J) THEN I=M(3)
6670 REM TEMOS UM NOVO DESTINO - REPETIR TUDO !
6680 GOTO 6090
Se isto (código "espaguete") parece um absurdo para o programador moderno, é importante lembrar que esta técnica tem o potencial de deixar o código mais compacto, algo que podia ser importante nos tempos de memória curta. Alguns programadores mais "talentosos" apelavam até para truques como desviar para o meio de uma instrução.

Com o passar do tempo, os computadores foram ficando mais rápidos e com mais memória e as dificuldades de programação e manutenção geradas pela programação não estruturada passaram a ser inaceitáveis, levando a manifestos como o famoso "Go To Statement Considered Harmful" .

A seguir: A Programação Estruturada

Nenhum comentário: