আজকের পুরো আলোচনা বুঝার আগে , ইনহেরিটেন্স , পলিমারফিজম , ইন্টারফেইস , ক্লাস এই চারটি বিষয় -এ পুরো বেসিক ধারণা থাকতে হবে , অন্যথায় এটা পরে খুব একটা বুঝতে পারবে না , আমি এর আগের পর্ব গুলোতে এটা নিয়ে আলোচনা করেছি , সুতরাং পারলে একবার চোখ বুলিয়ে নিও আরো একবার , তারপর - এটা শুরু করা ভালো হবে ।।
আজকে আমরা , মাল্টিপল ক্লাস ইনহেরিটেন্স কেনো করা যায় না ?? সেটা নিয়ে কথা বলবো ।।
চলো আগে একটা ছবি দেখে আসি ------------------------------------------------
আমরা উপরের ছবি অনুসারে একটা প্রোগ্রাম লিখেই ফেলি ।। চলো ------------------------
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();
}
}
তাহলে , আমরা একটা ক্লাসে দুইটা ক্লাসকে একত্রিত করেই কাজ করেছি , তবে ক্লাস দুইটির ইন্টারফেইস ব্যবহার করে ।। এই কাজটা কিন্তু আমরা - ইনটারফেইস ছাড়া করতে পারতাম না ।। এটা ইতিমধ্যেই দেখেছি ।। আর এই জন্যই ডায়ামোন্ড প্রবলেম এর সমাধান হিসেবে ইন্টারফেইস ব্যবহার করি ।। তাহলে আমরা , মাল্টিপল ক্লাস ইনহেরিটেন্স দেখলাম ইন্টারফেইস ব্যবহার করে ।।
তো , আশা করি , সামনে বিষয়গুলই আরো ক্লিয়ার হবে ।। আজ এইটুকুই -----------
আজকে আমরা , মাল্টিপল ক্লাস ইনহেরিটেন্স কেনো করা যায় না ?? সেটা নিয়ে কথা বলবো ।।
চলো আগে একটা ছবি দেখে আসি ------------------------------------------------
আমরা উপরের ছবি অনুসারে একটা প্রোগ্রাম লিখেই ফেলি ।। চলো ------------------------
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