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.

Foi ú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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top