لماذا Arc ليست كائنية التوجه بشكل خاص

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

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

أعتقد أن هناك خمسة أسباب يحب الناس البرمجة كائنية التوجه من أجلها، وثلاثة ونصف منها سيئة:

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

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

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

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

  5. تجسيدات البرمجة كائنية التوجه تتناسب بشكل جيد مع مجالات أنواع معينة من البرامج، مثل المحاكاة وأنظمة CAD.

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

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