জাভা পলিমরফিজম বাংলা - Polymorphism in java bangla

জাভা পলিমরফিজম বাংলা - Polymorphism in java bangla

জাভাতে পলিমরফিজম কি? what is polymorphism in java

পলিমরফিজম হচ্ছে গ্রিক শব্দ। ইংরেজিতে "Poly-Morphism" দুটি শব্দ এখানে poly শব্দের অর্থ অনেক এবং "Morphism" শব্দের অর্থহ রুপ। অর্থাৎ অনেক রুপ, যদি কোনো অবজেক্টের অনেক ধরণের রুপ থাকে তবে তাকে পলিমরফিজম বলে। 
Polymorphism: Polymorphism is the Greek word whose meaning is the same object having different behavior.
উদাহরণস্বরূপ আপনি একজন ব্যক্তি যদি আপনি আপনার শিক্ষকের কাছে যান তাহলে আপনি এক রকমের আচরণ করেন আবার আপনি আপনার বন্ধুদের কাছে গেলে আরেক রকমের আচরণ করেন। আপনি আপনার শিক্ষকের সাথে নম্র ভদ্র আচরণ করেন আবার আপনি আবার বন্ধুদের সাথে কথা বললে আপনি যা ইচ্ছা তাই বলেন অথচ আপনি একই ব্যক্তি, আবার দেখা যাই পরিস্তিতি বুঁজে আপনি এক এক সময় এক এক রূপ ধারণ করেন এটাই পলিমরফিজম।  

  • void person(Teacher)
  • void person(Friend)
  • void person(Customer)
  • void person(Student)

পলিমরফিজমের প্রকারভেদ : (types of polymorphism in java)

আমরা জাভা'তে দুইভাবেই পলিমরফিজম অর্জন করতে পারি :
১. কম্পাইল টাইম পলিমরফিজম / স্ট্যাটিক পলিমরফিজম / আর্লি বাইন্ডিং - (Compile Time Polymorphism / Static Polymorphism / Early Binding)
২. রান  টাইম পলিমরফিজম / ডাইনামিক পলিমরফিজম / লেট বাইন্ডিং - (Run Time Polymorphism / Dynamic Polymorphism / Late Binding)
কম্পাইল টাইম পলিমরফিজম / স্ট্যাটিক পলিমরফিজম / আর্লি বাইন্ডিং এর সকল বিষয় নিয়ে আলোচনা :

কম্পাইল টাইম পলিমরফিজম :  (compile Time Polymorphism)

যে পলিমরফিজম কম্পাইলের সময়েই সব কাজ শেষ হয়ে যাই তাকে কম্পাইল টাইম পলিমরফিজম / স্ট্যাটিক পলিমরফিজম / আর্লি বাইন্ডিং বলে। কম্পাইল টাইম পলিমরফিজমে কম্পাইল গুরুত্বপূর্ণ ভূমিকা পালন করে কারণ তখন কম্পাইল আগের থেকেই জানে কখন কোন মেথড আগে কল করা হবে।
A polymorphism that has existed at the time of compilation is called compile-time or early binding or static polymorphism.
কম্পাইল টাইম পলিমরফিজম শুধুমাত্র মেথড ওভারলোডিং (Method Overloading) ধারায় অর্জন করা যাই। তাই চলুন মেথড ওভারলোডিং সম্পর্কে জানি।     

মেথড ওভারলোডিং কম্পাইল টাইম পলিমরফিজম :

যদি একটি ক্লাসে একের অধিক মেথড থাকে একই নামে এবং মেথড গুলিতে ভিন্ন ভিন্ন ধরণের প্যারামিটার থাকে তবে তাকে মেথড ওভারলোডিং  (Method Overloading) বলে। 
 Whenever a class contains more than one method with the same name and different types of parameters are called method overloading.
মেথড ওভারলোডিং সিনটেক্স (Method Overloading syntax) :
  1. return-type method-name(parameter1) 
  2. return-type method-name(parameter1, parameter2) 
  3. return-type method-name(parameter1, parameter2, parameter3) 
চলুন কম্পাইল টাইম পলিমরফিজম অর্জন করি মেথড ওভারলোডিং দ্বারা ;


public class ctpolym {
    void sum()
    {
        int a=5,b=8,c;
        c=a+b;
        System.out.println("sum is "+c);              
    }
     void sum(int a, int b)
    {
        int c;
        c=a+b;
        System.out.println("sum is "+c);              
    }
       void sum(int a, double b)
    {
        double c;
        c=a+b;
        System.out.println("sum is "+c);              
    }
    public static void main(String[] args)
    {
        ctpolym res=new ctpolym();
        res.sum();
         res.sum(5,9);
          res.sum(3,2.5);
    }
}



এখানে ctpolym নামে ক্লাসে sum নামে একাধিক মেথড রয়েছে যেখানে ভিন্ন ভিন্ন প্যারামিটার যাওয়ার মাধ্যমে কম্পাইলার  একই নামের মেথডকে আলাদা করে। এখানে ৩ নাম্বার মেথড এ c আর মান double রাখা হয় কারণ b আর মান ডাবল ছিল তাই যোগফলও double হবে। 

