البرمجة التصريحية والبرمجة الحتمية

StackOverflow https://stackoverflow.com/questions/1467959

  •  13-09-2019
  •  | 
  •  

سؤال

أنا أدرس اثنين من النماذج الرئيسية للبرمجة والاستجمام التصريحي والضروري. أواجه صعوبة في اتباع البيانات الغامضة التي تم إجراؤها على كتابي المدرسي ويكيبيديا، مثل:

التصريح: - يركز على "ما هو" الكمبيوتر هو القيام به. - خالية من "الآثار الجانبية" - دون تدفق السيطرة

الحتمية: - يركز على "كيف" يجب على الكمبيوتر القيام بذلك. - كيفية القيام بذلك من حيث تسلسل الإجراءات

كيف يمكنك التمييز بين النموذجين البرمجة؟ إذا كنت تستطيع التوسع في البيانات الواردة أعلاه، فستكون مفيدة للغاية.

هل كانت مفيدة؟

المحلول

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

أحد الأشياء الرئيسية التي يجب ملاحظتها هنا هي تدفق التحكم الصريح: في حين, ل, ، و لو. وبعد هذه لن تظهر لغات إعلانية.

نصائح أخرى

البرمجة الضرورة تنفذ البيانات التي قد تتعامل مع دولة أساسية.

بعض البرمجة الحتمية في جاوة:

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>

لا يتحدث عن كيفية بناء كائن العميل، فقط يعلن الأجزاء. كيف يتم تفسير ما ورد أعلاه وتنفيذه هو ما يصل إلى بيئة البرمجة.

HTML ومتصفحات الويب هي أمثلة جيدة جدا لكل نموذج، على التوالي. أتش تي أم أل (و CSS) تصريحي اللغات - أخبر متصفح الويب ماذا او ما للتمييز، ولكن ليس كيف للقيام بذلك. بمعنى آخر، خط رمز مثل <h1>My title</h1> يحكي متصفح الويب ماذا او ما لعرض - علامة رأس مع النص "عنواني" - ولكن الآن كيفية رسمه بالفعل على الشاشة.

متصفح الويب، ومع ذلك، هو مكتوب عموما في صيغة الامر طريقة. يستغرق هذه التعريفات العلامات التعريفية وتوجه بالفعل الكمبيوتر كيف لرسم تلك العناصر على الشاشة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top