مرجع
آخر الزيارات

نمط برمجة

1٬431 كلمة•0 مشاهدة•🗒️ منذ 16 ساعة
باختصار: نمط البرمجة أو المقايسة، ، هو أسلوب في برمجة الحاسوب (وثمة فرق بينه وبين المنهجية Methodology، والتي هي أسلوب حل مشاكل محددة تتبع لهندسة البرمجيات). تتناول المقالة 12 قسماً، منها «لغة الآلة Machine Language»، «مثال على كود يعتمد لغة تجميع» و«subroutines روتين فرعي».
المحتويات
  1. لغة الآلة Machine Language
  2. مثال على كود يعتمد لغة تجميع
  3. subroutines روتين فرعي
  4. اللغات متعددة أنماط البرمجة
  5. اللغات المنطقية Logic Languages
  6. لغة التجميع Assembly languages
  7. ظهر فيما بعد اللغات الامرية imperative
  8. نظرة إجمالية
  9. اللغات غرضية التوجه object-oriented languages
  10. اللغات الإجرائية Procedural Languages
  11. بارادايم
  12. تاريخ أنماط البرمجة

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

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

لغة الآلة Machine Language

مثال على لغة الترميز الثنائي

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

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

000000 00001 00010 00110 00000 000000

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

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

مثال على كود يعتمد لغة تجميع

  • مثال على كود يعتمد لغة تجميع (من معالج Mips 3000)
  • MOV AL, 61h
  • Add $s1,$t2,$s2

subroutines روتين فرعي

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

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

اللغات متعددة أنماط البرمجة

ومن ناحية أخرى، مثلًا توفر لغة #C نمطاً برمجياً أمرياً وآخراً غرضي التوجه إلى جانب دعمها البرمجة الوظيفية إلى حد ما عبر التوابع غير المسماة واستنباط الأنماط والاستعلامات المدمجة باللغة . توفر لغات أخرى مثل لغة #F وScala وظيفية شبيهة لتلك الموجودة في #C إضافة إلى دعم كامل للبرمجة الوظيفية (بما فيها ميزة الكاريينغ ومطابقة النماذج وأنماط البيانات الجبرية والتقييم الكسول والعودية الذيلية والثبوتية وغيرها). إن لغة البرمجة Oz هي مثال صارخ عن تعددية أنماط البرمجة إذ أنها تشتمل على أنماط برمجة منطقية ووظيفية وغرضية التوجه وتدفق معطيات متوازي فضلًا عن أنماط أخرى. استغرق تصميم لغة البرمجة Oz عشر سنوات تم خلالها التوفيق بين أنماط برمجة مختلفة في لغة واحدة.

وفي السياق ذاته، اللغة متعددة أنماط البرمجة هي لغة تدعم أكثر من نمط برمجي واحد، يعرّف تيموثي بَد مصمم لغة البرمجة Leda هذه اللغة بقوله: «تكمن فكرة لغة البرمجة متعددة أنماط البرمجة في توفير إطار عمل يتيح للمبرمج العمل بأساليب متعددة بحيث يدمج بحرية بنى تتبع لأنماط برمجة مختلفة». وبالتالي فإن الهدف من تصميم لغات كهذه هو السماح للمبرمج باستخدام الأداة الأفضل للقيام بالمهمة المطلوبة على اعتبار أنه لا يوجد نمط برمجي واحد قادر على إيجاد أفضل الحلول لكافة المشاكل أو أكثرها فعالية دائماً.

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

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

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

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

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

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

لجعل البرمجة أسهل تم تطوير لغة التجميع assembly languages.

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

ومن ناحية أخرى، تتميز لغة التجميع بانها تختلف بحسب المعالج المبرمج وفقه ففي حين نجد تعليمات لمعالج انتل 86x نجد تعليمات لمعالجات مثل Mips «لالمنشأ لأهداف تعليمية», كما نجد ان البرامج المكتوبة بلغة تدعم معالج 32 بت تختلف عن معالج 64 بت بشكل عام.

ظهر فيما بعد اللغات الامرية imperative

كذلك لغة الاستعلامات SQL

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

من جهة ثانية، تعتبر اللغات المنطقية والدالية هي أشهر الامثلة للغات البرمجة التصريحية.

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

نظرة إجمالية

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

علاوةً على ذلك، تقسيم البرنامج إلى عدة أقسام جزئية لتسهيل القراءة واعادة الاستخدام تسمى هذه الاجزاء بعدة أسماء:

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

  • Procedures اجراءات
  • functions توابع
  • methods منهجيات
  • routines روتين

وفي السياق ذاته، الخطوة التالية كانت بتطوير اللغات الإجرائية procedural languages.

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

بارادايم

  • رينج (لغة برمجة)
  • مراجع
  • وصلات خارجية
  • أنماط البرمجة

تاريخ أنماط البرمجة

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

  • ظهرت لاحقًا لغات البرمجة التي تدعم البرمجة كائنية التوجه. مثل: سي++.
  • انظر كذلك
  • برمجة وظيفية
  • سلسلة عملية يحركها الحدث
  • دراكون
  • برمجة كائنية التوجه
  • برمجة جانبية المنحى
  • لغة نمذجة

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

ومن ناحية أخرى، التطور التالي كان بظهور لغات البرمجة التي تستعمل البرمجة الوظيفية، والتي سميت لغات برمجة عالية المستوى. مثل: فورتران.

ما رأيك في هذه المقالة؟

📝 هل في هذه المقالة خطأ؟

إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.