Programação imperativa: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
m Desambiguando ligações a ADA com DisamAssist.
m +correções automáticas (v0.38/3.1.35)
Linha 1:
{{Wikificação|biografia=sim|data=abril de 2015}}
{{Sem-fontes|biografia=sim|data=janeiro de 2011| angola=| arte=| Brasil=| ciência=| geografia=| música=| Portugal=| sociedade=|1=|2=|3=|4=|5=|6=}}
 
{{Info/Cientista
|nome = John von Neumann
|imagem = JohnvonNeumann-LosAlamos.jpg
|tamanho = 200px
|legenda = Neumann, à época de [[Laboratório Nacional de Los Alamos|Los Alamos]] (c. [[1943]]-[[1945]]), primeiro laboratório de [[armas nucleares]] dos [[Estados Unidos]]
|nome_nativo =
|data_nascimentonascimento_data = {{dni|28|12|1903|sem idade|lang=br|sem idade}}
|local_nascimentonascimento_local = [[Budapeste]]
|data_mortemorte_data = {{falecimento e idademorte|8|2|1957|28|12|1903|lang=br}}
|local_mortemorte_local = [[Washington, D.C.]]
|causa_morte =
|pais_de_residencia =
|nacionalidade = {{HUNb}} [[Hungria|Húngaro]]<br /> {{USAb}} [[Estadunidenses|Estadunidense]]
|etnicidade =
|campo = [[Matemática]]
|instituicao_trabalho =
|alma_mater =
|tese = 1926
|orientador = [[Lipót Fejér]]
|orientado = {{nowrap|[[Israel Halperin]]}}, {{nowrap|[[Donald Bruce Gillies]]}}, {{nowrap|[[John Patterson Mayberry]]}}
|conhecido_por = {{nowrap|[[Álgebra abeliana de von Neumann]]}}, {{nowrap|[[Álgebra de von Neumann]]}}, {{nowrap|[[Arquitetura de von Neumann]]}}, {{nowrap|[[Universo de von Neumann]]}}
|influenciado =
|premio = {{nowrap|[[Prêmio Bôcher|Prêmio Bôcher (1938)]]}}, {{nowrap|[[Prêmio Enrico Fermi|Prêmio Enrico Fermi (1956)]]}}
|conjuge =
|religiao =
|assinatura =
|notas =
}}
 
Na [[Ciência da Computação]], '''programação imperativa''' é um [[paradigma de programação]] que descreve a [[computação]] como ações, enunciados ou comandos que mudam o estado (variáveis) de um programa. Muito parecido com o comportamento imperativo das linguagens naturais que expressam ordens, programas imperativos são uma sequência de comandos para o computador executar. O nome do [[paradigma]], Imperativo, está ligado ao tempo verbal imperativo, onde o programador diz ao computador: faça isso, depois isso, depois aquilo... Este paradigma de programação se destaca pela simplicidade, uma vez que todo ser humano, ao se programar, o faz imperativamente, baseado na ideia de ações e estados, quase como um programa de computador.
 
[[FicheiroImagem:Máquina de Turing.png |thumb|Máquina de Turing|esquerda|x1000px]]
 
O fundamento da programação imperativa é o conceito de [[Máquina de Turing]], que nada mais é que uma abstração matemática que corresponde ao conjunto de funções computáveis.
 
A Máquina de Turing foi aprimorada por [[John Von Neumann]] a uma arquitetura de computadores que fundamenta os computadores construídos até hoje. Isso explica, em parte, o sucesso das linguagens que seguem esse [[paradigma]] em relação às demais. Nesta arquitetura( usada hoje nos microcomputadores comercializados), tanto os dados como os programas são armazenados na mesma memória, e a CPU que processa as instruções, é separada da memória. Dessa forma, os dados e instruções devem ser transportados da memória para a CPU e os resultados das operações realizadas na CPU devem ser devolvidos para a memória.
 
As linguagens imperativas estruturadas sofrem no entanto de uma falta de flexibilidade dadas o caráter sequencial das instruções. Contrariamente a programação declarativa, a programação imperativa introduz um paradigma de programação que descreve a [[computação]] em termos de um estado de um programa e ações que modificam esse estado, tal como o modo imperativo nas linguagens naturais (faladas e escritas) expressa comandos para perfazer ações, as linguagens imperativas expressam uma sequencia de comandos para um computador efetuar.
 
[[FicheiroImagem:arquiteturavn.png|thumb|leftesquerda|Visão simplificada da arquitetura de Von Neumann.]]
 
