"الطريقة" مقابل"الرسالة" مقابل"الوظيفة" مقابل'؟؟؟'

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

هل هناك فرق بين المصطلحات المختلفة للطرق/الرسائل/إلخ.في البرمجة OO؟هل هذا هو الاختلاف الذي يأتي من لغات البرمجة المختلفة التي تستخدم مصطلحات مختلفة لوصف مفاهيم مماثلة؟

يبدو أنني أتذكر أنه في لغات ما قبل OO، كان يتم التمييز أحيانًا بين "الإجراءات الفرعية" و"الوظائف" بناءً على ما إذا كانت قيمة الإرجاع متوقعة، ولكن حتى في ذلك الوقت، هل كان هذا تمييزًا لكل لغة على حدة؟

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

المحلول

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

نموذج آخر - وظيفي - قد يتضمن أو لا يتضمن فئات من الأشياء، لكن الوظائف هي وحدة العمل الذرية.

في البرمجة المنظمة، كان لديك إجراءات فرعية (لاحظ أن البادئة "sub" تشير إلى البنية).

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

كل ما عليك فعله حتى لا تبدو ساذجًا هو استخدام المصطلحات المستخدمة في مرجع اللغة للغة التي تستخدمها.

نصائح أخرى

الرسالة!=الطريقة!=الوظيفة

في OOP مختلفة أشياء قد يكون مختلفا طُرق ملزمة لنفس رسالة.

على سبيل المثال:سيتم تنفيذ الرسالة "تدوير لليسار n درجة" بشكل مختلف بواسطة كائنات مختلفة مثل الشكل والدائرة والمستطيل والمربع.

رسائل:تتواصل الكائنات من خلال الرسائل.

-الكائنات ترسل وتستقبل الرسائل.

-الرد على الرسالة هو تنفيذ طريقة.

-طريقة الاستخدام هي تحديد المتلقي في وقت التشغيل.

في لغة C++ يتم استدعاء الأساليب والرسائل أعضاء الوظيفة.

أعتقد رسالة يستخدم في الحديث الصغير.

جافا، C# الخ.تميل إلى استخدام طريقة أو طريقة المثيل.

أنا متأكد تمامًا (لكن سريعًا ويكيبيديا يبدو أن الاختيار يؤكد ذلك) أن مصطلحات "تمرير الرسائل" تأتي من مجتمع Smalltalk.أعتقد أنه يعادل إلى حد ما استدعاء الأسلوب.

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

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

أعتقد أن Objective-c يستخدم أسلوب المراسلة هذا.

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

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

مع تطبيقات أخرى مثل Smalltalk، يمكنك رؤية الرسالة التي يتم تمريرها، والكائن المتلقي لديه القدرة على القيام بهذه الرسالة ما يريد.

هناك مكتبات تقع أعلى اللغات مثل C# والتي تحاول استعادة إحساس تمرير الرسالة الصريحة إلى اللغة.لقد قمت بطهي واحدة خاصة بي من أجل المتعة هنا: http://collaborateframework.codeplex.com/

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

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

وإليك بعض التعريفات المبسطة:

الأساليب/الأعمال الفرعية/الفراغات:تنفيذ إجراء

المهام:تنفيذ إجراء وإرجاع قيمة

الأحداث:يتم استدعاؤها عندما يتم التصرف على كائن

معالجات:هي الوظائف/الأساليب التي تتعامل مع الأحداث


ملاحظة:يعد هذا مثالًا مثاليًا لسبب ضرورة دعم SO لعلامات DL/DT/DD.

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

طريقة :مشابهة للوظيفة في اللغات التقليدية

رسالة :على غرار تمرير المعلمة في اللغة التقليدية

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