অবজেক্ট অরিয়েন্টেড সি++ এবং ইনহেরিটেন্স (Inheritance)


বাবার সম্পত্তি সন্তাররাই পাবে, এটাই সত্য। এটাকে বলে উত্তরাধিকার সূত্রে পাওয়া। ইংরেজীতে Inheritance (ইনহেরিটেন্স)। ঠিক একই সিস্টেম অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এও আছে। একেও তাই বলে Inheritance. Inheritance হচ্ছে অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং এর সবচেয়ে গুরুত্বপূর্ণ ফিচার।

একটি Class অন্য একটি Class থেকে তার properties এবং characteristics (চারিত্রিক বৈশিষ্ট) গ্রহণ অথবা আহরণ অথবা নেওয়াকে প্রোগ্রামিং ভাষায় Inheritance বলে।

Inheritance এর কারনে এপ্লিকেশন বানানো এবং সংরক্ষণ করা অনেক সহজ হয়ে যায়। কারন Inheritance দিয়ে একটি Class এর ভিত্তিতে আরেকটি Class বানানো যায় আবার একই কোডকে অনেক ভাবে অনেক স্থানে ব্যবহার করা যায়, যেটার কারনে ফাংশনালিটি এবং দ্রুত implement করা যায় এপ্লিকেশন।

নতুন Class তৈরি করার সময়, সম্পূর্ণ নতুন ডেটা মেম্বার এবং মেম্বার ফাংশন লিখার বদলে প্রোগ্রামাররা সেই নতুন Class কে বলে দিতে পারে যে এই মেম্বার ডেটা গুলো পূর্বের আরেকটা Class এ অলরেডি অবস্থান করছে এবং সেখান থেকে ডেটা গুলো ইনহেরিট করার জন্য। এখানের এই পূর্বের Class টিকে বলে Base Class অথবা Super Class এবং নতুন Class টিকে বলে Derived Class অথবা Sub Class.


কেন এবং কখন Inheritance ব্যবহার করবো?

মনে করেন আপনারা তিন বন্ধু, কিশোর, মুসা এবং রবিন। তো আপনি এখন তিনজনের জন্য তিনটি Class তৈরি করবেন। কিন্তু চুল(), উচ্চতা(), কালার() এই ম্যাথোড গুলো তিনজনেরই আছে। এখন আমরা যদি Inheritance ছাড়া তিনটি Class তৈরি করে তাহলে দেখতে অনেকটা নিচের ছবির মতোন হবে —

উপরের ছবিতে স্পষ্টই বুঝা যাচ্ছে যে আমরা একই ম্যাথোড (চুল(), উচ্চতা(), কালার()) তিনবার লিখেছি Class এর মধ্যে। এটা কোডের ভুল হওয়া (ইরোর) এবং অতিরিক্ত ডেটা অথবা Data Redundancy এর সম্বাবনা অনেক বেড়ে যায়। তাই এধরনের ইরোর থেকে বাঁচার জন্য আমরা Inheritance ব্যবহার করি। Inheritance ব্যবহার করে আমরা চুল(), উচ্চতা(), কালার() এই ৩টি ম্যাথোড ব্যবহার করে একটি সম্পূর্ণ আলাদা ফাংশন তৈরি করে ফেলতে পারবো যা পরে বারবার বিভিন্ন যায়গায় ব্যবহার করা যাবে এবং ডেটা ডুপ্লিকেট হওয়ার সুযোগ অনেকটাই কমে যাবে। তাই উপরের ছবির ডেটা গুলো কে Inheritance এর আওতায় আনলে ঠিক অনেকটা নিচের ছবিটার মতোন হবে —

Inheritance ব্যবহার করলে আমাদের একটি ফাংশন অথবা ম্যাথোড শুধু একবারই লিখতে হবে এবং পরে দরকার পরলে আমরা এই একই ফাংশনকে কোডের অন্য জায়গায় ব্যবহার করতে পারবো একাধিকবার।


সি++ প্রোগ্রামে Inheritance Implement করা

এবার চলুন একটি সি++ কোড লিখি যেটাতে base-class থেকে sub-class এ ডেটা ইনহেরিট করবো। তার আগে ব্যাসিক সিনট্যাক্সটা দেখে নিই —

class SubclassName : access_mode BaseclassName {
// body of Sub-class
};

এখানে SubclassName হচ্ছে sub-class এর জন্য রেনডম একটি নাম, access_mode হচ্ছে যেই class টি থেকে ডেটা ইনহেরিট করবো সেটার ধরন অর্থাৎ সেটি পাবলিক, প্রাইভেট অথবা প্রোটেকটেড হলে সেটা লিখবো এবং BaseclassName হচ্ছে যেই class টি থেকে আমাদের ডেটা ইনহেরিট করবো তার নাম।

