البرمجة بالإجراءات Procedural Programming

نشره زائر (لم يتم التحقق) في

يمكن أن تستخدم البرمجة بالإجراءات أحياناً كمرادف للبرمجة بالأوامر imperative programming (تحديد الخطوات التي يجب أن يتخذها الرنامج من أجل الوصول إلى هدف منشود)، لكنها من الممكن أيضاً أن تشير (كما في هذه المقالة) إلى نموذج من نماذج البرمجة، مشتق من البرمجة المهيكلة structured programming، ويستند إلى مفهوم استدعاء الإجراء procedure call. الإجراءات، وتعرف أيضاً بالروتينات، والروتينات الفرعية، والطرق، أو الدوال (ينبغي عدم الخلط بينها وبين الدوال الرياضية، لكنها مشابهة لتلك المستخدمة في البرمجة بالدوال functional programming) تحوي ببساطة سلسلة من الخطوات الحسابية التي ينبغي إتمامها. من الممكن أن يتم استدعاء أي إجراء معين في أي نقطة أثناء تنفيذ البرنامج، بما في ذلك استدعاؤه من قبل إجراءات أخرى، أو من قبل الإجراء نفسه[1].

من الأمثلة الجيدة على البرامج الإجرائية نواة اللينكس، وجت Git، وخادم أباتشي، وكويك III أرينا.

المحتويات

  1. الإجراءات والوحدات النمطية

  2. مقارنة مع البرمجة بالأوامر

  3. مقارنة مع البرمجة بالكائنات

  4. مقارنة مع البرمجة بالدوال

  5. مقارنة مع البرمجة بالمنطق

 

  1. الإجراءات والوحدات النمطية Procedures and modularity

التعامل بالوحدات النمطية محبّذ بشكل عام، خصوصاً في البرامج الكبيرة والمعقدة.تحدّد المدخلات عادة، إملائياً، في شكل معاملات، وتسلّم المخرجات كقيم معادة.

مفهوم المجال Scoping هو تقنية أخرى تساعد على إبقاء الإجراءات مقسمة بإحكام إلى وحدات نمطية. يمنع هذا المفهوم الإجراءات من الوصول إلى متغيرات إجراءات أخرى (والعكس بالعكس)، بما في ذلك نسخ سابقة من الإجراء نفسه، بدون إذن صريح.

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

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

2. مقارنة مع البرمجة بالأوامر Comparison with imperative programming

لغات البرمجة بالإجراءات هي أيضاً لغات برمجة بالأوامر، لأنها، مثل هذه الأخيرة، تستخدم مرجعيات صريحة إلى حالة بيئة التنفيذ. قد يكون ذلك أي شيء ابتداءً من المتغيرات (التي قد تتعلق بمسجلات المعالج) وحتى شيء مثل المشير الذي يسمى (تيرتل) في لغة البرمجة لوجو.

3. مقارنة مع البرمجة بالكائنات Comparison with object-oriented programming

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

تختلف التسميات بين نموذجي البرمجة، على الرغم من أن لهما دلالات متشابهة.

البرمجة بالكائنات

البرمجة بالإجراءات

طريقة method

دالة function

كائن object

وحدة نمطية module

رسالة message

استدعاء دالة function call

خاصية attribute

متغير variable

 

4. مقارنة مع البرمجة بالدوال Comparison with functional programming

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

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

  • بالمثل، استدعاءات الإجراءات تقابل تطبيق الدوال.

  • الدوال واستدعاءاتها، تفصل بعضها عن بعض في شكل وحدات نمطية بنفس الأسلوب في كلا البرمجتين، باستخدام المعاملات، والقيم المعادة، ومجال المتغيرات.

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

  • بينما تصوّر اللغات الإجرائية تنفيذ البرامج كسلسلة من الأوامر التي قد تغير ضمنياً حالة مشتركة بين أكثر من إجراء، فإن لغات البرمجة بالدوال تصوّر تنفيذ البرامج كحساب نتيجة تعبيرات معقدة يعتمد بعضها على بعض فقط في المعاملات والقيم المعادة. لهذا السبب، تملك برامج الدوال حرية أكبر من ناحية ترتيب تنفيذ الكود، ويمكنن للغات أن توفر القليل من التحكم في الترتيب الذي تنفّذ به الأجزاء المختلفة من البرنامج. (على سبيل المثال، المعاملات في استدعاء إجراء في لغة البرمجة سكيم Scheme، المعدودة من لغات البرمجة بالدوال، تنفّذ بترتيب اعتباطي).

  • لغات البرمجة بالدوال تدعم (وتستخدم بكثافة) دوال الدرجة الأولى first-class functions، والدوال غير المسماة anonymous functions ، والدوال المغلقة closures.

  • تميل لغات البرمجة بالدوال إلى الاعتماد على (تحسينات استدعاءات الذيل tail call optimization)، والدوال ذات المراتب العليا higher-order functions ، عوضاً عن بنى التكرار في البرمجة بالأوامر.

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

يوجد بالفعل القليل من لغات البرمجة بالدوال، محصورة الاستخدام (مثل أنلامدا Unlambda)، تتجنب تعاليم البرمجة المهيكلة بغرض أن تكون البرمجة بها صعبة (ولذا باعثة على التحدي). هذه اللغات هي الاستثناء للأرض المشتركة بين اللغات الإجرائية ولغات الدوال.

5. مقارنة مع البرمجة بالمنطق Comparison with logic programming

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

مع ذلك، فإن تقنية الاستنتاج الرجعي backward reasoning، المنفّذة بواسطة (التحليل الانتقائي الخطي المحدد SLD resolution)، المستخدمة في حل المشاكل في لغات البرمجة بالمنطق مثل برولوج، تعامل البرامج كإجراءات غايتها تقليص الأهداف المنشودة. لذلك، فإن مقاطع من الشكل:

H:- B1, …, Bn.

لها تفسير مزدوج، واحد بصفتها إجراءات

من أجل عرض/حل H، قم بعرض/حل B1 و... و Bn

وآخر بصفتها تضممين منطقي

B1 و... و Bn تقود ضمناً إلى H.

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

هذه ترجمة لمقال ويكيبيديا على الرابط التالي http://en.wikipedia.org/wiki/Procedural_language