Programação procedural ou programação procedimental é um paradigma de programação que se baseia em procedimentos, que são executados numa sequência.[1] Ela é derivada da programação imperativa, mas acrescentando procedimentos (em inglês, procedure calls), de forma a organizar o código em blocos que possam ser reutilizados.[2]

Os procedimentos, também conhecidos como rotinas,[3] sub-rotinas,[4] métodos,[5] ou funções[4] 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, ser uma forma mais fácil de organizar o fluxo do programa que uma coleção de comandos "goto" ou "jump" (que podem transformar um programa extenso e complexo num código espaguete), e a habilidade de ser fortemente modular e estruturado.

Procedimentos e modularidade

editar

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, frequentemente 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.

Comparação com a programação imperativa

editar

A maioria das linguagens procedurais também são linguagens imperativas,[carece de fontes?] 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

editar

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++.

Ver também

editar

Referências

  1. «Procedural programming - Contemporary trends in software development - CCEA - GCSE Digital Technology (CCEA) Revision». BBC Bitesize (em inglês). Consultado em 14 de dezembro de 2022 
  2. Mueller, John Paul (29 de outubro de 2019). Programação Funcional Para Leigos. [S.l.]: Alta Books. p. 13. ISBN 9788550813509 
  3. Rohit, Khurana. Object Oriented Programming with C++, 2nd Edition (em inglês). [S.l.]: Vikas Publishing House. p. 2. ISBN 9789325975644 
  4. a b «Procedural programming». Isaac Computer Science (em inglês). Consultado em 14 de dezembro de 2022 
  5. Rai, Laxmisha (20 de maio de 2019). Programming in C++: Object Oriented Features (em inglês). [S.l.]: Walter de Gruyter GmbH & Co KG. ISBN 9783110593846 

Ligações externas

editar
Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.

📚 Artikel Terkait di Wikipedia

Oberon (linguagem de programação)

language support for component-oriented real-time programming». Proceedings: Fifth International Workshop on Object-Oriented Real-Time Dependable Systems

Eiffel (linguagem de programação)

apresentado ao público na primeira The International Conference on Object Oriented Programming, Systems, Languages and Applications (OOPSLA) em outubro de 1986

Object-PL/SQL

Stack Overflow. Consultado em 15 de abril de 2012  «Oracle's Object-Oriented Features». etutorial.org. Consultado em 16 de abril de 2012  Benett, 2002:144

Programação funcional

(outubro de 2005). Generalized Algebraic Data Types and Object-Oriented Programming. OOPSLA. San Diego, Califórnia: ACM. ISBN 9781595930316. doi:10.1145/1094811

Lista de redes de televisão dos Estados Unidos

the NBCUniversal Television Distribution programming library, as well as lifestyle programming and feature films. Cozi TV traces its history to the 2010

Atribuição (computação)

International(UK). 594 páginas. ISBN 0-13-247925-7  WIENER, Richard (1996). An Object-Oriented Introduction to Computer Science Using Eiffel. Upper Saddle River, New

Dívida tecnológica

under the debt load of an unconsolidated implementation, Object-oriented programming or otherwise. — Ward Cunningham, 1992, O Sistema de Gestão de Portifólio

Produto de Kronecker

Nuno (2013). «Typing linear algebra: A biproduct-oriented approach». Science of Computer Programming. 78 (11): 2160–2191. Bibcode:2013arXiv1312.4818M