DEV Community

Yuri Peixinho
Yuri Peixinho

Posted on

Programação Estruturada

Introdução

A Programação Estruturada surgiu no final dos anos 1960 e início dos anos 1970 como uma reação direta ao chamado "código espaguete" — programas repletos de saltos incondicionais (GOTO) que tornavam o fluxo de execução quase impossível de seguir. O marco histórico é o artigo de Edsger Dijkstra, "Go To Statement Considered Harmful" (1968), que propôs abandonar o GOTO em favor de estruturas de controle previsíveis.

Princípios centrais

O paradigma se apoia no Teorema da Programação Estruturada, segundo o qual qualquer algoritmo pode ser expresso combinando apenas três estruturas de controle:

  1. Sequência — instruções executadas uma após a outra, na ordem em que aparecem.
  2. Seleção — desvios condicionais (if/else, switch), que escolhem um caminho entre alternativas.
  3. Repetição — laços (for, while, do-while) que repetem um bloco enquanto uma condição for satisfeita.

Além disso, o paradigma incentiva a modularização: dividir o programa em procedimentos e funções menores, cada um com uma responsabilidade clara, e o design top-down, em que o problema é refinado de uma visão geral para os detalhes de implementação.

Exemplo

csharp

// Exemplo de Programação Estruturada em C#
static decimal CalcularTotalComDesconto(decimal valorUnitario, int quantidade)
{
    decimal desconto = 0;

// Seleção
    if (quantidade >= 10)
    {
        desconto = 0.20m;
    }
    else if (quantidade >= 5)
    {
        desconto = 0.10m;
    }

    decimal total = valorUnitario * quantidade * (1 - desconto);

// Repetição
    for (int i = 1; i <= quantidade; i++)
    {
        Console.WriteLine($"Processando item{i} de{quantidade}...");
    }

    return total; // Sequência
}
Enter fullscreen mode Exit fullscreen mode

Note que todo o fluxo é linear e previsível: entra-se no topo da função, cada linha executa em ordem, e as únicas variações de caminho vêm de if e for — nunca de um salto arbitrário.

Vantagens e limitações

  • Vantagens: legibilidade, facilidade de depuração, raciocínio linear, base sólida para qualquer outro paradigma (structured programming é praticamente universal — até código funcional e orientado a objetos usa sequência/seleção/repetição dentro de funções e métodos).
  • Limitações: conforme o sistema cresce, o compartilhamento de estado mutável entre muitas funções torna a manutenção difícil — problema que os paradigmas seguintes tentam resolver de formas diferentes.

Linguagens representativas: C, Pascal, Fortran (versões modernas), e qualquer linguagem no nível de suas funções/procedimentos.

Top comments (0)