উত্তরাধিকার বনাম কন্টেইনারশিপ
উত্তরাধিকার এবং কন্টেইনারশিপ দুটি গুরুত্বপূর্ণ ধারণা OOP-তে পাওয়া যায় (অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং উদাহরণ: C++)। সহজ কথায়, কন্টেইনারশিপ এবং উত্তরাধিকার উভয়ই একটি শ্রেণিকে অতিরিক্ত বৈশিষ্ট্য বা আচরণ প্রদানের সাথে ডিল করে। উত্তরাধিকার হ'ল একটি শ্রেণীকে প্রসারিত করে অভিভাবক শ্রেণীর থেকে বৈশিষ্ট্য এবং আচরণের উত্তরাধিকারী হওয়ার ক্ষমতা। অন্যদিকে, কনটেইনারশিপ হল একটি শ্রেণীর ক্ষমতা যা সদস্য ডেটা হিসাবে বিভিন্ন শ্রেণীর বস্তু ধারণ করে।
উত্তরাধিকার কি?
উপরে উল্লিখিত হিসাবে, উত্তরাধিকার হ'ল একটি শ্রেণীর ক্ষমতা যা একটি অভিভাবক শ্রেণীর থেকে প্রসারিত করে বৈশিষ্ট্য এবং আচরণের উত্তরাধিকারী হয়।উত্তরাধিকার মূলত একটি নতুন সংজ্ঞায়িত শ্রেণী দ্বারা বিদ্যমান ক্লাসের বৈশিষ্ট্য এবং আচরণকে প্রসারিত করার অনুমতি দিয়ে কোড পুনঃব্যবহার প্রদান করে। যদি A শ্রেণী B কে প্রসারিত করে, তাহলে B শ্রেণীকে অভিভাবক শ্রেণী (বা সুপার শ্রেণী) বলা হয় এবং শ্রেণী A কে শিশু শ্রেণী (বা উদ্ভূত শ্রেণী/উপ শ্রেণী) বলা হয়। এই উদাহরণের পরিস্থিতিতে, ক্লাস A সুপার ক্লাস (B) এর সমস্ত পাবলিক এবং সুরক্ষিত বৈশিষ্ট্য এবং পদ্ধতিগুলি উত্তরাধিকারী হবে। সাবক্লাস ঐচ্ছিকভাবে প্যারেন্ট ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত আচরণকে (পদ্ধতিতে নতুন বা বর্ধিত কার্যকারিতা প্রদান) ওভাররাইড করতে পারে। OOP-তে উত্তরাধিকার একটি "is-a" সম্পর্ককে উপস্থাপন করে। এর মানে মূলত A হল B. অন্য কথায়, B একটি নির্দিষ্ট বাস্তব জগতের সত্তার সাধারণ বর্ণনা সহ শ্রেণী হতে পারে কিন্তু A একটি নির্দিষ্ট বিশেষত্ব উল্লেখ করে। একটি বাস্তব বিশ্বের প্রোগ্রামিং সমস্যায়, কর্মচারী শ্রেণী তৈরি করতে ব্যক্তি শ্রেণী বাড়ানো যেতে পারে। একে বলে স্পেশালাইজেশন। তবে আপনি প্রথমে কর্মচারী শ্রেণীও তৈরি করতে পারেন এবং তারপর এটিকে একটি ব্যক্তি শ্রেণিতেও সাধারণীকরণ করতে পারেন (i.e সাধারণীকরণ)। এই উদাহরণে, কর্মচারীর কাছে ব্যক্তির সমস্ত বৈশিষ্ট্য এবং আচরণ থাকবে (অর্থাৎ কর্মচারীও একজন ব্যক্তি) এবং কিছু অতিরিক্ত কার্যকারিতাও থাকতে পারে (তাই, ব্যক্তি একজন কর্মচারী নয়)৷
কন্টেইনারশিপ কি?
কন্টেইনারশিপ হল একটি ক্লাসের বিভিন্ন শ্রেণীর বস্তুকে সদস্য ডেটা হিসাবে ধারণ করার ক্ষমতা। উদাহরণ স্বরূপ, ক্লাস A সদস্য হিসাবে B শ্রেণীর একটি বস্তু থাকতে পারে। এখানে, B তে সংজ্ঞায়িত সমস্ত পাবলিক পদ্ধতি (বা ফাংশন) A ক্লাসের মধ্যে কার্যকর করা যেতে পারে। ক্লাস A ধারক হয়ে যায়, যখন B শ্রেণী অন্তর্ভুক্ত শ্রেণীতে পরিণত হয়। কন্টেইনারশিপকে রচনা হিসাবেও উল্লেখ করা হয়। এই উদাহরণে, এটা বলা যেতে পারে যে ক্লাস A শ্রেণী B দ্বারা গঠিত। OOP-তে, কন্টেইনারশিপ একটি "হ্যাস-এ" সম্পর্ককে উপস্থাপন করে। এটি লক্ষ করা গুরুত্বপূর্ণ যে, যদিও ধারকটিতে অন্তর্ভুক্ত ক্লাসের সমস্ত পাবলিক পদ্ধতিগুলি চালানোর অ্যাক্সেস রয়েছে, এটি পরিবর্তন করতে বা অতিরিক্ত কার্যকারিতা প্রদান করতে সক্ষম নয়৷ যখন এটি একটি বাস্তব বিশ্বের প্রোগ্রামিং সমস্যা আসে, ক্লাস টেক্সটবক্সের একটি অবজেক্ট ক্লাস ফর্মের মধ্যে থাকতে পারে এবং এইভাবে বলা যেতে পারে যে একটি ফর্মটিতে একটি পাঠ্যবক্স রয়েছে (বা বিকল্পভাবে, একটি ফর্ম একটি পাঠ্যবক্সের সমন্বয়ে গঠিত)।
উত্তরাধিকার এবং কন্টেইনারশিপের মধ্যে পার্থক্য
যদিও উত্তরাধিকার এবং কন্টেইনারশিপ দুটি ওওপি ধারণা, তারা প্রোগ্রামারকে যা অর্জন করতে দেয় তাতে তারা সম্পূর্ণ আলাদা। উত্তরাধিকার হ'ল একটি শ্রেণীকে প্রসারিত করার মাধ্যমে একটি অভিভাবক শ্রেণীর থেকে বৈশিষ্ট্য এবং আচরণের উত্তরাধিকারী করার ক্ষমতা, অন্যদিকে কন্টেইনারশিপ হল সদস্য ডেটা হিসাবে বিভিন্ন শ্রেণীর বস্তু ধারণ করার ক্ষমতা। যদি একটি শ্রেণী প্রসারিত হয়, তবে এটি সমস্ত পাবলিক এবং সুরক্ষিত বৈশিষ্ট্য/আচরণ উত্তরাধিকার সূত্রে পায় এবং সেই আচরণগুলি সাবক্লাস দ্বারা ওভাররাইড করা হতে পারে। কিন্তু যদি একটি শ্রেণী অন্যটিতে থাকে তবে ধারকটি অন্তর্ভুক্তটিতে আচরণ পরিবর্তন বা যুক্ত করার ক্ষমতা পায় না। উত্তরাধিকার OOP-তে একটি "is-a" সম্পর্ককে প্রতিনিধিত্ব করে, যখন Containership একটি "has-a" সম্পর্ককে প্রতিনিধিত্ব করে।