Programação imperativa - Imperative programming

Na ciência da computação , a programação imperativa é um paradigma de programação que usa instruções que alteram o estado de um programa . Da mesma forma que o modo imperativo em linguagens naturais expressa comandos, um programa imperativo consiste em comandos para serem executados pelo computador . A programação imperativa se concentra em descrever como um programa opera.

O termo é freqüentemente usado em contraste com a programação declarativa , que enfoca o que o programa deve realizar sem especificar como o programa deve atingir o resultado.

Programação imperativa e procedural

A programação de procedimentos é um tipo de programação imperativa em que o programa é construído a partir de um ou mais procedimentos (também chamados de sub - rotinas ou funções). Os termos são freqüentemente usados ​​como sinônimos, mas o uso de procedimentos tem um efeito dramático em como os programas imperativos aparecem e como são construídos. A programação fortemente procedural, na qual as mudanças de estado são localizadas em procedimentos ou restritas a argumentos explícitos e retornos de procedimentos, é uma forma de programação estruturada . A partir da década de 1960, a programação estruturada e a programação modular em geral foram promovidas como técnicas para melhorar a capacidade de manutenção e a qualidade geral dos programas imperativos. Os conceitos por trás da programação orientada a objetos tentam estender essa abordagem.

A programação procedural pode ser considerada um passo em direção à programação declarativa. Um programador pode frequentemente dizer, simplesmente olhando para os nomes, argumentos e tipos de retorno de procedimentos (e comentários relacionados), o que um procedimento específico deve fazer, sem necessariamente olhar os detalhes de como ele obtém seu resultado. Ao mesmo tempo, um programa completo ainda é imperativo, pois ele corrige as instruções a serem executadas e sua ordem de execução em grande parte.

Justificativa e fundamentos da programação imperativa

A implementação de hardware de quase todos os computadores é imperativa. Quase todo hardware de computador é projetado para executar código de máquina , que é nativo do computador e é escrito no estilo imperativo. A partir dessa perspectiva de baixo nível, o estado do programa é definido pelo conteúdo da memória e as instruções são instruções na linguagem de máquina nativa do computador. Linguagens imperativas de nível superior usam variáveis e declarações mais complexas, mas ainda seguem o mesmo paradigma. Receitas e listas de verificação de processo , embora não sejam programas de computador , também são conceitos familiares que são semelhantes em estilo à programação imperativa; cada passo é uma instrução e o mundo físico mantém o estado. Uma vez que as idéias básicas da programação imperativa são conceitualmente familiares e diretamente incorporadas ao hardware, a maioria das linguagens de computador está no estilo imperativo.

As declarações de atribuição , no paradigma imperativo, realizam uma operação sobre as informações localizadas na memória e armazenam os resultados na memória para uso posterior. Além disso, as linguagens imperativas de alto nível permitem a avaliação de expressões complexas , que podem consistir em uma combinação de operações aritméticas e avaliações de funções , e a atribuição do valor resultante à memória. As instruções de loop (como loops while , loops while e loops for ) permitem que uma sequência de instruções seja executada várias vezes. Os loops podem executar as instruções que contêm um número predefinido de vezes ou podem executá-los repetidamente até que alguma condição seja alterada. As instruções de ramificação condicional permitem que uma sequência de instruções seja executada apenas se alguma condição for atendida. Caso contrário, as instruções são ignoradas e a sequência de execução continua a partir da instrução que as segue. As instruções de ramificação incondicional permitem que uma sequência de execução seja transferida para outra parte de um programa. Isso inclui o salto (chamado de goto em muitos idiomas), switch e o subprograma, sub-rotina ou chamada de procedimento (que geralmente retorna para a próxima instrução após a chamada).

No início do desenvolvimento de linguagens de programação de alto nível , a introdução do bloco permitiu a construção de programas nos quais um grupo de instruções e declarações poderiam ser tratadas como se fossem uma única instrução. Isso, junto com a introdução de sub-rotinas , permitiu que estruturas complexas fossem expressas por decomposição hierárquica em estruturas procedimentais mais simples.

Muitas linguagens de programação imperativas (como Fortran , BASIC e C ) são abstrações da linguagem assembly .

