Tuesday, October 17, 2017

C# For Beginners , Part -32 ( Multiple Class InheriTance Problem & Solution )

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


আজকে আমরা , মাল্টিপল ক্লাস ইনহেরিটেন্স কেনো করা যায় না ?? সেটা নিয়ে কথা বলবো ।।
চলো আগে একটা ছবি দেখে আসি ------------------------------------------------

আমরা উপরের ছবি অনুসারে একটা প্রোগ্রাম লিখেই ফেলি ।। চলো ------------------------

using System;

public  class  A
{
    public virtual void display()
    {
        Console.WriteLine("Class A Implementation");
    }
}

public  class B:A
{
    public override void display()
    {
        Console.WriteLine(" This is class B Implementation");
    }
}

public class C : A
{
    public override void display()
    {
        Console.WriteLine(" This is class B Implementation");
    }
}

public class D:B,C
{

}

public class Program
{
    public static void Main()
    {
        D d = new D();
        d.print();
        Console.ReadKey();
       
    }

}



যদিও , একের অধিক ক্লাস থেকে একটা ক্লাস ইনহেরিটেড করা যায় না ।। তারপরো , মেনে নিলাম আমরা যে ,  D ক্লাস B এবং C উভয় থেকেই , ইনহেরিটেড হতে পারে ।। তাহলে , এটা যদি সত্যি সত্যি রান করানো যেতো , তাহলে কি আউটপুট পেতা ??? একটু চিন্তা করো তো ??? আমরা যখন , D ক্লাস এর একটা অব্জেক্ট ক্রিয়েট করলাম , তখন -- এটাকে মেইনমেথোড এ কল করলে , তখন D ক্লাস যেহেতু দুইটা ক্লাস B এবং C উভয় থেকেই , ইনহেরিটেড হয়েছে তাই কোন ক্লাসের মেথোড'কে কন্সল স্ক্রিনে শো করবে ?? সেটা ডিটারমাইন করবে কিভাবে ??  এই কারণে , আমরা একাধিক ক্লাস থেকে একটা ক্লাসকে ইনহেরিটেড করতে পারি না ।। এই সমস্যা কে , বলা হয় ডায়মন্ড প্রবলেম ( Diamond ) ।। 


আর এই জন্যই আমরা ইন্টারফেইস ব্যবহার করতে পারি ।। চলো , কিভাবে উপরের সমস্যা'কে দূর করা যায় ?? ইনহেরিটেন্স ইউজ করে , দেখে আসি ------------

আমরা , দুইটা ক্লাস ক্রিয়েট করবো  B  &  C  নাম দিয়ে ।। তারপর সেই দুইটা ক্লাস থেকে ইনহেরিটেড করে আরো একটা ক্লাস ক্রিয়েট করবো  D নামে , তবে ইনহেরিটেড করবো - ইন্টারফেইস দিয়ে  ।। চলো দেখে আসি ,

using System;

 interface IB
{
     void Bdisplay();
}
  class B:IB
{
    public  void Bdisplay()
    {
        Console.WriteLine(" This is class B Implementation");
    }
}

 interface IC
{
     void Cdisplay();
}
 class C:IC
{
    public void Cdisplay()
    {
        Console.WriteLine(" This is class C Implementation");
    }
}

public class D:IC,IB
{
    B b = new B();
    C c = new C();
    public void Bdisplay()
    {
        b.Bdisplay();
    }
    public void Cdisplay()
    {
        c.Cdisplay();
    }

}

public class Program
{
    public static void Main()
    {
        D d = new D();
        d.Bdisplay();
        d.Cdisplay();
        Console.ReadKey();
       
    }

}

তাহলে , আমরা একটা ক্লাসে দুইটা ক্লাসকে একত্রিত করেই কাজ করেছি , তবে ক্লাস দুইটির ইন্টারফেইস ব্যবহার করে ।। এই কাজটা কিন্তু আমরা - ইনটারফেইস ছাড়া করতে পারতাম না ।। এটা ইতিমধ্যেই দেখেছি ।। আর এই জন্যই ডায়ামোন্ড প্রবলেম এর সমাধান হিসেবে ইন্টারফেইস ব্যবহার করি ।। তাহলে আমরা , মাল্টিপল ক্লাস ইনহেরিটেন্স দেখলাম ইন্টারফেইস ব্যবহার করে ।।

তো , আশা করি , সামনে বিষয়গুলই আরো ক্লিয়ার হবে ।। আজ এইটুকুই -----------




















No comments:

Post a Comment