دفاعا عن منظمة التحرير. 7 حجج لا يمكن الدفاع عنها من خصومه

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

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

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

أريد فقط إحضار العنصر الثالث. من الهدوء ، بدون ضجيج وإساءة ، معرفة السبب وراء أن OOP ليس إكسيرًا لجميع الأمراض ، ولكن أيضًا ، مثل PP أو AF أو PL ، له الحق في الوجود.

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

1. كل ما هو موجود في OOP كان منذ فترة طويلة في نماذج أخرى


جميع لغات البرمجة تقريبًا مكتملة ، باستثناء لغات الترميز ، مثل HTML ، XML ، CSS ، إلخ. من خلال التحدث بلغة فلاحية ، فإن لغة تورينج هي لغة كاملة - لغة يمكنك من خلالها كتابة أي برنامج يمكن تصوره. من هذا يتبع أطروحة عامة إلى حد ما: ما هو في أي لغة عشوائية مختارة في جميع اللغات الأخرى. ويمكن قول الشيء نفسه عن النماذج. جميع الاختلافات في اللغات (والنماذج) هي طرق مختلفة لتنفيذ أوامر معينة ، دون احتساب الميزات المعجمية الفردية.

بالمناسبة ، يمكن صياغة نفس الأطروحة (كل ما هو في N ، في M ، و K ، و R ، وما إلى ذلك) على النحو التالي: المطرقة تتكون بالفعل من الحديد والخشب ، لماذا نحتاج أيضًا إلى زردية؟ لكن لا أحد سيقول ذلك.

2. OOP يمزج البيانات والإجراءات عليها. إنها سيئة


يتم سحب الحجة من الاصبع. أولاً ، أين يخلط OOP بين البيانات والوظائف؟ ثانيًا ، التصريح بأن هذا سيء مأخوذ أيضًا من فانوس ، من برميل "رجل حقيقي لا يفعل ذلك" ، ولماذا - بسبب الزنبق. OOP بطريقة ما يصور العالم الحقيقي حيث تكون البيانات متأصلة في الكائن - لن يجادل أحد في أن الكرسي مفقود اللون وليس له أربعة أرجل. ولا يحدث خلط للبيانات والعمليات هنا ، فالكائن ليس دالة أو عامل تشغيل. هذا تجريد.

3. يستعبد الميراث البرنامج ، ويجعل التغييرات صعبة


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

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

أيضا ، سيكون من الخطأ إنشاء تسلسلات هرمية لا ترتبط فيها الفئات ببعضها البعض. حسنًا ، لماذا ، أخبرني ، أن أصنع برجًا حيث يتم توريث فئتي Fly and Cutlet من الجبن الفائق ، والذي بدوره ، موروث من الطبقة الفائقة يوم الجمعة ؟! لكن هذا لم يعد عيبًا في OOP ، ولكن الأيدي المعوجة للشخص الذي يتكون منه.

4. التغليف لا معنى له


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

لكن هذا صحيح تقنيا فقط. فلسفة OOP هي أنه يمكن رؤية فئة منظمة ومغلفة بشكل صحيح على أنها صندوق أسود. تخيل صندوقًا على جانب واحد يوجد به أزرارًا مختلفة ، وفتحات لتزويد البيانات ، وعلى الجانب الآخر - فتحة إخراج تُرجع المعلومات. خذ ، على سبيل المثال ، مكدس. تخيل صندوقًا على جانب واحد به فتحة واحدة لإدخال البيانات وزر ضغط بجواره. يوجد في الخلف زر البوب. يمكنك إرسال ملاحظة بالرقم 8 والضغط على زر الضغط. ثم تعطي قطعة أخرى من الورق وتضغط على الدفع للمرة الثانية. وهكذا N مرات ، ثم اضغط على pop. تطير قطعة من الورق خارج الدرج برقم 76 (أو آخر ، بشكل عام ، الذي قدمته). هل تحتاج إلى رقم آخر؟ اضغط على pop مرة أخرى. وهكذا حتى مؤامرة الجزرة حتى يصبح الصندوق فارغًا. وإذا واصلت الضغط على البوب ​​، فستتغلب الآلية من الصندوق: المكدس فارغ! هذا هو بالضبط ما يبدو عليه الكائن.

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

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

على الرغم من أنه من الصعب "للأسف" بشكل عام هنا.

5. لا توجد تسلسلات هرمية للعلاقة في العالم الحقيقي ، ولكن فقط التسلسلات الهرمية في كل مكان


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

ومع ذلك ، لا ينبغي أن نخجل من عدم وجود "شيء" أو "جورب".

6. منهجية OOP خاطئة في البداية


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

7. ولكن حتى ملايين الذباب لن تقنعنا بأن السماد لذيذ.


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



لماذا هذا المقال دفاعا عن منظمة التحرير؟


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

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

إذا كنت لا تحب OOP


لمن - OOP ، لمن - FP ، لمن - PP. وبالنسبة لشخص ما ، ربما يكون غضروف الخنازير بشكل عام حلوًا. إذا كنت لا تحب القطط ، فربما لا تعرف كيفية طهيها.

Source: https://habr.com/ru/post/ar418133/


All Articles