الاختلافات وتشابهها بين النماذج البرمجة [مكررة

StackOverflow https://stackoverflow.com/questions/2424269

  •  19-09-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لقد كنت أعمل كمطور خلال السنوات الأربع الماضية، مع 4 سنوات السابقة لدراسة تطوير البرمجيات في الكلية. في 4 سنوات في الصناعة لقد قمت ببعض الأعمال في VB6 (التي كانت مزحة)، ولكن معظمها كان في C # / ASP.NET. خلال هذا الوقت، انتقلت من نموذج إجرائي "علم كائن" إلى نموذج موجه نحو الكائنات.

في الآونة الأخيرة لقد كنت فضوليا حول نماذج البرمجة الأخرى هناك، لذلك اعتقدت أنني سأطلب من المطورين الآخرين آرائهم حول أوجه التشابه والاختلافات بين هذه النماذج، على وجه التحديد إلى OOP؟ في OOP، أجد أن هناك تركيز قوي على العلاقات والتفاعلات المنطقية بين المفاهيم. ما هي إطارات العقل التي يجب أن تكون فيها في النماذج الأخرى؟

هل كانت مفيدة؟

المحلول

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

بيتر فان روي صنع أيضا هذا الملصق المذهل الذي يوضح 34 نموذجا رئيسيا وعلاقاتهم ومواقفهم على محور مختلف. وبعد الملصق هو أساسا نسخة مضغوطة بشكل لا يصدق من CTM. تفسير أكثر شمولا لهذا الملصق موجود في المقال نماذج البرمجة للدمى: ما يجب أن يعرفه كل مبرمج التي ظهرت كفرص في الكتاب النماذج الحسابية الجديدة لموسيقى الكمبيوتر, ، تحريرها G. Assayag و A. Gerzso.

اخر كتاب رائع يوضح العديد من النماذج البرمجة الرئيسية هيكل وتفسير برامج الكمبيوتر بواسطة هارولد أبيلسون وجيرالد جاي سوسمان. وبعد كان هذا الكتاب أساس MIT CS101 لعدة عقود. تم تسجيل دورة تدريسها Abelson و Sussman أنفسهم في تدريب للشركات ل Hewlett-Packard في عام 1986.

الفرق الرئيسي بين CTM و SICP هو أن CTM يوضح معظم النماذج الرئيسية باستخدام لغة تدعمها (معظمها موزعة أوقية، ولكن أيضا بعض الآخرين). SICP Otoh يوضحهم تنفيذ لهم بلغة لا ليس دعمهم أصلا (مجموعة فرعية من المخطط). رؤية اتجاه الكائنات المنفذة في عشرات أو حتى خطوط التعليمات البرمجية هي Friggin "رائع".

يمكنك إيجاد تسجيلات الفيديو ومواد الدورة التدريبية من دورة الربيع 2005 على موقع MIT Opencourware Website. تسجيل آخر بالدورة من مشروع جامعة Arsdigita قصيرة الأجل MIT. وبعد كما تم تدريس SICP في جامعات أخرى، في الواقع يتم تدريسها في بيركلي الآن.

في مذكرة شخصية، كانت تجربتي الخاصة ذلك هل حقا فهم نموذج البرمجة ممكنة فقط

  • نموذج واحد في وقت و
  • في اللغات التي فرض أنت في النموذج

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

إليك بعض المفضلة:

  • اتجاه الكائن بشكل عام: الذات
    • اتجاه الكائنات المستندة إلى النموذج: الذات
    • اتجاه الكائنات المستندة إلى الفصل: Newspeak.
      • اتجاه الكائنات المستندة إلى الفئة ثابتة: إيفيل
    • إرسال متعددة على أساس OO: ديلان
    • وظيفي + اتجاه كائن: سكالا
  • البرمجة الوظيفية: haskell.
    • البرمجة الوظيفية النقية: haskell.
      • البرمجة الوظيفية النقية كسول: haskell.
    • البرمجة الوظيفية الثابتة: haskell.
    • البرمجة الوظيفية الديناميكية: جلب
  • البرمجة الحتمية: لوا
  • البرمجة المتزامنة: كليويور
    • ورسالة المرور البرمجة المتزامنة: erlang.
  • metaprogramming.: مخطط
  • البرمجة الموجهة نحو اللغة: منضدة المجال المتعمد

نصائح أخرى

ها هي بلدي تأخذ:

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

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

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

من ذلك، تختار أو تصميم لغة خاصة بالمجال (DSL)، وذكر مشكلتك في هذه اللغة.

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

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top