প্রোগ্রামিং ভাষার দৃষ্টিকোণে, সাব-টাইপিং বলতে কী বোঝায়? শুনেছি "উত্তরাধিকার সাবটিপিং নয়"। তাহলে উত্তরাধিকার এবং সাবটাইপিংয়ের মধ্যে পার্থক্য কী?
প্রোগ্রামিং ভাষার দৃষ্টিকোণে, সাব-টাইপিং বলতে কী বোঝায়? শুনেছি "উত্তরাধিকার সাবটিপিং নয়"। তাহলে উত্তরাধিকার এবং সাবটাইপিংয়ের মধ্যে পার্থক্য কী?
উত্তর:
[অবজেক্ট-ওরিয়েন্টেড টাইপ সিস্টেমগুলির বিষয়গুলি সম্পর্কে আমি গভীরভাবে চিন্তা করিনি, তবে আলোচনাটি চালিয়ে নিতে আমি কী জানি তা বলব।]
আমরা বলি যে হ'ল বি-এর একটি সাব-টাইপ, যদি সমস্ত এ- টাইপ মানগুলি প্রতিটি প্রসঙ্গে ব্যবহার করা যায় যেখানে বি- টাইপ মানগুলি প্রত্যাশিত হয়। অথবা, অন্য কোনও উপায়ে বলতে গেলে , এ- প্রকারের মানগুলি বি- প্রকারের মান হিসাবে " মাস্ক্রেড " করতে পারে ।
মাস্ক্রেডিং যদি টাইপ চেকিং নিয়ে কোনও সমস্যা না দেয়, অর্থাত্, এ-টাইপ মানগুলিতে প্লাগিং যেখানে বি- টাইপ মানগুলি প্রয়োজন সেখানে চেক টাইপ করা চালিয়ে যায়, আমরা এটিকে "স্ট্রাকচারাল সাব টাইপিং" বলি । যদি এটি আচরণের সাথে কোনও সমস্যা না করে, যেমন, এই জাতীয় প্লাগিং প্রত্যাশিত আচরণকে পরিবর্তন করে না, তবে আমরা একে "আচরণগত সাব টাইপিং" বলি । ("প্রত্যাশিত আচরণ" আলাদাভাবে আনুষ্ঠানিক করতে হবে এবং আচরণের অনেক ধারণাই সম্ভব))
স্ট্রাকচারাল সাব টাইপিং আচরণগত সাব টাইপিং নিশ্চিত করে না কারণ কোনও ধরণের কাঠামোটি দুর্ঘটনাজনিত কারণে মেলে। তবে, প্রত্যাশিত আচরণটি নির্ধারণ করা সহজ নয়। সুতরাং, অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজ একটি মধ্যবর্তী পয়েন্ট ব্যবহার করে, যেখানে ব্যবহারকারীকে ঘোষণা করতে হয় কোন প্রকারের একটি উপপ্রকার। এটিকে "নামমাত্র সাব টাইপিং" হিসাবে উল্লেখ করা হয় । সুস্পষ্ট বনাম সুস্পষ্ট সাব টাইপিংয়ের প্রশ্নটি দেখুনএই বিষয়টি নিয়ে আলোচনার জন্য। ধারণাটি হ'ল প্রোগ্রামারকে তার নিজস্ব দক্ষতা ব্যবহার করে সমস্ত ঘোষিত উপপ্রকারের জন্য আচরণগত সাব-টাইপিং নিশ্চিত করতে হবে। ভাষা কোনও সহায়তা দিতে পারে না। যাইহোক, সমস্ত ঘোষিত উপপ্রকারগুলি অবশ্যই কমপক্ষে কাঠামোগত উপপ্রকারের হতে হবে। অন্যথায়, প্রোগ্রাম চেক টাইপ করতে ব্যর্থ হবে। ভাষা এটি নিশ্চিত করতে সহায়তা করতে পারে। (কিছু প্রোগ্রামিং ভাষাগুলির সংকলন-সময়ে এটি নিশ্চিত করার জন্য পর্যাপ্ত পরিমাণের মতো সিস্টেম নেই, যদি তাই হয় তবে টাইপ ব্যর্থতা রান-টাইমে সনাক্ত হতে পারে, বা সম্ভবত ভুল ফলাফল উত্পন্ন হতে পারে Such এ জাতীয় ধরণের গর্তগুলি অবশ্যই অনাকাঙ্ক্ষিত)
যখন কেউ অবজেক্ট ওরিয়েন্টেড প্রোগ্রামগুলিতে সাবক্লাসগুলি সংজ্ঞায়িত করে, তখন কেউ সাধারণত প্রকাশ্যে দৃশ্যমান ক্ষেত্রগুলি (বা পদ্ধতি) যুক্ত করে। বেশিরভাগ প্রোগ্রামিং ভাষায়, এই জাতীয় সাবক্লাসগুলিকে নামমাত্র সাব টাইপ হিসাবে বিবেচনা করা হয় । প্রশ্নগুলি তারা স্ট্রাকচারাল সাব টাইপগুলি কিনা । যদি সেগুলি না হয়, যেমন, প্রোগ্রামিং ল্যাঙ্গুয়েজ কোনও ব্যক্তিকে নামমাত্র সাব টাইপগুলি ঘোষণা করতে দেয় যা কাঠামোগত উপপ্রকার নয়, তবে প্রোগ্রামিং ভাষায় টাইপ হোল থাকতে পারে।
সাধারণ ক্ষেত্রে, ক্ষেত্রগুলি যুক্ত করা ঠিক কাজ করে। সুপারক্লাসের ধরণটি সাবক্লাসের ধরণের চেয়ে কম ক্ষেত্রের প্রত্যাশা করে। সুতরাং, যদি আপনি এমন একটি সাবক্লাসের কোনও ইনস্টল্টেন প্লাগ ইন করেন যেখানে সুপারপ্লাসের একটি উদাহরণ আশা করা যায়, প্রোগ্রামটি কেবলমাত্র অতিরিক্ত প্রদত্ত ক্ষেত্রগুলিকে অগ্রাহ্য করবে এবং কিছুই ভুল হয় না।
তবে, যদি সুপারক্লাস বা সাবক্লাসের এমন পদ্ধতি রয়েছে যা নিজের মতো একই ধরণের আর্গুমেন্ট গ্রহণ করে বা একই ধরণের ফলাফল নিজেই দেয় তবে সমস্যা দেখা দেয়। তারপরে সাবক্লাসের ইন্টারফেস টাইপ সুপারক্লাসের স্ট্রাকচারাল সাব টাইপ নয় । জাভা হিসাবে ব্যাপকভাবে ব্যবহৃত টাইপ-সেফ প্রোগ্রামিং ভাষা এ জাতীয় সাবক্লাসের অনুমতি দেয় না। সুতরাং, তারা ধরণের সুরক্ষা পেতে ভাষার সীমাবদ্ধ করে। প্রোগ্রামিং ভাষা আইফেলের পরিবর্তে নমনীয়তা পেতে টাইপ-নিরাপত্তার ত্যাগ করেছে বলে জানা যায় । যদি কেউ একটি শক্তিশালী ধরণের সিস্টেম ডিজাইন করে যা নমনীয়তা বজায় রাখে তবে একজনকে অবশ্যই সেই নীতিটি ত্যাগ করতে হবে যা সাবক্লাসগুলি সাব টাইপগুলিকে জন্ম দেয়। সুতরাং কাগজের শিরোনাম "উত্তরাধিকার সাব-টাইপিং নয়"। লেখকরা উচ্চ-অর্ডার সাব টাইপিংয়ের ভিন্ন ধারণা পোষণ করেন যা পরিবর্তে কাজ করে। কিম ব্রুসের কাছে "ম্যাচিং" নামে একটি ঘনিষ্ঠভাবে সম্পর্কিত প্রস্তাব রয়েছে যা একই প্রভাব অর্জন করে। এই উপস্থাপনা দেখুন । অ্যান্ড্রু ব্ল্যাকের একটি পজিশন পেপারও সহায়ক ।
মূলত সমস্যাটিকে উপেক্ষা করার জন্য শব্দার্থ সম্প্রদায় সম্ভবত দোষে রয়েছে। আমরা traditionতিহ্যগতভাবে এটি একটি ব্যবহারিক টাইপ-সিস্টেম ইঞ্জিনিয়ারিং ইস্যু হিসাবে বিবেচনা করেছি যা তাত্ত্বিক আগ্রহের খুব কম নয়। যদি এটি না হয় এবং সত্যিই এই অঞ্চলে কিছু শব্দার্থক কাজ রয়েছে, আমি আশা করি অন্যান্য লোকেরা তাদের উল্লেখ করবে।