As linguagens de programação imperativa contrastam com outros tipos de linguagem, tais como linguagens de programação [[programação declarativa|declarativa]], [[programação funcional|funcional]] e [[programação lógica|lógica]]. Linguagens de programação funcional, como por exemplo [[Haskell (linguagem de programação)|Haskell]], não são uma sequência de afirmações e não possuem, por consequência, um estado global como as linguagens imperativas. Linguagens de programação lógica, como exemplo [[Prolog]], frequentemente definem "o que" é para ser computado, mais do que "como" computar, como seria normal em uma linguagem imperativa.
 
Em linguagens puramente imperativas, como [[Assembly]], é muito fácil o programador criar códigos de difícil leitura, pois esse tipo de linguagem possui o que se chama de saltos (jumps) em sua estrutura. Estes saltos funcionam da seguinte forma: o programador define uma marcação (label) no código e depois, a partir de qualquer parte do programa, ele pode executar um desvio de fluxo de execução (salto) para aquela marcação. Pode ser que à primeira vista isso não tenha problema, contudo, na depuração do código, o programador fica em apuros com tantas marcações e saltos, pois isso dificulta o entendimento do fluxo de execução do programa.
Linha 61 ⟶ 60:
 
== Origens ==
 
Linguagens imperativas têm uma história rica e variada. As primeiras [[linguagens de programação]] imperativas eram linguagens de máquina, com instruções simples mas de construção complexa. Instruções de máquina foram logo substituídos com linguagens de montagem que são essencialmente transliterações de código de máquina.
 
[[Fortran]] (FORmula TRANslation) foi a primeira linguagem de alto nível para ganhar ampla aceitação. Ele foi projetado para aplicações científicas e contou com uma notação algébrica, tipos, subprogramas, e entrada/saída formatada. Foi implementado em 1956 por [[John Backus]] na [[IBM]] especificamente para a máquina [[IBM 704]]. Execução eficiente foi uma grande preocupação, consequentemente, sua estrutura e comandos têm muito em comum com linguagens de montagem. [[FORTRAN]] ganhou ampla aceitação e continua a ser largamente utilizado na comunidade de computação científica.
 
[[COBOL]] (COmmon Business Oriented Language) foi projetada (por um comitê de representantes de fabricantes de computadores e do Departamento de Defesa), por iniciativa do Departamento de Defesa dos EUA em 1959 e implementado em 1960. COBOL caracteriza registros, arquivos e dados fixos decimais. Ele também forneceu uma linguagem natural como sintaxe para que os programas sejam capazes de ser lido e entendido por não programadores. COBOL ganhou ampla aceitação na comunidade de [[processamento de dados]] e continua a ser largamente utilizado.
Linha 72 ⟶ 70:
[[ALGOL 60]] (ALGorithmic Oriented Language) foi concebido em 1960 por um comitê internacional para uso em resolução de problemas científicos. Ao contrário FORTRAN foi concebido de forma independente de uma aplicação, uma escolha que conduzem a uma linguagem elegante. A descrição do ALGOL 60 introduziu a notação [[BNF]] para a definição de [[sintaxe]] e é um modelo de clareza e completude. Embora ALGOL 60 não conseguiu ganhar grande aceitação, introduziu estrutura de bloco, instruções de controle estruturados e procedimentos recursivos no paradigma de programação imperativa.
 
* [[FORTRAN]] (1956) -> variáveis com nome, subprogramas, expressões complexas
* [[ALGOL]] (1960) -> maior facilidade de expressar algoritmos matemáticos
* [[COBOL]] (1960)
* [[BASIC]] (1964) -> sintaxe mais próxima do inglês
* [[PASCAL]] (1970)
* [[C (linguagem de programação)|C]] (1970)
Linha 81 ⟶ 79:
 
== Histórico ==
 
* Computador Hipotético
* Introdução à Programação
Linha 91 ⟶ 88:
 
== Características Principais da Linguagem Imperativa ==
 
As linguagens imperativas também são chamadas de procedurais e se trata do modelo mais antigo de todos, a execução é baseada em comandos e armazenamento de dados. O paradigma imperativo foi predominante nas LP, pois são mais fáceis de traduzir para uma forma adequada para execução da máquina. Um programa imperativo é mantido em variáveis que são associadas com localizações de memória que correspondem a um endereço e um valor de armazenamento. O valor da variável pode ser acessado direta ou indiretamente, e pode ser alterado através de um comando de atribuição. O comando de atribuição introduz uma dependência de ordem no programa, ou seja, o valor da variável pode se modificar antes e depois do comando e isso garante a sequencia de instruções.
 
As funções de linguagem de programação imperativa são descritas como algoritmos que especificam como processar um intervalo de valores, a partir de um valor de domínio, com uma série de passos descritos. A repetição é usada para processar os valores e laços para varrer uma sequencia de localizações de memória (vetores, por exemplo), ou para acumular valor nas variáveis.
 
