نماذج البرمجة
| English | العربية |
|---|---|
| paradigm/ˈpærədaɪm/ | نموذج برمجي |
| low-level/ləʊ ˈlevl/ | منخفض المستوى |
| imperative/ɪmˈperətɪv/ | توجيهي |
| declarative/dɪˈklærətɪv/ | تصريح |
| functional/ˈfʌŋkʃənl/ | وظيفي |
| pure functions/pjʊə ˈfʌŋkʃnz/ | دوال نقية |
| logic/ˈlɒdʒɪk/ | منطق |
نفس البرنامج، مكتوب بأربع طرق
- اطلب جميع العملاء في المملكة المتحدة ويكتب مبرمج C حلقة تكرار على مصفوفة. يكتب مبرمج Haskell فلترًا. يكتب مبرمج Prolog قاعدة ويسأل سؤالًا. يكتب مستخدم SQL
SELECT * FROM Customer WHERE Country = 'UK'. - فقط الأول يقول كيف القيام بذلك. والباقي يقولون ماذا هو مطلوب ويتركون الطريقة للجهاز، وهو حر لإعادة ترتيب العمل، أو استخدام فهرس، أو تشغيله على ثمانية أنوية.
- لا يوجد منهما أفضل بشكل عام. الاختلاف يكمن في القرارات التي تسحبها اللغة منك، وهذا بالضبط ما يعنيه النمط البرمجي.
- هذه الدرس هي الأنماط البرمجية التي يسميها المنهج الدراسي: منخفض المستوى، الأمرية والإعلانية.
البرمجة منخفضة المستوى
- البرمجة منخفضة المستوى تعمل قريبًا من الأجهزة الصلبة، في كود الآلة أو لغة التجميع، مع وصول مباشر إلى المسجلات وعناوين الذاكرة والتعليمات الفردية.
- فوائد: أقصى تحكم وسرعة، وأصغر كود ممكن، وهو أمر مهم عندما يكون هناك كيلوبايتات فقط من الذاكرة.
- عيوب: إنه محدد للمعمارية، لذا يجب إعادة كتابته لمعالج مختلف، وهو بطيء الكتابة وصعب الصيانة.
- يستخدم حيث يجب توجيه الأجهزة الصلبة بدقة: تعريفات الأجهزة، البرمج الثابتة، المتحكمات المدمجة، والحلقة التكرارية الداخلية لأنظمة الوقت الفعلي.
- تدرب على التح addressing المباشر وغير المباشر والمؤشر والنسبي في درس لغة التجميع. يظهر تتبع الأمثلة المحلولة لماذا يمكن أن ينتج نفس المعامل نتائج مختلفة.
أي مما يلي صحيح بخصوص البرمجة منخفضة المستوى؟ اختر كل الخيارات المطبقة.
التحكم يُشتَرى بالجهد: لغة التجميع بطيئة الكتابة وصعبة الصيانة، ولهذا تقتصر على التعريفات الثابتة (drivers) والبرامج الثابتة (firmware).
البرمجة الأمرية
- البرمجة الأمرية، المعروفة أيضًا بالإجرائية، هي تسلسل من الأوامر التي تغير حالة البرنامج: assignments (التعيينات)، شروط if، حلقات تكرار واستدعاءات للوحدات الفرعية.
- يحدد المبرمج كيف سيتم حساب النتيجة، خطوة بخطوة. المتغيرات التي تحمل الحالة هي النقطة المحورية.
- إنه نمط Python وC وJava والكود الوهمي، وهو ما يتعلمه الجميع تقريبًا أولاً.

