Programação de procedimentos

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar

A programação procedural é um paradigma de programação , derivado da programação imperativa , [1] baseado no conceito de chamada de procedimento . Os procedimentos (um tipo de rotina ou sub- rotina ) contêm simplesmente uma série de passos computacionais a serem executados. Qualquer procedimento pode ser chamado em qualquer ponto durante a execução de um programa, inclusive por outros procedimentos ou por ele mesmo. As primeiras grandes linguagens de programação procedural apareceram por volta de 1957-1964, incluindo Fortran , ALGOL , COBOL , PL/I e BASIC . [2] Pascal e Cforam publicados por volta de 1970-1972.

Os processadores de computador fornecem suporte de hardware para programação procedural por meio de um registrador de pilha e instruções para chamar procedimentos e retornar deles. O suporte de hardware para outros tipos de programação é possível, mas nenhuma tentativa foi comercialmente bem-sucedida (por exemplo , máquinas Lisp ou processadores Java ). [ contraditório ]

Procedimentos e modularidade

A modularidade é geralmente desejável, especialmente em programas grandes e complicados. As entradas geralmente são especificadas sintaticamente na forma de argumentos e as saídas são entregues como valores de retorno .

O escopo é outra técnica que ajuda a manter os procedimentos modulares. Impede que o procedimento acesse as variáveis ​​de outros procedimentos (e vice-versa), incluindo instâncias anteriores dele mesmo, sem autorização explícita.

Procedimentos menos modulares, frequentemente usados ​​em programas pequenos ou escritos rapidamente, tendem a interagir com um grande número de variáveis ​​no ambiente de execução , que outros procedimentos também podem modificar.

Devido à capacidade de especificar uma interface simples, de ser autocontida e de ser reutilizada, os procedimentos são um veículo conveniente para fazer trechos de código escritos por diferentes pessoas ou grupos, inclusive por meio de bibliotecas de programação .

Comparação com outros paradigmas de programação

Programação imperativa

As linguagens de programação procedurais também são linguagens imperativas , pois fazem referências explícitas ao estado do ambiente de execução. Isso pode ser qualquer coisa, desde variáveis ​​(que podem corresponder a registradores do processador ) até algo como a posição da "tartaruga" na linguagem de programação Logo .

Muitas vezes, os termos "programação procedural" e "programação imperativa" são usados ​​como sinônimos. No entanto, a programação procedural depende muito de blocos e escopo , enquanto a programação imperativa como um todo pode ou não ter esses recursos. Como tal, as linguagens procedurais geralmente usam palavras reservadas que atuam em blocos, como if, whilee for, para implementar o fluxo de controle , enquanto as linguagens imperativas não estruturadas usam instruções goto e tabelas de ramificação para o mesmo propósito.

Programação orientada a objetos

O foco da programação procedural é dividir uma tarefa de programação em uma coleção de variáveis , estruturas de dados e sub- rotinas , enquanto na programação orientada a objetos é dividir uma tarefa de programação em objetos que expõem comportamento (métodos) e dados (membros ou atributos) usando interfaces. A distinção mais importante é que, enquanto a programação procedural usa procedimentos para operar em estruturas de dados, a programação orientada a objetos agrupa os dois, de modo que um "objeto", que é uma instância de uma classe, opera em sua "própria" estrutura de dados. [3]

A nomenclatura varia entre os dois, embora tenham semântica semelhante:

Processual Orientado a Objeto
Procedimento Método
Registro Objeto
Módulo Classe
Chamada de procedimento Mensagem

Programação funcional

Os princípios de modularidade e reutilização de código em linguagens funcionais práticas são fundamentalmente os mesmos que em linguagens procedurais, pois ambos derivam de programação estruturada . Assim, por exemplo:

  • Os procedimentos correspondem às funções. Ambos permitem a reutilização do mesmo código em várias partes dos programas e em vários pontos de sua execução.
  • Da mesma forma, as chamadas de procedimento correspondem ao aplicativo de função.
  • Funções e seus módulos separados uns dos outros da mesma maneira, pelo uso de argumentos de função, valores de retorno e escopos de variáveis.

A principal diferença entre os estilos é que as linguagens de programação funcionais removem ou pelo menos não enfatizam os elementos imperativos da programação procedural. O conjunto de recursos das linguagens funcionais é, portanto, projetado para suportar a escrita de programas o máximo possível em termos de funções puras :

  • Enquanto as linguagens procedurais modelam a execução do programa como uma sequência de comandos imperativos que podem alterar implicitamente o estado compartilhado, as linguagens de programação funcionais modelam a execução como a avaliação de expressões complexas que dependem apenas umas das outras em termos de argumentos e valores de retorno. Por esta razão, programas funcionais podem ter uma ordem livre de execução de código e as linguagens podem oferecer pouco controle sobre a ordem em que várias partes do programa são executadas. (Por exemplo, os argumentos para uma invocação de procedimento em Scheme são executados em uma ordem arbitrária.)
  • As linguagens de programação funcional suportam (e usam muito) funções de primeira classe , funções anônimas e encerramentos , embora esses conceitos estejam sendo incluídos em linguagens procedurais mais recentes.
  • As linguagens de programação funcionais tendem a depender de otimização de chamada de cauda e funções de ordem superior em vez de construções de loop imperativas.

Muitas linguagens funcionais, no entanto, são de fato impuramente funcionais e oferecem construções imperativas/proceduais que permitem ao programador escrever programas em estilo procedural ou em uma combinação de ambos os estilos. É comum que o código de entrada/saída em linguagens funcionais seja escrito em um estilo procedural.

Existem algumas linguagens funcionais esotéricas (como Unlambda ) que evitam os preceitos de programação estruturada por serem difíceis de programar (e, portanto, desafiadoras). Essas linguagens são a exceção ao terreno comum entre linguagens procedurais e funcionais.

Lógica de programação

Na programação lógica , um programa é um conjunto de premissas e a computação é realizada tentando provar teoremas candidatos. Deste ponto de vista, os programas lógicos são declarativos , focando em qual é o problema, ao invés de como resolvê-lo.

No entanto, a técnica de raciocínio reverso, implementada pela resolução SLD , usada para resolver problemas em linguagens de programação lógica como Prolog , trata os programas como procedimentos de redução de metas. Assim, as cláusulas do formulário:

H :- B 1 , …, B n .

têm uma dupla interpretação, tanto como procedimentos

para mostrar/resolver H , mostrar/resolver B 1 e … e B n

e como implicações lógicas:

B 1 e … e B n implica H .

Programadores de lógica experientes usam a interpretação procedural para escrever programas que são eficazes e eficientes, e usam a interpretação declarativa para ajudar a garantir que os programas estejam corretos.

Veja também

Referências

  1. ^ "Paradigmas de programação" .
  2. ^ "Bem-vindo ao IEEE Xplore 2.0: Uso de linguagens de programação processuais para controlar sistemas de produção". ieeexplore.ieee.org. doi : 10.1109/CAIA.1991.120848 . S2CID 58175293 .  {{cite journal}}:Cite journal requer |journal=( ajuda )
  3. ^ Stevenson, Joseph (agosto de 2013). "Programação procedural vs programação orientada a objetos" . neonbrand . com . Recuperado 2013-08-19 .

Links externos