Domanda

sto studiando due paradigmi principali di programmazione, dichiarativa e paradigma imperativo. Sto avendo un momento difficile dopo le dichiarazioni ambigue fatte sul mio libro di testo e wikipedia, come ad esempio:

dichiarativa: - si concentra su "che cosa" il computer è quello di fare. - è priva di "effetti collaterali" - senza flusso di controllo

imperativo: - si concentra su "come" il computer dovrebbe farlo. - come farlo in termini di sequenza di azioni

come è possibile differenziare i due paradigmi di programmazione? Se si potesse espandere le dichiarazioni rilasciate in precedenza, sarà molto utile.

È stato utile?

Soluzione

SQL è il linguaggio dichiarativo classico: si dice "guardare a questo tavolo, e mi danno tutte le righe che soddisfano questi criteri" (e nella vita reale si utilizza unisce, elenchi di selezione, qualunque cosa, ma è la stessa istruzione di base) . Come notato sopra, questa dichiarazione dice al computer ciò che si vuole, non è come farlo.

Internamente, il sistema di database è implementato in un linguaggio come C, e la query SQL sarà tradotto nelle seguenti fasi imperativi:

while (another row to process)
    read row from disk
    for (every test)
        if (test fails)
            continue to next row
    add row to result-set

Una delle cose principali da notare qui è il flusso di controllo esplicito: , mentre , per e se . Questi non verranno visualizzati in linguaggi dichiarativi.

Altri suggerimenti

programmazione imperativa sequenziale esegue le istruzioni che possono manipolare uno stato sottostante.

Alcuni programmazione imperativa in 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");

Si noti che se si fa il sopra fuori uso, che si tradurrebbe in un'eccezione di puntatore nullo:

Customer customer = null;
customer.setFirstName("Foo");   // the customer variable is still null at this point
customer = new Customer();   // too late!

Programmazione dichiarativa non ha uno stato o un ordine, solo dichiarazioni.

Ecco un semplice esempio - questo frammento di codice XML potrebbe essere considerata dichiarativa:

<NewCustomers>
  <Customer>
    <Id>1</Id>
    <FirstName>Bob</FirstName>
    <LastName>McBob</LastName>
  </Customer>
</NewCustomers>

Non parlare di come l'oggetto cliente otterrà costruito, basta dichiara le parti. Come sopra viene interpretato ed eseguito è fino a l'ambiente di programmazione.

HTML e web browser sono abbastanza buoni esempi di ogni paradigma, rispettivamente. HTML (e CSS) sono dichiarativi lingue - vi dico il browser web cosa per marcare, ma non come per farlo. In altre parole, una riga di codice come <h1>My title</h1> dice al browser web cosa per visualizzare - un tag di intestazione con il testo "Il mio titolo" - ma ora come dipingere in realtà sullo schermo <. / p>

Il browser web, tuttavia, è generalmente scritto in un imperativo maniera. Ci vogliono queste definizioni dichiarativi markup e in realtà istruisce il computer come per disegnare gli elementi sullo schermo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top