मैंने अभी जोएल का एक लेख पढ़ा है जिसमें वह कहता है:
सामान्य तौर पर, मुझे यह स्वीकार करना होगा कि मैं भाषा सुविधाओं से थोड़ा डरता हूं जो चीजों को छिपाते हैं । जब आप कोड देखेंगे
i = j * 5;
... सी में आप जानते हैं, कम से कम, कि जे को पांच से गुणा किया जा रहा है और परिणाम I में संग्रहीत हैं।
लेकिन अगर आप C ++ में कोड के समान स्निपेट देखते हैं, तो आपको कुछ भी पता नहीं है। कुछ भी तो नहीं। सी ++ में वास्तव में क्या हो रहा है यह जानने का एकमात्र तरीका यह पता लगाना है कि मैं किस प्रकार और जे हैं, कुछ ऐसा जो पूरी तरह से कहीं और घोषित किया जा सकता है। ऐसा इसलिए है क्योंकि j एक प्रकार का हो सकता है जो
operator*
अतिभारित हो गया है और जब आप इसे गुणा करने का प्रयास करते हैं तो यह बहुत ही विकट होता है।
(जोर मेरा।) चीजों को छिपाने वाली भाषा सुविधाओं से डरना? आप उससे कैसे डर सकते हैं? ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के प्रमुख विचारों में से एक को छिपाने ( अमूर्त रूप में भी जाना जाता है ) नहीं है? हर बार जब आप कोई विधि कहते हैं a.foo(b)
, तो आपके पास कोई विचार नहीं होता कि वह क्या कर सकता है। आपको यह पता लगाना होगा कि क्या प्रकार हैं a
और क्या b
हैं, कुछ ऐसा जो पूरी तरह से कहीं और घोषित किया जा सकता है। तो क्या हमें ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को दूर करना चाहिए, क्योंकि यह प्रोग्रामर से बहुत अधिक चीजें छिपाता है?
और j * 5
किसी भी तरह से अलग कैसे है j.multiply(5)
, जिसे आपको एक ऐसी भाषा में लिखना पड़ सकता है जो ऑपरेटर ओवरलोडिंग का समर्थन नहीं करता है? फिर, आपको विधि के j
अंदर और प्रकार के बारे में पता लगाना होगा multiply
, क्योंकि लो और निहारना, j
एक प्रकार का हो सकता है जिसमें एक ऐसी multiply
विधि होती है जो बहुत कुछ मजाकिया ढंग से करती है।
"मुआहा, मैं एक दुष्ट प्रोग्रामर हूं जो एक विधि का नाम देता है multiply
, लेकिन यह वास्तव में जो करता है वह पूरी तरह से अस्पष्ट और सहज नहीं है और जो कुछ भी गुणा करने के लिए बिल्कुल कुछ भी नहीं है।" क्या प्रोग्रामिंग भाषा डिजाइन करते समय ऐसा परिदृश्य हमें ध्यान में रखना चाहिए? फिर हमें पहचानने वालों को प्रोग्रामिंग भाषाओं से इस आधार पर छोड़ना होगा कि वे भ्रामक हो सकते हैं!
यदि आप जानना चाहते हैं कि एक विधि क्या करती है, तो आप या तो दस्तावेज़ीकरण पर नज़र डाल सकते हैं या कार्यान्वयन के अंदर झाँक सकते हैं। ऑपरेटर ओवरलोडिंग सिर्फ सिंथैटिक शुगर है, और मैं यह नहीं देखता कि यह गेम को कैसे बदलता है।
कृपया मुझे ज्ञान दो।