যখন আপনি পলিমারফিজম ধারণাটি ব্যবহার করেন আপনি একটি শ্রেণিবৃত্তি তৈরি করেন এবং পিতামাতার রেফারেন্স ব্যবহার করে আপনি কোন নির্দিষ্ট ধরণের অবজেক্টটি না জেনে ইন্টারফেস ফাংশনটি কল করেন। এটা অসাধারণ. উদাহরণ:
আপনার কাছে প্রাণীর সংগ্রহ রয়েছে এবং আপনি সমস্ত প্রাণীর কার্যকারিতার আহ্বান জানান eatএবং এটি কোনও কুকুর খাওয়া বা বিড়াল কিনা তা আপনার যত্ন নেই। কিন্তু একই শ্রেণীর শ্রেণিবিন্যাসে আপনার কাছে অতিরিক্ত প্রাণী রয়েছে - বংশানুক্রমিক এবং ক্লাস থেকে বাস্তবায়িত ব্যতীত Animal, যেমন makeEggs, getBackFromTheFreezedStateইত্যাদি। সুতরাং আপনার কার্যকারী কিছু ক্ষেত্রে আপনি অতিরিক্ত আচরণগুলি কল করার জন্য নির্দিষ্ট ধরণেরটি জানতে চাইতে পারেন।
উদাহরণস্বরূপ, ক্ষেত্রে এটি সকাল সময় এবং যদি এটা শুধু একটি প্রাণী তারপর আপনি কল eat, অন্যথায় যদি এটি একটি মানুষের হয়, তাহলে প্রথম কল washHands, getDressedএবং শুধুমাত্র তারপর কল eat। এই মামলাগুলি কীভাবে পরিচালনা করবেন? পলিমারফিজম মারা যায়। আপনাকে কোডটির গন্ধ মতো শোনার মতো অবজেক্টের ধরণটি খুঁজে বের করতে হবে। এই মামলাগুলি পরিচালনা করার জন্য কি কোনও সাধারণ পদ্ধতি রয়েছে?
Eaterসাথে ইন্টারফেসটি সংজ্ঞায়িত করেন eat(), তবে ক্লায়েন্ট হিসাবে, আপনার কোনও যত্ন নেই যে Humanএটি প্রয়োগকারীকে প্রথমে কল করতে হবে washHands()এবং getDressed()এটি এই শ্রেণীর প্রয়োগের বিবরণ। যদি, একজন ক্লায়েন্ট হিসাবে, আপনি এই সত্যটির প্রতি যত্নশীল হন, তবে আপনি সম্ভবত কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করছেন না।
getDressedতাদের আগে প্রয়োজন হতে পারে eat, এটি মধ্যাহ্নভোজনের ক্ষেত্রে নয়। আপনার পরিস্থিতিতে উপর নির্ভর করে washHands();if !dressed then getDressed();[code to actually eat]মানুষের জন্য এটি বাস্তবায়নের সেরা উপায় হতে পারে। আরেকটি সম্ভাবনা হ'ল যদি অন্য জিনিসগুলির প্রয়োজন হয় washHandsএবং / অথবা getDressedবলা হয়? ধরুন তো leaveForWork? আপনার প্রোগ্রামের প্রবাহকে এমনভাবে তৈরি করার জন্য আপনার কাঠামোগত প্রয়োজন হতে পারে যা এটির আগেই বলা হয়ে থাকে।