
_START_ARTICLE_
نمط برمجة
_START_SECTION_
نظرة إجمالية
_START_PARAGRAPH_
ان لغات البرمجة يمكنها أن تدعم العديد من الأنماط. على سبيل المثال لا الحصر في لغة C++ أو في باسكال غرضية التوجه Object Pascal يمكن ان يكون البرنامج مكتوب بشكل إجرائي proceduralاو غرضي التوجه  object-oriented بشكل كامل، أو يمكن ان يحوي عناصر من النمطين السابقين._NEWLINE_ان متطلبات تصميم البرمجيات والمبرمجين يقررون كيف يتم استعمال عناصر الأنماط._NEWLINE_في البرمجة غرضية التوجه، المبرمج يمكن ان يفكر  بالبرنامج من منظور انه  يتألف من مجموعة من الأغراض المتفاعلة فيما بينها، بينما في البرمجة الدالية functional programming البرنامج يمكن ان ينظر له على انه سلسلة من تقييمات التوابع المتتالية. عند البرمجة بالحاسب أو أنظمة تملك عدة معالجات فإن نمط   process-oriented يسمح للمبرمجين لينظرو للتطبيقات كما انها مجوعة من العمليات المتزامنة تتصرف وفقاً لبنية المعطيات المشتركة._NEWLINE_النموذج الحاسوبي هو تجريد لنظام حاسوبي، مثل "نموذج فون نيومان" المستخدمة في أجهزة الحواسيب التسلسلية التقليدية. أما بالنسبة للحوسبة التفرعية، فهناك العديد من النماذج الممكنة التي تعكس عادة الوسائل المختلفة التي يمكن من خلال ربط المعالجات. وتعتمد النماذج الأكثر شيوعاً على الذاكرة المشتركة، أو على توزيع الذاكرة مع تمرير الرسائل، أو على مزيج من الاثنين._NEWLINE_ويمكن للغة البرمجة دعم نماذج عديدة، فيمكن استخدام لغات مثل سي++ أو باسكال الكائنية لكتابة برامج إجرائية بحتة، أو كائنية بحتة أو مزيجاً من النمطين. ويرجع قرار اختيار الأنموذج الأنسب إلى مبرمجي ومصممي النظام البرمجي._NEWLINE_في البرمجة كائنية التوجه، ينظر المبرمج إلى البرنامج على أنه مجموعة من الكائنات التي تتفاعل مع بعضها، بينما في البرمجة الوظيفية يمكن اعتبار برنامج على أنه سلسلة من عمليات إيجاد للتوابع. وعندما تبرمج نظم حاسوبية بمعالجات عديدة، تسمح البرمجة العملياتية التوجه (process-oriented programming) للمبرمجين بالنظر إلى البرنامج على أنه مجموعة من العمليات المتزامنة التي تنفذ على مجموعة من بنى المعطيات التي يتم تشاركها بشكل منطقي._NEWLINE_وكما توجد مجموعات مختلفة من المنهجيات في هندسة البرمجيات، توجد مجموعات مختلفة من أنماط البرمجة. حيث صممت بعض اللغات لدعم نمط واحد (مثل Smalltalk التي تدعم البرمجة الكائنية التوجه فقط، وهاسكل التي تدعم البرمجة الوظيفية فقط)، بينما صمم بعضها الآخر لدعم عدة أنماط (مثل باسكال الكائنية، سي++، سي شارب، فيجوال بيسك، بايثون، پيرل وغيرها)._NEWLINE_تعرف أنماط البرمجة أيضاً بالميزات التي تمنعها. فعلى سبيل المثال، لا تسمح البرمجة الوظيفية باستخدام الآثار الجانبية، في حين لا تسمح البرمجة الهيكلية باستخدام العبارة goto. وربما لهذا السبب تنتقد الكثير من الأنماط الجديدة التي تتيح كثيراً من الميزات الإضافية، حيث يفيد منع ميزة معينة في إمكانية إثبات مبرهنة ما حول صحة البرنامج، أو ببساطة فإنه ربما يتيح فهماً أفضل للبرنامج.
_START_SECTION_
اللغات متعددة أنماط البرمجة
_START_PARAGRAPH_
اللغة متعددة أنماط البرمجة هي لغة تدعم أكثر من نمط برمجي واحد، يعرّف تيموثي بَد مصمم لغة البرمجة Leda هذه اللغة بقوله: "تكمن فكرة لغة البرمجة متعددة أنماط البرمجة في توفير إطار عمل يتيح للمبرمج العمل بأساليب متعددة بحيث يدمج بحرية بنى تتبع لأنماط برمجة مختلفة". وبالتالي فإن الهدف من تصميم لغات كهذه هو السماح للمبرمج باستخدام الأداة الأفضل للقيام بالمهمة المطلوبة على اعتبار أنه لا يوجد نمط برمجي واحد قادر على إيجاد أفضل الحلول لكافة المشاكل أو أكثرها فعالية دائماً._NEWLINE_على سبيل المثال توفر لغة #C نمطاً برمجياً أمرياً وآخراً غرضي التوجه بالإضافة إلى دعمها البرمجة الوظيفية إلى حد ما عبر التوابع غير المسماة واستنباط الأنماط والاستعلامات المدمجة باللغة (بالإنجليزية: Language Integrated Query). توفر لغات أخرى مثل لغة #F وScala وظيفية شبيهة لتلك الموجودة في #C إضافة إلى دعم كامل للبرمجة الوظيفية (بما فيها ميزة الكاريينغ (بالإنجليزية: Currying) ومطابقة النماذج وأنماط البيانات الجبرية والتقييم الكسول والعودية الذيلية والثبوتية (بالإنجليزية: immutability) وغيرها). إن لغة البرمجة Oz هي مثال صارخ عن تعددية أنماط البرمجة إذ أنها تشتمل على أنماط برمجة منطقية ووظيفية وغرضية التوجه وتدفق معطيات متوازي بالإضافة إلى أنماط أخرى. استغرق تصميم لغة البرمجة Oz عشر سنوات تم خلالها التوفيق بين أنماط برمجة مختلفة في لغة واحدة.
_START_SECTION_
تاريخ أنماط البرمجة
_START_PARAGRAPH_
في بداية ظهور الحاسوب كانت البرامج مرتبطة جدا بالعتاد ولذلك استخدمت الكود الثنائي (بالإنجليزية: Binary code)، وقد كان هذا نمط برمجة منخفض المستوى لشدة ارتباطه بالعتاد._NEWLINE_لتسهيل البرمجة تم تطوير لغة التجميع التي تعتبر أيضاً نمطاً منخفض المستوى في البرمجة (وإن كانت جيلاً ثانياً) إلا أنها قدمت بعض الخصائص الموجودة في البرمجة الوظيفية مثل استخدام الماكرو._NEWLINE_التطور التالي كان بظهور لغات البرمجة التي تستخدم البرمجة الوظيفية، والتي سميت لغات برمجة عالية المستوى. مثل: فورتران._NEWLINE_ظهرت بعد ذلك لغات البرمجة التي تدعم البرمجة كائنية التوجه. مثل: سي++.