রান টাইম পলিমরফিজম (Run Time Polymorphism):

যে পলিমরফিজম প্রোগ্রাম রানের সময় শেষ হয়ে যাই তাকে রান টাইম পলিমরফিজম / ডাইনামিক পলিমরফিজম / লেট বাইন্ডিং বলে। এখানে কম্পাইলের কোনো হাত থাকে না সব কাজ JVM সম্প্রাদন করে গুরুত্বপূর্ণ ভূমিকা পালন করে।
 A polymorphism that exists at the time of execution of the program is called runtime polymorphism.
রান টাইম পলিমরফিজম এটিও শুধুমাত্র মেথড ওভারলোডিং (Method Overloading) ধারায় অর্জন করা যাই। তাই চলুন এর মেথড ওভারলোডিং সম্পর্কে জানি। 

মেথড ওভারলোডিং রান টাইম পলিমরফিজম : (Method Overloading runtime polymorphism in java)

যখন আমরা সুপার ক্লাস ও সাব ক্লাসে একই ধরণের মেথডের সাথে একই রকম প্যারামিটার ব্যবহার করি তখন তাকে মেথড ওভারলোডিং বলে। 
Whenever we write method in superclass and sub-class in such a way that method name and parameter must be the same name called method overriding.
রান টাইম পলিমরফিজম মেথড ওভারলোডিং সিনটেক্স (Method Overloading syntax) :
Class Cat
{
  Void dis( )
}

Class Dog extends Cat
{
  Void dis( )
}

মেথড ওভারলোডিং রান  টাইম পলিমরফিজম নিয়ম :

যখন সাব ক্লাসের অবজেক্ট তৈরী করা হবে তখন JVM অনুসন্ধান করবে যে সুপার ক্লাসে মেথড আছে কিনা। যদি সুপার ক্লাসে মেথড না পাই, JVM তাহলে কম্পাইলিশন সমস্যা বলবে। আর যদি মেথড পাই তখন JVM অনুসন্ধান করবে মেথড ওভাররাইডেন কি না। যদি মেথড ওভাররাইডেন হয় তাহলে JVM সাব ক্লাসের মেথডকে কল করবে আর যদি ওভাররাইডেন না হয় তাহলে সুপার ক্লাসের মেথডকে কল করবে। 

নিচে মেথড ওভারলোডিং দ্বারা রান টাইম পলিমরফিজম এর একটি প্রোগ্রাম কোড দেওয়া হলো :


class Animal //super class
{
    void name()
    {
        System.out.println("We dont know about this animal name");
    }
}
class Tiger extends Animal //sub class
{
    @Override
    void name()
    {
        System.out.println("It's a Tiger who are king of Jangle");
    }
}

public class finals {
     public static void main(String[] args)
    {
       Tiger ani=new Tiger();
       ani.name(); //its call sub class
    }
}



উপরের প্রোগ্রামটিতে কল হবে সাব ক্লাসের মেথড " It's a Tiger who are king of Jangle" বাক্যটি প্রিন্ট হবে। এখানে JVM প্রথমে অনুসন্ধান করেছে সুপার ক্লাসে কোনো মেথড আছে কিনা। যখন সে কোনো মেথড পাই পরে সে অনুসন্ধান করে সুপার ক্লাসের মেথড ও সাব ক্লাসের মেথড একই কিনা অথবা ওভাররাইডেন কিনা। যখন JVM দেখে মেথড একই অথবা ওভাররাইডেন তখন সে সাব ক্লাসকে কল করে। এখন দেখি কিভাবে সুপার ক্লাসের মেথডকে কল করতে হয় : 


class Animal //super class
{
    void name()
    {
        System.out.println("All animal in this category");
    }
}
class Tiger extends Animal //sub class
{
      void name2()
    {
        System.out.println("Tiger king of Jangle");
    }
}

public class finals {
     public static void main(String[] args)
    {
       Tiger ani=new Tiger();
       ani.name(); //call super class
    }
}



উপরের প্রোগ্রামটিতে কল হবে সুপার ক্লাসের মেথড " All animal in this category" বাক্যটি প্রিন্ট হবে। এখানে JVM প্রথমে অনুসন্ধান করেছে সুপার ক্লাসে কোনো মেথড আছে কিনা। যখন সে কোনো মেথড পাই পরে সে অনুসন্ধান করে সুপার ক্লাসের মেথড ও সাব ক্লাসের মেথড একই কিনা অথবা ওভাররাইডেন কিনা। যখন JVM দেখে মেথড এক না অথবা ওভাররাইডেন না তখন সে সুপার ক্লাসকে কল করে। এখন দেখি  কিভাবে সুপার ক্লাসের মেথড ও সাব ক্লাসের মেথডকে কল করতে হয় : 


class Animal 
{
    void name()
    {
        System.out.println("We dont know about this animal name");
    }
}
class Tiger extends Animal 
{
     
     @Override
      void name()
    {
        super.name();
        System.out.println("It's a Tiger who are king of Jangle");
    }
}

public class finals {
     public static void main(String[] args)
    {
       Tiger ani=new Tiger();
       ani.name(); //call sub class metod and its have also super class 

metod
    }
}