Este artigo não cita fontes confiáveis. (Janeiro de 2011) |
O termo Programação procedural (ou programação procedimental) é às vezes utilizado como sinônimo de Programação imperativa (Paradigma de programação que especifica os passos que um programa deve seguir para alcançar um estado desejado), mas pode se referir (como neste artigo) a um paradigma de programação baseado no conceito de chamadas a procedimento (en: procedure call). Os Procedimentos, também conhecidos como rotinas, subrotinas, métodos, ou funções (que não devem ser confundidas com funções matemáticas, mas são similares àquelas usadas na programação funcional) simplesmente contêm um conjunto de passos computacionais a serem executados. Um dado procedimento pode ser chamado a qualquer hora durante a execução de um programa, inclusive por outros procedimentos ou por si mesmo.
A programação procedural é geralmente uma escolha melhor que a programação sequencial e não estruturada em muitas situações que envolvem uma complexidade média e requerem facilidade de manutenção. Possíveis benefícios são:
- A habilidade de reutilizar o mesmo código em diferentes lugares no programa sem copiá-lo
- Uma forma mais fácil de organizar o fluxo do programa que uma coleção de comandos "goto (programação)" ou "jump" (que podem transformar um programa grande e complicado no assim chamado Código espaguete)
- A habilidade de ser fortemente modular e estruturado
Procedimentos e modularidade
A Modularidade é uma característica geralmente desejável, especialmente em programas grandes e complicados. Ela pode ser alcançada com a utilização de procedimentos com canais de entrada e saída estritamente definidos, usualmente acompanhados de regras claras sobre quais tipos de entrada e saída são permitidos ou esperados. As entradas costumam ser especificadas sintaticamente na forma de argumentos, e as saídas entregues na forma de valores de retorno.
O gerenciamento de escopo é outra técnica que ajuda a manter procedimentos fortemente modulares. Ela impede que o procedimento acesse variáveis de outros procedimentos (e vice-versa), incluindo instâncias anteriores de si mesmo, sem autorização explícita. Isto ajuda a impedir confusões entre variáveis com o mesmo nome sendo utilizadas em locais diferentes, e também que os procedimentos atrapalhem a execução um do outro.
Procedimentos menos modulares, freqüentemente utilizados em programas pequenos ou escritos rapidamente, tendem a interagir com um grande número de variáveis no ambiente de execução, que também podem ser modificadas por outros procedimentos. O fato de que muitas variáveis agem como pontos de contato entre as várias partes do programa é o que o torna menos modular.
Por causa da habilidade de especificar uma interface simples, de serem auto-contidos, e de serem reutilizados, procedimentos facilitam a criação de programas ou bibliotecas de programação por várias pessoas ou grupos diferentes.
(Ver Módulo (programação) e Pacote de Software.)
Comparação com a programação imperativa
Todas (ou pelo menos a maioria) das linguagens procedurais também são linguagens imperativas, pois fazem referências explícitas ao estado do ambiente de execução. Isto pode significar desde variáveis (que podem corresponder aos registradores do processador) a algo como a posição da "tartaruga" na linguagem de programação Logo (que por sua vez pode ser desde um cursor na tela a um dispositivo físico que se move no chão de uma sala).
Algumas formas de programação imperativa, como a programação orientada a objetos não são necessariamente procedurais.
Linguagens de programação procedural
Para ser considerada procedural, uma linguagem de programação deve suportar o conceito de procedimentos, e possuir uma sintaxe para defini-los. Idealmente, ela deve suportar a especificação de tipos de argumentos, variáveis locais, chamadas recursivas e o uso de procedimentos em módulos distintos de um programa. Ela também pode suportar a distinção entre argumentos de entrada e de saída.
O exemplo canônico de uma linguagem de programação procedural é ALGOL. Uma linguagem em que a única forma de procedimento é um método é geralmente considerada orientada a objetos ao invés de procedural, e não será incluída nesta lista. Isto se aplica a C# e Java, mas não a C++.
- Ada
- ALGOL
- BASIC
- C
- ColdFusion
- COBOL
- Component Pascal
- D
- Delphi
- ECMAScript (e.g., ActionScript, DMDScript, JavaScript, JScript)
- Forth
- Fortran
- F
- Go (Golang)
- Lasso
- Linoleum
- Lua
- Maple
- Mathematica
- MATLAB
- Modula-2
- Oberon (Oberon-1 e Oberon-2)
- occam
- M
- Pascal
- Perl
- PHP
- PL/C
- Python
- PL/I
- Rapira
- VBScript
- Visual Basic
Ver também
- Programação funcional
- Programação imperativa
- Programação orientada a objetos
- Paradigma de programação
- Linguagem de programação
- Programação estruturada