نمط برمجة

(تم التحويل من Programming paradigm)
وسيم أبو زينة
ساهم بشكل رئيسي في تحرير هذا المقال

نمط البرمجة (بالإنجليزية: Programming paradigm‏) هو أسلوب في برمجة الحاسوب (وثمة فرق بينه وبين المنهجية Methodology ، والتي هي أسلوب حل مشاكل محددة تتبع لهندسة البرمجيات). تختلف أنماط البرمجة في المفاهيم والتجريدات التي تستخدمها لتمثيل عناصر برنامج (كالكائنات والتوابع والمتحولات والقيود وغيرها) وخطوات العمل والحساب (كالتعيين وبنى التحكم والإيجاد).

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

نظرة إجمالية

ان لغات البرمجة يمكنها أن تدعم العديد من الأنماط. على سبيل المثال لا الحصر في لغة C++ او في باسكال غرضية التوجه Object Pascal يمكن ان يكون البرنامج مكتوب بشكل إجرائي proceduralاو غرضي التوجه object-oriented بشكل كامل , او يمكن ان يحوي عناصر من النمطين السابقين .

ان متطلبات تصميم البرمجيات والمبرمجين يقررون كيف يتم استعمال عناصر الانماط .

في البرمجة غرضية التوجه , المبرمج يمكن ان يفكر بالبرنامج من منظور انه يتألف من مجموعة من الاغراض المتفاعلة فيما بينها , بينما في البرمجة الدالية functional programming البرنامج يمكن ان ينظر له على انه سلسلة من تقييمات التوابع المتتالية . عند البرمجة بالحاسب او انظمة تملك عدة معالجات فإن نمط process-oriented يسمح للمبرمجين لينظرو للتطبيقات كما انها مجوعة من العمليات المتزامنة تتصرف وفقاً لبنية المعطيات المشتركة .

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

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

في البرمجة كائنية التوجه، ينظر المبرمج إلى البرنامج على أنه مجموعة من الكائنات التي تتفاعل مع بعضها، بينما في البرمجة الوظيفية يمكن اعتبار برنامج على أنه سلسلة من عمليات إيجاد للتوابع. وعندما تبرمج نظم حاسوبية بمعالجات عديدة، تسمح البرمجة العملياتية التوجه (process-oriented programming) للمبرمجين بالنظر إلى البرنامج على أنه مجموعة من العمليات المتزامنة التي تنفذ على مجموعة من بنى المعطيات التي يتم تشاركها بشكل منطقي.

وكما توجد مجموعات مختلفة من المنهجيات في هندسة البرمجيات، توجد مجموعات مختلفة من أنماط البرمجة. حيث صممت بعض اللغات لدعم نمط واحد (مثل Smalltalk التي تدعم البرمجة الكائنية التوجه فقط، وهاسكل التي تدعم البرمجة الوظيفية فقط)، بينما صمم بعضها الآخر لدعم عدة أنماط (مثل باسكال الكائنية، سي++، سي شارب، Visual Basic، بايثون، پيرل وغيرها).

تعرف أنماط البرمجة أيضاً بالميزات التي تمنعها. فعلى سبيل المثال ، لا تسمح البرمجة الوظيفية باستخدام الآثار الجانبية، في حين لا تسمح البرمجة الهيكلية باستخدام العبارة goto. وربما لهذا السبب تنتقد الكثير من الأنماط الجديدة التي تتيح كثيراً من الميزات الإضافية، حيث يفيد منع ميزة معينة في إمكانية إثبات مبرهنة ما حول صحة البرنامج، أو ببساطة فإنه ربما يتيح فهماً أفضل للبرنامج.


أنماط البرمجة

لغة الآلة Machine Code

لغة الآلة Machine Language هي اللغة البرمجية الوحيدة التي تفهمها وحدة المعالجة المركزية cpu مباشرة بدون وسائط .وهي من لغاة البرمجة المتدنية المستوى low level programming language .تعتبر لغة الآلة من لغات البرمجة الاولية primitive فهي تمثل اخفض مستوى (من ناحية قربه من العتاديات hardware) برمجي يمكن للمبرمج التعامل معه .

إن البرامج المبرمجة وفق لغات البرمجة المترجمة compiled يتم نقل الرماز المصدري الخاص بها الى لغة الآلة بينما البرامج المبرمجة بلغات مفسرةinterpreted لا تمثل بلغة الآلة.

يجب عدم الخلط بين لغة الآلة وبين bytecode التي تنفذ من قبل مفسر interpreter.

لقد تم اعتماد نظام الاعداد الثنائي عن غيرها من انظمة الاعداد لترميز لغة الآلة نظراً لسهولة تمثيل حالتين في الدارات الإلكترونية on,off التي تقابل 1و 0

مثال على لغة الترميز الثنائي 000000 00001 00010 00110 00000 000000

لغة التجميع Assembly languages

لجعل البرمجة اسهل تم تطوير لغة التجميع assembly languages. ان لغة التجميع هي لغة برمجة من المستوى المنخفض مخصصة لبرمجة اجهزة الحاسب ,المعالجات الصغرية , المايكروكونترولر microcontrollers والدارات المتكاملة .IC integrated circuits.