História das linguagens imperativas e orientadas a objetos

As primeiras linguagens imperativas foram as linguagens de máquina dos computadores originais. Nessas linguagens, as instruções eram muito simples, o que tornava a implementação do hardware mais fácil, mas dificultava a criação de programas complexos. FORTRAN , desenvolvido por John Backus na International Business Machines (IBM) a partir de 1954, foi a primeira grande linguagem de programação a remover os obstáculos apresentados pelo código de máquina na criação de programas complexos. FORTRAN era uma linguagem compilada que permitia variáveis ​​nomeadas, expressões complexas, subprogramas e muitos outros recursos agora comuns em linguagens imperativas. As duas décadas seguintes viram o desenvolvimento de muitas outras linguagens de programação imperativas de alto nível. No final dos anos 1950 e 1960, o ALGOL foi desenvolvido para permitir que algoritmos matemáticos fossem mais facilmente expressos e até servissem como a linguagem de destino do sistema operacional para alguns computadores. MUMPS (1966) levou o paradigma imperativo a um extremo lógico, por não ter nenhuma declaração, confiando puramente em comandos, a ponto de tornar os comandos IF e ELSE independentes um do outro, conectados apenas por uma variável intrínseca chamada $ TESTE. COBOL (1960) e BASIC (1964) foram ambas tentativas de fazer a sintaxe de programação parecer mais com o inglês. Na década de 1970, Pascal foi desenvolvido por Niklaus Wirth e C foi criado por Dennis Ritchie enquanto ele trabalhava na Bell Laboratories . Wirth passou a projetar Modula-2 e Oberon . Para as necessidades do Departamento de Defesa dos Estados Unidos , Jean Ichbiah e uma equipe da Honeywell começaram a projetar o Ada em 1978, após um projeto de 4 anos para definir os requisitos para o idioma. A especificação foi publicada pela primeira vez em 1983, com revisões em 1995, 2005 e 2012.

A década de 1980 viu um rápido crescimento no interesse pela programação orientada a objetos . Essas linguagens eram imperativas em estilo, mas acrescentavam recursos para oferecer suporte a objetos . As últimas duas décadas do século 20 testemunharam o desenvolvimento de muitas dessas linguagens. Smalltalk -80, originalmente concebido por Alan Kay em 1969, foi lançado em 1980, pelo Xerox Palo Alto Research Center ( PARC ). Desenho de conceitos em outra language- orientada a objetos Simula (que é considerado o primeiro do mundo linguagem de programação orientada a objeto , desenvolvido na década de 1960) - Bjarne Stroustrup concebido C ++ , uma linguagem orientada a objetos com base em C . O design de C ++ começou em 1979 e a primeira implementação foi concluída em 1983. No final dos anos 1980 e 1990, as linguagens imperativas notáveis ​​que se baseavam em conceitos orientados a objetos eram Perl , lançada por Larry Wall em 1987; Python , lançado por Guido van Rossum em 1990; Visual Basic e Visual C ++ (que inclui o Microsoft Foundation Class Library (MFC) 2.0), lançado pela Microsoft em 1991 e 1993, respectivamente; PHP , lançado por Rasmus Lerdorf em 1994; Java , de James Gosling ( Sun Microsystems ) em 1995, JavaScript , de Brendan Eich ( Netscape ) e Ruby , de Yukihiro "Matz" Matsumoto, ambos lançados em 1995. O .NET Framework (2002) da Microsoft é fundamental em sua essência, pois são suas principais linguagens de destino, VB.NET e C # que são executadas nele; entretanto, o F # da Microsoft , uma linguagem funcional, também roda nele.


Veja também

Notas

Referências

  • Pratt, Terrence W. e Marvin V. Zelkowitz. Linguagens de programação: Design e implementação , 3ª ed. Englewood Cliffs, NJ: Prentice Hall, 1996.
  • Sebesta, Robert W. Concepts of Programming Languages , 3ª ed. Reading, Mass .: Addison-Wesley Publishing Company, 1996.
Originalmente baseado no artigo 'Programação imperativa' de Stan Seibert, da Nupedia , licenciado sob a GNU Free Documentation License .