programação declarativa e programação imperativa
-
13-09-2019 - |
Pergunta
Estou estudando dois principais paradigmas de programação, declarativa e paradigma imperativo. Eu estou tendo um momento difícil após as declarações ambíguas feitas em meu livro e wikipedia, tais como:
declarativa: - incide sobre "o que" o computador está a fazer. - é livre de "efeitos colaterais" - sem fluxo de controle
imperativo: - concentra-se em "como" o computador deve fazê-lo. - como fazê-lo em termos de sequência de ações
como você diferenciar os dois paradigmas de programação? Se você pudesse expandir as declarações feitas acima, será muito útil.
Solução
SQL é a linguagem declarativa clássico: você diz "olhar para esta tabela, e dá-me todas as linhas que atendem a esses critérios" (e na vida real você usa junta, listas de seleção, seja qual for, mas é a mesma instrução básica) . Como você observou acima, esta declaração informa ao computador o que você quer, não como fazê-lo.
Internamente, o sistema de banco de dados é implementada em uma linguagem como C, e sua consulta SQL serão traduzidos para as etapas seguintes imperativas:
while (another row to process)
read row from disk
for (every test)
if (test fails)
continue to next row
add row to result-set
Uma das principais coisas a notar aqui é o fluxo de controle explícita: enquanto , para e se . Estes não aparecerá em linguagens declarativas.
Outras dicas
programação imperativa executa sequencialmente declarações que podem manipular um estado subjacente.
Alguns programação imperativa em java:
Customer customer = null;
// first create a customer and have the variable reference it
customer = new Customer();
// the state of the customer variable has changed
// set the id on whatever object is *currently* being referenced by the variable
customer.setId(1);
// the state of the Customer object has changed
customer.setFirstName("Bob");
customer.setLastName("McBob");
Note que se você fizer o acima de ordem, isso resultaria em uma exceção de ponteiro nulo:
Customer customer = null;
customer.setFirstName("Foo"); // the customer variable is still null at this point
customer = new Customer(); // too late!
A programação declarativa não tem um estado ou ordem, apenas declarações.
Aqui está um exemplo simples - esse trecho xml poderia ser considerado declarativa:
<NewCustomers>
<Customer>
<Id>1</Id>
<FirstName>Bob</FirstName>
<LastName>McBob</LastName>
</Customer>
</NewCustomers>
Ele não fala sobre como o objeto cliente receberá construído, apenas declara as partes. Como o acima é interpretado e executado é até o ambiente de programação.
HTML e navegadores são muito bons exemplos de cada paradigma, respectivamente. HTML (e CSS) são declarativa línguas - você dizer ao navegador web o para marcar, mas não como para fazê-lo. Em outras palavras, uma linha de código como <h1>My title</h1>
informa ao navegador web o para exibir - uma tag de cabeçalho com o texto "O meu título." - mas agora como realmente pintá-lo na tela
O navegador web, no entanto, é geralmente escrito em um imperativo maneira. Leva essas definições marcação declarativa e realmente instrui o computador como para desenhar os elementos na tela.