È possibile dire che la differenza tra programmazione imperativa e programmazione dichiarativa è solo nel livello di astrazione?

4

È possibile dire che la differenza tra programmazione imperativa e programmazione dichiarativa è solo nel livello di astrazione? Cioè dove la programmazione imperativa dirà "rompere le uova, metterle nel piatto, girare il forno a 180 gradi, ecc.", un linguaggio dichiarativo dirà solo "cucinami uova"?

    
posta Olzhas Yessenbayev 12.04.2018 - 14:25
fonte

3 risposte

6

Le lingue dichiarative non sono necessariamente un livello di astrazione più alto. Non sono magici - non riescono a capire da soli come cucinare le uova se non lo dici come (a meno che non ci sia una libreria per questo, ma sarebbe l'imperativo per alcuni). Devi ancora fornire le stesse informazioni di cui avrebbe bisogno un programma imperativo. La differenza sta nel modo in cui l'informazione è espressa.

Imperativo: una sequenza di passaggi (eventualmente con rami, loop, ecc.). "rompi le uova, mettile nel piatto, accendi il forno a 180 gradi, ecc.",

Dichiarativo: l'obiettivo finale, descritto in modo sufficientemente dettagliato: "uova che sono state collocate (senza gusci) in un forno su un piatto a 180 gradi"

Un esempio più realistico sarebbe come disegnare una linea:

Imperativo:

graphics.setPen(Color.Red, Size.Big)
a = new Point(100,100);
b = new Point(200, 200);
graphics.drawLine(a, b);

dichiarativo:

Line:
  start: Point(100,100)
  end: Point(100,100)
  color: Red
  size: Big

Il livello di astrazione è più o meno lo stesso (i concetti - linea, punto, colori - sono gli stessi e viene fornita la stessa quantità di informazioni), ma l'imperativo è espresso come una sequenza di passaggi, mentre il dichiarativo esprimere l'obiettivo finale.

In pratica, tuttavia, le lingue dichiarative più conosciute sono linguaggi specifici di dominio di alto livello come SQL, CSS, HTML ecc. mentre i linguaggi di livello generale di livello inferiore come C, Java ecc. sono generalmente imperativi. Esso appare dichiarativo è più adatto al DSL di alto livello, mentre l'imperativo è più adatto alla programmazione generica.

    
risposta data 12.04.2018 - 19:29
fonte
3

No, il programma dichiarativo direbbe "uova cotte".

Proprio dove vuoi andare, non come arrivarci. Solo un risultato, nessun comando.

    
risposta data 12.04.2018 - 14:40
fonte
0

La programmazione dichiarativa sta fondamentalmente nascondendo blocchi di implementazione e fornendo costrutti compositivi per utilizzare queste implementazioni ... creativamente .

Pensa a HTML e amp; CSS, il browser "conosce" gli imperativi / comandi / passaggi per il rendering di regole e tag CSS, nel dominio dei disegni sullo schermo.

Piuttosto che Abstraction, è più una tecnica di incapsulamento:

<egg class="broken oven-cooked medium"/>
    
risposta data 13.04.2018 - 12:44
fonte

Leggi altre domande sui tag