Vivasoft-logo

ইনহেরিটেন্স কি?

মনে করি, আমাদের কাছে ক্লাস ClassA আছে, এই ক্লাসের কিছু মেথড বা প্রোপার্টি অন্য একটা ক্লাস ClassB তে ব্যাবহার করতে হবে। এইজন্য আমরা কি করতে পারি? যদি ফাংশনাল প্রোগ্রামিং এর মত ভাবি তাহলে, এইটা করার জন্য আমাদের ClassA এর যে মেথড আর প্রপার্টি গুলা প্রয়োজ, সেইগুলা কপি করে ClassB তে নিয়ে যাবো। এতে করে আমাদের কোডের মদ্ধে রিডান্ডেন্সি চলে আসছে। এই সমস্যা সমাধানের জন্য ওওপি তে ইনহেরিটেন্স এর কন্সেপ্ট নিয়ে আসা হয়।

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

বাস্তব-জীবনে ইনহেরিটেন্সের উদাহরণ

আমাদের আশেপাশে যে, বিড়াল, কুকুর, বাঘ এগুলো সবই একেকটি প্রাণি। এদের মধ্যে কিছু মিল খুজে পাওয়া যায় আবার কিছু অমিল ও আছে। যেমন, এরা সবাই ৪ পা যুক্ত প্রাণি, সবাই কান দিয়ে শুনে থাকে। তবুও তাদের মধ্যে কিছু পার্থ্যক্য আছে। সব প্রাণি গুলা একিরকম খাবার খায় নাহ, তাদের ডাক একি রকম হয় নাহ ইত্যাদি। এখন যদি এদের স্বভাবগুলা ব্যখ্যা করতে চায় তাহলে সবার জন্য একি জিনিস বলতে পারি নাহ। যেগুলা একিরকম সেগুলা একসাথে ব্যাখ্যা করবো আর যেগুলা আলাদা, সেগুলো আলাদাভাবে ব্যখ্যা করবো তাহলে আমরা খুব সহজেই তাদের স্বভাব ব্যখ্যা করতে পারি।

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

সাবক্লাস (Derived Class) এবং সুপারক্লাস (Base Class)

আমাদের প্রথম উদাহণে ClassB, ClassA এর কাছ থেকে প্রোপার্টি নিয়ে নিজের কাজের জন্য ব্যবহার করে থাকে। এই ক্ষেত্রে ClassB কে আমরা সাবক্লাস বলি। সাবক্লাস হলো সেই ক্লাস যে অন্য একটা ক্লাসের কাছ থেকে প্রোপার্ট ইনহেরিট করে থাকে।

আর ClassA কে বলা হয় সুপারক্লাস। সুপারক্লাস হলো সেই ক্লাস যে ক্লাস থেকে ইনহেরিট করা হচ্ছে।
সাবক্লাস শুধুমাত্র সুপারক্লাসের public আর protected প্রোপার্টি গুলো ইনহেরিট করতে পারে। private প্রোপার্টি ইনহেরিট করতে পারে নাহ।

উদাহরণস্বরুপ বলা যায়, প্রতিটা প্রাণির মত কুকুর খাবার খায় কিন্তু কুকুরের ডাক প্রতিটা প্রাণির মত হয় নাহ। প্রাণিদের জন্য যদি আমরা Animal ক্লাস বানায় সেই ক্লাসে Eat মেথড থাকবে কিন্তু কুকুরের জন্য যখন আমরা Dog ক্লাস বানাবো তখন সেখানে Animal ক্লাস ইনহেরিট করে কুকুরের ডাকের জন্য Bark মেথডটা নতুন ভাবে এড করলেই হবে।

নিচে কোড এক্সাম্পল দেওয়া হলোঃ

// Base Class
class Animal {
    public void Eat() {
        Console.WriteLine(“Animals are eating.”);
    }
}
// Derived Class
class Dog : Animal {
    public void Bark() {
        Console.WriteLine(“Dog is barking.”);
    }
}
class Program {
    static void Main() {
        Dog myDog = new Dog();
        myDog.Eat();
        myDog.Bark();
    }
}
// Base Class
class Animal {
    public void eat() {
        System.out.println(“Animals are eating.”);
    }
}
// Derived Class
class Dog extends Animal {
    public void bark() {
        System.out.println(“Dog is barking.”);
    }
}
public class Program {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.eat();
        myDog.bark();
    }
}

Output:

Animals are eating.
Dog is barking.