আউটপুট —

Child id is: 10 
Parent id is: 20

ইনহেরিটেন্সের বিভিন্ন Modes

১. Public Mode: আমরা যদি পাবলিক base-class থেকে sub-class এ ডেটা ইনহেরিট করি তাহলে base-class এর পাবলিক মেম্বার গুলো sub-class এ পাবলিক থাকবে এবং প্রোটেকটেড মেম্বার গুলো প্রোটেকটেড থাকবে।

২. Private Mode: প্রাইভেট base-class থেকে sub-class এ ডেটা ইনহেরিট করি তাহলে base-class এর পাবলিক এবং প্রোটেকটেড দুটো মেম্বারই sub-class এ প্রাইভেট হয়ে যাবে।

৩. Protected Mode: প্রোটেকটেড base-class থেকে sub-class এ ডেটা ইনহেরিট করি তাহলে base-class এর পাবলিক এবং প্রোটেকটেড দুটো মেম্বারই sub-class এ প্রোটেকটেড হয়ে যাবে।

base-class এর প্রাইভেট মেম্বার গুলোকে sub-class থেকে সরাসরি এক্সেস করা যায় না, কিন্তু প্রোটেকটেড মেম্বার গুলোকে এক্সেস করা যায়

উপরের ডায়াগ্রামটি থেকে বুঝা যাবে কোন এক্সেসের মেম্বাররা sub-class এ ইনহেরিট করলে কেরকম ব্যবহার করবে।


Inheritance এর প্রকারভেদ

১. Single Inheritance — একটি class শুধু মাত্র অন্য আরেকটি class থেকে ইনহেরিট করতে পারবে। অর্থাৎ একটি sub-class শুধু মাত্র একটি base-class থেকে ইনহেরিট করতে পারবে।

সিনট্যাক্স হবে —

class Sub_ClassName : access_mode Base_Class {
//
body of sub class
};

২. Multiple Inheritance — এটা হচ্ছে সি++ এর স্পেশাল ফিচার, যেটার মাধ্যমে একটি sub-class একাধিক base-class থেকে ইনহেরিট করতে পারবে।

সিনট্যাক্স হবে —

class Sub_ClassName : access_mode Base_Class_1, access_mode Base_Class_2, ..... {
//
body of sub class
};

৩. Multilevel Inheritance — একটি sub class অথবা derived class থেকে আরেকটি sub class অথবা derived class কে তৈরি করা।

সিনট্যাক্স হবে —

class Base_Class_1 {
//
body of base class 1
};
class Base_Class_2 : access_mode Base_Class_1 {
//
body of base class 2
};
class Sub_Class : access_mode Base_Class_2 {
//
body of sub class
};

৪. Hierarchical Inheritance — এই ধরনের ইনহেরিটেন্সে একটি base-class থেকে একাধিক sub class অথবা derived class কে তৈরি করা যায়।

সিনট্যাক্স হবে —

class Base_Class {
//
body of base class
};
class Sub_Class_1 : access_mode Base_Class {
//
body of Sub class 1
};
class Sub_Class_2 : access_mode Base_Class {
//
body of sub class 2
};

৫. Hybrid (Virtual) Inheritance — একাধিক ধরনের ইনহেরিটেন্স সিস্টেম মিলে Hybrid (Virtual) Inheritance তৈরি করা হয়। যেমন Hierarchical এবং Multiple Inheritance মিলে একটি Hybrid (Virtual) Inheritance তৈরি করা যায়।


অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং নিয়ে আমার আগের লিখা গুলো পড়তে পারবেন আমার ব্যক্তিগত ব্লগ এবং মিডিয়াম থেকে —

আজকে এই পর্যন্তই। ধন্যবাদ সাথে থাকার জন্য।

#হ্যাপি_প্রোগ্রামিং


আমার ব্যাক্তিগত ব্লগ —

বাংলা ভার্শন — https://with.dibakar.me/

ইংলিশ ভার্শন — https://with.dibakar.me/en/

আমাকে পাবেন —

ফেসবুকে — https://www.facebook.com/dipu.dibakar

মিডিয়ামে — https://medium.com/@iamdibakardipu

টুইটারে — https://twitter.com/iamdibakardipu

ইনস্টাগ্রামে — https://www.instagram.com/dibakardipu/

গিটহাবে — https://github.com/dibakarsutradhar

লিঙ্কড ইনে — https://linkedin.com/in/dibakardipu/