আমি কেবল জোএলের একটি নিবন্ধ পড়েছি যেখানে তিনি বলেছেন:
সাধারণভাবে, আমাকে স্বীকার করতে হবে যে আমি এমন ভাষা বৈশিষ্ট্যগুলি থেকে কিছুটা ভয় পাই যা জিনিসগুলিকে আড়াল করে । আপনি কোড দেখতে পাবেন
i = j * 5;
… সি তে আপনি জানেন, কমপক্ষে, সেই জে পাঁচটি দ্বারা গুণিত হচ্ছে এবং ফলাফলগুলি আইতে সঞ্চিত রয়েছে।
আপনি যদি সি ++ তে কোডের একই স্নিপেট দেখতে পান তবে আপনি কিছুই জানেন না। কিছুই নেই। সি ++ এ আসলে কী হচ্ছে তা জানার একমাত্র উপায় হ'ল আমি এবং জে কী ধরণের, অন্য কোথাও কোথাও ঘোষিত হতে পারে something এটি কারণ জে সম্ভবত এমন এক ধরণের হতে পারে যা
operator*
ওভারলোড হয়ে গিয়েছিল এবং যখন আপনি এটির গুণক করার চেষ্টা করেন তখন এটি মারাত্মক মজাদার কিছু করে।
(জোর দেওয়া আমার।) ভাষার বৈশিষ্ট্যগুলি কী এমন জিনিস লুকিয়ে রাখে? কীভাবে ভয় পাবেন? জিনিস গোপন না করা ( বিমূর্ততা হিসাবে পরিচিত ) অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের অন্যতম মূল ধারণা? আপনি যখনই কোনও পদ্ধতিতে কল করেন a.foo(b)
, তখন এটি কী করবে আপনার কোনও ধারণা নেই। আপনাকে কী ধরণের a
এবং কী কী তা b
অন্য কোথাও কোথাও ঘোষিত হতে হবে declared সুতরাং আমাদের কি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং বন্ধ করা উচিত, কারণ এটি প্রোগ্রামার থেকে খুব বেশি জিনিস লুকায়?
এবং অপরটি ওভারলোডিং সমর্থন করে না এমন ভাষায় আপনাকে কী লিখতে হতে পারে তার j * 5
থেকে কীভাবে আলাদা j.multiply(5)
? আবার, আপনাকে পদ্ধতির j
অভ্যন্তরে প্রকার এবং উঁকি দেওয়ার ধরণটি খুঁজে বের করতে হবে multiply
, কারণ লো এবং দেখুন, j
এমন একটি ধরণের হতে পারে যা একটি multiply
পদ্ধতিতে ভয়ঙ্করভাবে কিছু করতে পারে।
"মুআহাহা, আমি একটি দুষ্টু প্রোগ্রামার যা একটি পদ্ধতির নাম দিয়েছি multiply
তবে এটি আসলে যা করে তা সম্পূর্ণ অস্পষ্ট এবং জ্ঞানহীন এবং এর বহুগুণে কিছু করার মতো কিছুই নেই" " প্রোগ্রামিং ল্যাঙ্গুয়েজ ডিজাইনের সময় সেই পরিস্থিতিটি কি আমাদের বিবেচনায় রাখা উচিত? তারপরে আমাদের প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি থেকে সনাক্তকারীদের ত্যাগ করতে হবে যে কারণে তারা বিভ্রান্তিকর হতে পারে!
কোনও পদ্ধতি কী করে তা যদি আপনি জানতে চান তবে আপনি ডকুমেন্টেশনটি এক নজরে দেখতে পারেন বা বাস্তবায়নের অভ্যন্তরে উঁকি দিতে পারেন। অপারেটর ওভারলোডিং কেবল সিনট্যাকটিক চিনি এবং এটি কীভাবে খেলাটিকে একেবারে পরিবর্তন করে তা আমি দেখতে পাই না।
আমাকে আলোকিত করুন।