سؤال

كما قرأت من خلال إجابات Stackoverflow والأسئلة التي أحصل عليها الانطباع بأنه يتم إجراؤه من ضرورة بطبيعته.

ولكن ليس OO مجرد وسيلة لتسوية التعليمات البرمجية والبيانات في كائنات عالمية حقيقية؟

إذا كان الأمر كذلك، فلماذا نتخلص من نموذج آخر على مستوى أدنى للعمل في مثل هذه المنصة؟

إن IOW، نظام نوع عام يعتمد على الكائنات غير القابلة للتغيير افتراضيا هو الطريقة التي ستعملها لغة أولى وظيفية، ونظام نوع عام قائم على الكائنات يمكن أن يكون قابل للتغيير افتراضيا هو عالم اللغات الحتمية.

أو أنا أفتقد شيئا تماما؟

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

المحلول

رقم. وبعد OO والضروبة هي اثنين من المفاهيم المتعامدة.

علي سبيل المثال:

  • نظام كائن LISP المشترك هو مثال على LISP OO وربما نظام كائن أكثر تعقيدا.
  • OCAML هي لغة وظيفية مع نظام كائن ونظام وحدة دعم المنظمة الموجهة نحو الكائن
  • Scala هي لغة وظيفية مع نظام OO مرن للغاية
  • يسمح لك Haskell بكتابة رمز موجه نحو الكائن باستخدام تعدد الأشكال العليا

هناك الكثير من الطرق المختلفة لتكون موجهة نحو الكائن.

نصائح أخرى

معظم لغات OO حتمية، لكنك يمكن استخدامها بأسلوب وظيفي إلى حد ما. تجلس بعض اللغات الوظيفية في إطار عمل OO (F # على .NET هو المثال الأكثر وضوحا) تداول بعض "النقاء" من أجل الحصول على إطار ضخم للاستخدام عند الاقتضاء.

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

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

الدولة والإجراءات والتسلسل هي مفاهيم من البرمجة الإجرائية وغير موجودة في البرمجة الوظيفية غير الأودية (يتم استخدام المانز لتنفيذ الولاية والعمل والتسلسل باللغات الوظيفية النقية Haskell، والتي لن يكون لها هذه المفاهيم).

أن ننظر إليها من منظور مختلف، معظم الناس يحبون التفكير بالارتياك (وليس في recursions أو RPN). من هذا يتبع أن معظم اللغات ستكون حتمية.

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

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

2 النماذج البرمجة الرئيسية هي نموذج تصريح, ، حيث يكتب مبرمج العلاقات المجردة (وبالتالي يقول المترجم ماذا او ما يريد)، و النموذج الضروري, ، حيث يكتب مبرمج الخوارزميات (وبالتالي يقول الكمبيوتر كيف للحصول على ما يريد).

النماذج هي لغة بسيطة - لا accnostic - إنها طريقة أكبر على كيفية تفكيرك في البرنامج والهيكل. ومع ذلك، هناك اختلافات في مدى سهولة استخدام اللغة لاستخدام نموذج النموذج: دلالات اللغة والبلاصات يؤدي إلى طريقة اصطلاحية لكتابة التعليمات البرمجية.

مثال على لغة إعلانية ستكون prolog، مثال لغتها الحتمية ستكون فورتران (و يمكن للمبرمج الحقيقي كتابة برامج Fortran بأي لغة).

كمثال للحصول على الكود وهو أمر ضروري وإعلان في نفس الوقت، فكر في تنفيذ تسلسل Fibonnaci في PERL6:

my @fibonacci-sequence := 0, 1, * + * ... *;

من الواضح أن هذا وصف تصريح للتسلسل. ولكن كما * و ... تعد مشغلي PERL6 صالحة - يمكن استخدام أي نجم لإنشاء تعبيرات Lambda، ومشغل التسلسل لإنشاء قوائم كسول - إنه أيضا بيان ضروري استدعاء رمز وقت التشغيل.

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

ال نموذج وظيفي يعلن بطبيعته، كما هو الحساب النماذج كعلاقة بين المجموعات.

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

بعض اللغات نقية، وهذا يعني أن جميع الحساب يتوافق مع النموذج. على سبيل المثال، Haskell هي لغة وظيفية بحتة، و Smalltalk هي لغة ذات وجوه بحتة.

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

بعض الناس يختلفون على oo كونهم مفهوما حتميا، لذلك إليك مفاجئي.

أساسيات اتجاه الكائنات:

  1. الكائنات عقد الدولة (أي الإشارات إلى كائنات أخرى)
  2. تلقي الكائنات الرسائل (والعملية)
  3. معالجة رسالة قد تؤدي إلى
    • إرسال الرسائل بنين إلى الكائن نفسه أو كائنات أخرى
    • تغيير في حالة الكائن

هذا يعني أن OO-Programming يتطلب حالة قابلة للتغيير يحملها الكائن (!). وبعد إذا كنت محاكاة تغيير الحالة عن طريق إنشاء سلسلة من الكائنات، فأنت تقطع هذه الثباتات، بسيطة مثل ذلك.

flamebait: إذا كنت لا توافق على هذا التعريف من اتجاه الكائنات، فأخذها مع آلان كاي.

الكثير من المفاهيم المختلفة تسهم في مفهوم البرمجة الموجهة للكائنات. ويكيبيديا يسرد معظمهم.

وأود أن تميز جوهر OOP باستخدام الكائنات مع السلوكيات.

ويكيبيديا تميز أشياء بالخصائص الثلاثة التالية:

  1. هوية: خاصية كائن يميزه عن الأشياء الأخرى
  2. حالة: يصف البيانات المخزنة في الكائن
  3. سلوك: يصف الأساليب الموجودة في واجهة الكائن التي يمكن من خلالها استخدام الكائن

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

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

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

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

وبالتالي نعم, ، البرمجة الحتمية متأصلة إلى OOP.

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