تعتمد هذه اللغة مبدأ استبدال العديد من تعليمات المعالج الثنائية بتعليمة معينة حرفياً symbolic وذلك بهدف اساسي جعل البرنامج قابل للقراءة من قبل المبرمجين على الرغم من ذلك لم تلغ لغة التجميع عمل لغة الآلة وانما هي تطوير لمقروئية لغة الآلة .

تتميز لغة التجميع بانها تختلف وفقاً للمعالج المبرمج وفقه ففي حين نجد تعليمات لمعالج انتل 86X نجد تعليمات لمعالجات مثل Mips "لالمنشأ لأهداف تعليمية", كما نجد ان البرامج المكتوبة بلغة تدعم معالج 32 بت تختلف عن معالج 64 بت بشكل عام .

تعتبر لغة التجميع ذات مستوى منخفض ,ايضاً على الرغم من ذلك إلا انه تعتبر الجيل الثاني لانماط البرمجة .

=مثال على كود يعتمد لغة تجميع مثال على كود يعتمد لغة تجميع (من معالج Mips 3000)

         MOV AL, 61h
     Add $s1,$t2,$s2

اللغات الإجرائية Procedural Languages

الخطوة التالية كانت بتطوير اللغات الإجرائية procedural languages . في الحقيقة هذا النمط يملك عدة اسماء فالتسمية الرئيسية لهذا النمط من انماط لغات البرمجة يدعى Procedural programming اي لغة اجرائية كونها تعتمد الاجرائيات ويمكن ان تدعى ب imperative programming اي لغة امرية وذلك من كونها لغة امرية بحيث تعتمد على تلقين الحاسب الحل خطوة بخطوة كما قد نجد تسمية structured programming اي برمجة هيكلية بحيث تعتمد على مفهوم استدعاء الاجرائيات او كما هي معروفة بالروتين .

تعتمد هذه اللغة عدة مبادىء :

  • تقسيم البرنامج الى عدة اقسام جزئية لتسهيل القراءة واعادة الاستخدام تسمى هذه الاجزاء بعدة اسماء :
    • Procedures اجراءات
    • functions توابع
    • methods منهجيات
    • routines روتين
    • subroutines روتين فرعي
  • توصيف حل المشكلة خطوة بخطوة والتي تعد من مساوىء هذا النمط حيث يجب على المبرمج ان يقوم بحل المشكلة المتناولة بنفسه وليس الحاسب .

هذا النمط كان يعتبر الجيل الثالث من انماط البرمجة.

اللغات غرضية التوجه object-oriented languages

ظهر فيما بعد مفهوم اللغات غرضية التوجه object-oriented languages في هذا المفهوم يفرض ان المعطيات والتوابع يجب ان تكون مغلفة وعندما نريد استعمالها يجب ان يكون لدينا غرض من هذا العنصر كي نستعمل التوابع والمعطيات

.الطريقة الوحيدة تتيح للمستهدم الوصول الى العناصر هي عن طريق توابع الغرض العامة فقط .

لقد كانت لغات البرمجة غرضية التوجه هي تطوير للغات الإجرائية ولا تختلف اختلافاً جذرياً إلا ببعض المفاهيم كالتغليف والوراثة .... الخ

اللغات الأمرية Imperative Languages

ظهر فيما بعد اللغات الامرية imperative نمط اللغات الامرية هي نمط من انماط لغات البرمجة التي تصف الحوسبة وفق تعليمات تغير حالة البرنامج . تعبر اللغات الامرية عن الاوامر لفعل عمل محدد . كما انها تصف سلسلة من التعليمات كي يؤديها الحاسب .

يستخدم مصطلح البرمجة الامرية لوصف مصططلح مضاد للبرمجة التصريحية declarative programming الني نعبر عن ما يراد الوصول إليه من دون شرح كيفية الوصول إليه .

تعتبر اللغات المنطقية والدالية هي اشهر الامثلة للغات البرمجة التصريحية . كذلك لغة الاستعلامات SQL


اللغات المنطقية Logic Languages

ظهر نمط برمجة هو نمط البرمجة المنطقية الذي يصف الحوسبة كآلة اتومات للاستنتاج وذلك وفقاً لمعطيات ومعارف متوافرة تدعى بالحقائق .

تستخدم هذه اللغات قواعد الاستلال inference لإيجاد الجواب المراد الحصول عليه .


انظر أيضا

قراءات إضافية

  • Hennessy, John L. Computer Organization and Design. The Hardware/Software Interface. Morgan Kaufmann Publishers. ISBN 1-55860-281-X. Unknown parameter |coauthors= ignored (|author= suggested) (help)
  • Tanenbaum, Andrew S. Structured Computer Organization. Prentice Hall. ISBN 0-13-020435-8.
  • Brookshear, J. Glenn. Computer Science: An Overview. Addison Wesley. ISBN 0321387015.


. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

المصادر والهوامش