أمر بعد آخر، كل واحد يغير ما يتم تخزينه
تعتمد البرمجة التوجيهية (الإجراءية) على:
الكود التوجيهي يعطي أوامر خطوة بخطوة (تعيينات، حلقات تكرار، مكالمات) تغير الحالة.
البرمجة الإعلانية
- البرمجة الإعلانية تنص على ماذا يجب حسابه، وليس كيف. يقوم وقت التشغيل بحساب الخطوات.
- البرمجة الوظيفية تتركب من دوال نقية، ليس لها آثار جانبية: المدخلات نفسها تنتج دائمًا نفس المخرجات، ولا شيء خارج الدالة يتغير. Haskell وLisp هما المثالان.
- البرمجة المنطقية تنص الحقائق والقواعد، ومحرك الإجابة يجيب عن الاستفسارات بالاستنتاج. Prolog هو المثال.
- SQL هو اللغة الإعلانية التي التقى بها الجميع تقريبًا: الاستعلام ينص على الصفوف المطلوبة، وقاعدة البيانات تقرر كيفية العثور عليها.
معمل مفاهيم البرمجة
صل الأمثلة بالفكرة البرمجية التي تمثلها.
يعني البرمجة التصريحية أنك تحدد:
الكود التصريحي (الوظيفي، المنطقي، SQL) يحدد الهدف؛ ووقت التشغيل يقرر الخطوات.
الدالة الخالصة (البرمجة الوظيفية):
الخالصية تعني عدم وجود آثار جانبية ونتيجة حتمية، مما يجعل الكود الوظيفي سهلاً التحليل.
نماذج البرمجة التصريحية (الوظيفية، المنطقية، SQL) تحدد WHAT للحساب وتترك وقت التشغيل يقرر كيف، بينما الكود التوجيهي يفصل كل خطوة.
استعلام SQL يقول أي الصفوف تريدها، وليس كيفية فحص الجداول — عكس الكود التوجيهي خطوة بخطوة.
الدالة الخالصة تعطي دائماً نفس المخرجات لنفس المدخلات ولا يوجد لها ____.
هذا ما يسمح باختبارها بشكل مستقل، وتشغيلها بالتوازي بأمان وحفظ نتيجتها في الذاكرة المؤقتة.
مثال محلول: تحديد النمط البرمجي
FOR i ← 1 TO n : total ← total + A[i] : NEXT i— أمرية: تسلسل من الأوامر يغير الحالة المحتفظ بها فيtotal.SELECT Name FROM Customer WHERE Country = 'UK'— إعلانية: ينص على الصفوف المطلوبة وليس كيف البحث عنها.LDD 200 : ADD 201 : STO 202— منخفض المستوى: تعليمات تجميع تعالج مواقع الذاكرة مباشرة.parent(X, Y) :- father(X, Y).— إعلانية، تحديدًا البرمجة المنطقية: قاعدة يستنتج منها المحرك الإجابات.- سمِّ النمط البرمجي و ميزة الكود التي تدل عليه.
طابق كل جزء مع نمطه.
أوامر تغير الحالة، تصريح بما هو مطلوب، تعليمات تعالج الذاكرة، وقاعدة للاستنتاج.
مقارنتهم
| النمط البرمجي | ينص | القوة | الاستخدام النموذجي |
|---|---|---|---|
| منخفض المستوى | تعليمات دقيقة | تحكم، سرعة، حجم | تعريفات الأجهزة، البرمج الثابت |
| أمرية | كيف، خطوة بخطوة | مباشر ومألوف | برمجة عامة |
| إعلانية | المطلوب | موجز، وقت التشغيل يحسن الأداء | استفسارات، قواعد، تحويل البيانات |
- اللغات الحديثة تمزج بينها. Python أمرية لكن بها ميزات وظيفية؛ SQL موجود داخل برامج كُتبت بأسلوب أمرية. النمط البرمجي هو أسلوب، وليس حاجزًا.
طابق كل نموذج مع فكرته الجوهرية.
التوجيهي يحدد كيف خطوة بخطوة؛ OO يحاكي الكائنات؛ الوظيفي يستخدم دوال خالصة؛ التصريح يحدد الهدف.
ما هو الفرق الجوهري بين البرمجة التوجيهية والتصريحية؟
لأن النسخة التصريحية لا تحدد الطريقة، قد يعيد وقت التشغيل ترتيب العمل، أو استخدام فهرس، أو موازنته.
مثال محلول: لماذا الآثار الجانبية مهمة
- الدالة النقية ليس لها آثار جانبية. اشرح فائدة واحدة.
- نظرًا لأن المدخلات نفسها تعطي دائمًا نفس المخرجات ولا شيء خارجي يتغير، يمكن اختبار الدالة النقية بعزل: بدون إعدادات مسبق، وبدون حالة مخفية لتنظيمها.
- يمكن أيضًا تشغيلها في متوازي بأمان، لأن الاستدعاءين لا يمكن أن يتداخلا مع بعضهما البعض، ويمكن تخزين نتيجتها في ذاكرة مؤقتة.
- التناقض: روتين أمرية تقوم بتحديث متغير عالمي تتصرف بشكل مختلف اعتمادًا على ما تم تشغيله قبلها، وهذا ما يجعل مثل هذه الأخطاء صعبة الكشف.
علامات ضائعة
- الأمرية تقول كيف؛ والإعلانية تقول ماذا. هذا التناقض هو إجابة معظم الأسئلة هنا.
- عيب منخفض المستوى هو أنه محدد للمعمارية وصعب الصيانة، وليس لأنه "قديم".
- الدالة النقية ليس لها آثار جانبية وتعطي نفس المخرجات للمدخلات نفسها. كلا الجزأين مطلوبان.
- SQL إعلانية. هو المثال الذي يستخدمه الامتحان أكثر من غيره، لذا اعرفه.
لقد فهمت الأمر
- النمط البرمجي هو أسلوب لهيكلة الكود، واللغات الحديثة تمزج عدة أنماط
- منخفض المستوى: كود الآلة أو التجميع، وصول مباشر للأجهزة الصلبة، أقصى تحكم وسرعة، لكنه محدد للمعمارية وصعب الصيانة
- أمرية: تسلسل من الأوامر يغير الحالة، يحدد كيف؛ نمط Python وC والكود الوهمي
- إعلانية: تنص على ماذا مطلوب وتترك الطريقة لوقت التشغيل، كما في البرمجة الوظيفية بـ الدوال النقية، والبرمجة المنطقية بالحقائق والقواعد، وSQL