* Variáveis: modelam as células de memória
* Comandos de atribuição: são baseados nas operações de transferências de dados e instruções.
* Execução sequencial de procedimentos
* Forma interativa de repetição
 
== Como Funciona a Programação Imperativa ==
 
A essência da programação imperativa e também da Máquina de Turing se resume a três conceitos:
 
Linha 113 ⟶ 109:
 
== Modelo Computacional do Paradigma Imperativo ==
 
Programas centrados no conceito de um estado (modelado por variáveis) e ações (comandos) que manipulam o estado, são programas projetados em um paradigma imperativo, paradigma esse que também é denominado de procedural, por incluir subrotinas ou procedimentos como mecanismo de estruturação. Foi o primeiro paradigma a surgir e ainda é o dominante.
 
O paradigma imperativo está baseado na idéiaideia de um estado que sofre modificações durante a [[computação]]. O estado é representado por um conjunto de associações de identificadores (variáveis globais e locais ativas do programa) em valores. A diferença fundamental com relação ao paradigma funcional é que esta associação é dinâmica, sendo constantemente modificada durante a execução de um programa. As linguagens imperativas oferecem uma variedade de comandos cuja execução envolve aspectos de controle, mas essencialmente modificação do estado do programa.
 
O elemento central de um programa imperativo é o comando, que pode ser primitivo (como atribuição, leitura e escrita) ou composto, como seqüência, condicional e iteração. Um importante mecanismo de estruturação das linguagens imperativas é o procedimento, que, como uma função, pode ser parametrizado, mas tem como corpo um comando, ao invés de uma expressão. Em geral, um programa em uma linguagem imperativa deixa de ser uma expressão e passa a ser um comando. A figura abaixo, ilustra o modelo computacional do paradigma imperativo.
 
== Elementos da Programação Imperativa ==
 
Os principais elementos da programação imperativa são:
 
Linha 130 ⟶ 124:
 
== Técnicas em Programação Imperativa ==
 
* Modularidade dos Algoritmos (Programação estruturada)
* Modularidade das Estruturas de dados (Tipos abstratos de dados)
Linha 136 ⟶ 129:
 
== Vantagens ==
 
* Eficiência (embute o modelo [[Von Neumann]])
* Paradigma dominante e bem estabelecido
Linha 144 ⟶ 136:
 
== Desvantagens ==
* Possui difícil legibilidade e facilita introdução de erros em sua manutenção
 
* Descrições demasiadamente profissional focaliza o "como" e não o "quê"
* Possui difícil legibilidade e facilita introdução de erros em sua manutenção
* Descrições demasiadamente profissional focaliza o "como" e não o "quê"
* Relacionamento indireto com a E/S (indução a erros/estados)
* Ainda se foca em como a tarefa deve ser feita e não em o que deve ser feito.
Linha 152 ⟶ 143:
 
== Linguagens de programação ==
 
Alguns exemplos de linguagens de programação que baseiam-se no modelo imperativo:
 
Linha 163 ⟶ 153:
* [[Cobol]]
* [[Fortran]]
* [[Pascal (linguagem de programação)|Pascal]]
* [[Python]]
* [[Lua (linguagem de programação)|Lua]]
Linha 169 ⟶ 159:
 
== Leitura Recomendada ==
 
Pratt, Terrence W. e Marvin V. Zelkowitz. Línguas De Programação: Projeto e execução. ó ed. Penhascos De Englewood, N.J.: Prentice Salão, 1996.
 
Sebesta, Robert W. Conceitos de línguas de programação. ó ed. Leitura, Massa.: Addison-Wesley Publishing Companhia, 1996.
 
== Ver Tambémtambém ==
 
* [[Paradigma de programação]]
* [[Linguagem de programação]]
* [[Programação funcional]]
* [[Programação procedural]]
* [[Programação orientada a objetos]]
* [[Programação estruturada]]
 
== ReferênciasLigações Externasexternas ==
1. TimeLine [http://embed.verite.co/timeline/?source=0AjCODbGJQpJSdDdBRTJpTlZWUEpzelE1bnc2cEJLYUE&font=Bevan-PotanoSans&maptype=toner&lang=en&height=650]
 
1. TimeLine http://embed.verite.co/timeline/?source=0AjCODbGJQpJSdDdBRTJpTlZWUEpzelE1bnc2cEJLYUE&font=Bevan-PotanoSans&maptype=toner&lang=en&height=650
 
 
{{esboço-software}}
{{Portal3|Biografias}}
 
[[Categoria:Paradigmas de programação]]