2009-09-23 6 views
3

Я изучаю две основные парадигмы программирования, декларативной и императивной парадигмы. Мне тяжело следовать неоднозначным заявлениям, сделанным в моем учебнике и википедии, например:декларативное программирование и императивное программирование

declarative: - основное внимание уделяется «чему» компьютер. - свободен от «побочных эффектов» - без управления потоком

императива: - фокусируется на «как» компьютер должен сделать это. - как это сделать с точки зрения последовательности действий

Как бы вы разделили две парадигмы программирования? Если вы могли бы расширить свои заявления, сделанные выше, это будет очень полезно.

ответ

7

SQL - классический декларативный язык: вы говорите: «Посмотрите на эту таблицу и дайте мне все строки, соответствующие этим критериям» (и в реальной жизни вы используете объединения, выбираете списки, что угодно, но это то же самое основное утверждение). Как вы отметили выше, этот оператор сообщает компьютеру, что вы хотите, а не как это сделать.

Внутренне, система баз данных реализована на языке, как C, и ваш SQL запрос будет переведен на следующие императивных шаги:

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

Одна из ключевых вещей, чтобы отметить здесь явное управление потоком : , а, для и если. Они не будут отображаться на декларативных языках.

3

HTML и веб-браузеры являются довольно хорошими примерами каждой парадигмы, соответственно. HTML (и CSS) - декларативный языков - вы сообщаете веб-браузеру , что, чтобы разметить, но не как сделать это. Другими словами, строка кода, например <h1>My title</h1>, сообщает веб-браузеру , что для отображения - тег заголовка с текстом «Мой заголовок» - но теперь, как на самом деле нарисовать его на экране.

Веб-браузер, однако, обычно записывается в императиве образом. Он принимает эти декларативные определения разметки и фактически инструктирует компьютер как, чтобы нарисовать эти элементы на экране.

5

Императивное программирование последовательно выполняет инструкции, которые могут манипулировать базовым состоянием.

Некоторые императивное программирование в 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"); 

Обратите внимание, что если вы выше из строя, это приведет к нулевому исключением указателя:

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

декларативного программирования не имеет государство или заказ, только декларации.

Вот простой пример - это XML-фрагмент можно считать декларативным:

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

Это не говорит о том, как объект клиент получит встроенную, только декларирует части. Как это интерпретируется и выполняется выше, зависит от среды программирования.

Смежные вопросы