ইনহেরিট্যান্স এবং পলিমরফিজম (Inheritance & Polymorphism)
ইনহেরিট্যান্স কী? (What Is Inheritance?)
ইনহেরিট্যান্সকে (Inheritance) পারিবারিক রেসিপির খাতার (family recipe book) সাথে তুলনা করতে পারেন। আপনার দাদি হয়তো সাধারণ পাউরুটি বানানোর রেসিপি লিখে গিয়েছিলেন। আপনার মা সেই রেসিপি উত্তরাধিকার সূত্রে বা ইনহেরিট (inherit) করে পেয়েছিলেন এবং পাউরুটির সাথে দারুচিনি (cinnamon) মিশিয়ে দারুচিনির পাউরুটি তৈরি করেছিলেন। আপনি আবার আপনার মায়ের রেসিপি পেয়েছিলেন এবং সেই দারুচিনির পাউরুটির ওপর ফ্রস্টিং (frosting) বা মিষ্টি প্রলেপ দিয়ে দারুচিনি রোল (cinnamon rolls) তৈরি করেছিলেন। এখানে প্রতিটি প্রজন্মই আগের প্রজন্মের তৈরি করা রেসিপির ওপর ভিত্তি করে নতুন কিছু তৈরি করেছে, কাউকে পুরো রেসিপিটি একদম শুরু থেকে লিখতে হয়নি।
সি শার্পে (C#) একটি চাইল্ড ক্লাস (child class) (যাকে "ডিরাইভড (derived) ক্লাসও" বলা হয়) তার প্যারেন্ট ক্লাস (parent class) (বা "বেস (base) ক্লাস") থেকে সমস্ত প্রোপার্টি (properties) এবং মেথড (methods) ইনহেরিট করে বা পেয়ে থাকে। চাইল্ড ক্লাস চাইলে আগেরগুলোর সাথে নতুন কিছু যোগ করতে পারে অথবা পুরনো আচরণকে নিজের মতো করে পরিবর্তনও করে নিতে পারে।
সি শার্পে (C#) ইনহেরিট্যান্স বোঝাতে কোলন : ব্যবহার করা হয়: class Child : Parent
ব্যাসিক ইনহেরিট্যান্স (Basic Inheritance)
পলিমরফিজম — এক চেহারা, নানারকম রূপ (Polymorphism — One Interface, Many Forms)
পলিমরফিজম (Polymorphism) শুনতে একটি কঠিন শব্দ মনে হলেও এর মূল ধারণাটি বেশ সহজ: কোনো চাইল্ড বা শিশু অবজেক্টকে আপনি চাইলে তার প্যারেন্টের মতো করেও ব্যবহার করতে পারেন, আর এতে সব সময় সঠিক মেথডটিই কল বা রান হবে। একে এমন একটি রিমোট কন্ট্রোলের সাথে তুলনা করা যায়, যা যেকোনো ব্র্যান্ডের টিভির সাথেই কাজ করে — আপনি শুধু "volume up" বা ভলিউম বাড়ানোর বোতাম চাপবেন, আর প্রতিটি টিভি নিজের পদ্ধতি অনুযায়ী ভলিউম বাড়িয়ে নেবে।
এটি অবিশ্বাস্য রকমের একটি শক্তিশালী টুল। আপনি প্যারেন্ট ক্লাসের জন্য কোড লিখলেও সেটি নিজে থেকেই বা স্বয়ংক্রিয়ভাবে তার যেকোনো চাইল্ড ক্লাসের সাথে কাজ করবে — এমনকি সেসব চাইল্ড ক্লাসের সাথেও, যেগুলো হয়তো এখনও তৈরিই হয়নি!
পলিমরফিজম এবং অ্যাবস্ট্রাক্ট ক্লাসেস (Polymorphism & Abstract Classes)
জরুরি কিওয়ার্ডগুলোর সারসংক্ষেপ (Key Keywords Summary)
virtual— "এই মেথডের চাইল্ডরা চাইলে একে ওভাররাইড (override) বা পরিবর্তন করতে পারে।"override— "আমি আমার প্যারেন্টের দেওয়া কাজের পদ্ধতি বা ইমপ্লিমেন্টেশনকে (implementation) বাদ দিয়ে নিজের মতো একটি পদ্ধতি তৈরি করছি।"abstract— "আমি এই মেথডের কোনো ইমপ্লিমেন্টেশন বা কাজের ধারা দিচ্ছি না। তবে আমাকে ব্যবহার করা প্রতিটি চাইল্ডকে অবশ্যই এটি ইমপ্লিমেন্ট করতে হবে বা বানিয়ে নিতে হবে।" এটি সাধারণত ক্লাস এবং মেথডের নামের আগে ব্যবহৃত হয়।sealed— "আমাকে আর কেউ ইনহেরিট (inherit) করতে পারবে না বা আমি কাউকে আর কিছু দেব না।" এটি মূলত একটি পরিবারের বংশের শেষ হওয়ার মতো অবস্থা।base— "আমার প্যারেন্ট ক্লাসের কোনো কনস্ট্রাক্টর (constructor) বা মেথডকে ডাকুন।" এটি অনেকটা আসল রেসিপিটি জানার জন্য দাদিকে ফোন করার মতো।