CodeGym /Java Blog /এলোমেলো /জাভাতে পলিমরফিজম
John Squirrels
লেভেল 41
San Francisco

জাভাতে পলিমরফিজম

এলোমেলো দলে প্রকাশিত
ওহে! আজ আমরা OOP এর নীতির উপর পাঠের একটি সিরিজ শেষ করছি। এই পাঠে, আমরা জাভা পলিমারফিজম সম্পর্কে কথা বলব। পলিমরফিজম হল বিভিন্ন ধরনের সাথে কাজ করার ক্ষমতা যেন তারা একই ধরনের। অধিকন্তু, বস্তুর আচরণ তাদের প্রকারের উপর নির্ভর করে ভিন্ন হবে। আসুন এই বিবৃতিটি ঘনিষ্ঠভাবে দেখি। প্রথম অংশ দিয়ে শুরু করা যাক: 'অনেক ধরনের সাথে কাজ করার ক্ষমতা যেন তারা একই ধরনের'। কিভাবে বিভিন্ন ধরনের একই হতে পারে? এটা একটু অদ্ভুত শোনাচ্ছে :/ পলিমরফিজম কিভাবে ব্যবহার করবেন- ১আসলে, এটা সব খুব সহজ. উদাহরণস্বরূপ, এই পরিস্থিতি উত্তরাধিকারের সাধারণ ব্যবহারের সময় দেখা দেয়। দেখা যাক কিভাবে কাজ করে. ধরুন আমাদের একটি সিঙ্গেল রান() পদ্ধতি সহ একটি সাধারণ ক্যাট প্যারেন্ট ক্লাস আছে :

public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
এখন আমরা তিনটি শ্রেণী তৈরি করব যা বিড়ালের উত্তরাধিকারী : সিংহ , বাঘ এবং চিতা

public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
তাই আমাদের 3টি ক্লাস আছে। আসুন সেই পরিস্থিতির মডেল করি যেখানে আমরা তাদের সাথে কাজ করতে পারি যেন তারা একই শ্রেণীর। কল্পনা করুন যে আমাদের একটি বিড়াল অসুস্থ এবং ডাক্তার ডলিটলের সাহায্যের প্রয়োজন। আসুন একটি ডলিটল ক্লাস তৈরি করার চেষ্টা করি যা সিংহ, বাঘ এবং চিতাদের নিরাময় করতে পারে।

public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
মনে হচ্ছে সমস্যাটি সমাধান করা হয়েছে: ক্লাস লেখা হয়েছে এবং যেতে প্রস্তুত। কিন্তু আমরা যদি আমাদের কর্মসূচি বাড়াতে চাই তাহলে কী করব? আমাদের বর্তমানে মাত্র 3 প্রকার: সিংহ, বাঘ এবং চিতা। তবে বিশ্বে 40 টিরও বেশি ধরণের বিড়াল রয়েছে। কল্পনা করুন কি হবে যদি আমরা ম্যানুলস, জাগুয়ার, মেইন কুন, ঘরের বিড়াল এবং বাকি সকলের জন্য আলাদা ক্লাস যোগ করি। পলিমারফিজম কীভাবে ব্যবহার করবেন - 2প্রোগ্রাম নিজেই, অবশ্যই, কাজ করবে, কিন্তু প্রতিটি ধরনের বিড়াল নিরাময় করার জন্য আমাদের ডলিটল ক্লাসে ক্রমাগত নতুন পদ্ধতি যোগ করতে হবে। ফলস্বরূপ, এটি অভূতপূর্ব আকারে বৃদ্ধি পাবে। এখানেই পলিমরফিজম — "অনেক ধরণের সাথে কাজ করার ক্ষমতা যেন তারা একই ধরণের" — আসে৷ একই জিনিস করার জন্য আমাদের অগণিত পদ্ধতি তৈরি করতে হবে না — একটি বিড়ালকে নিরাময় করুন৷ একটি পদ্ধতি তাদের সবার জন্য যথেষ্ট:

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
healCat () পদ্ধতিটি সিংহ , বাঘ এবং চিতা বস্তুকে গ্রহণ করতে পারে — এগুলি সবই বিড়ালের উদাহরণ :

public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
কনসোল আউটপুট: রোগী সুস্থ! রোগী সুস্থ! রোগী সুস্থ! তাই আমাদের Dolittleক্লাস বিভিন্ন ধরণের সাথে কাজ করে যেন তারা একই ধরণের। এখন দ্বিতীয় অংশটি মোকাবেলা করা যাক: "তাছাড়া, বস্তুর আচরণ তাদের প্রকারের উপর নির্ভর করে ভিন্ন হবে"। এটা সব খুব সহজ. প্রকৃতিতে, প্রতিটি বিড়াল একটি ভিন্ন উপায়ে চলে। সর্বনিম্ন, তারা বিভিন্ন গতিতে চালায়। আমাদের তিনটি বিড়ালের মধ্যে, চিতা সবচেয়ে দ্রুত, যখন বাঘ এবং সিংহ ধীর গতিতে দৌড়ায়। অন্য কথায়, তাদের আচরণ ভিন্ন। পলিমরফিজম আমাদের বিভিন্ন প্রকারকে এক হিসাবে ব্যবহার করার চেয়ে আরও বেশি কিছু করে। এটি আমাদের তাদের পার্থক্যগুলি মনে রাখতে দেয়, তাদের প্রত্যেকের জন্য নির্দিষ্ট আচরণ সংরক্ষণ করে। নিম্নলিখিত উদাহরণে এই প্রকাশ করে। ধরুন যে আমাদের বিড়াল, একটি সফল পুনরুদ্ধারের পরে, একটু দৌড় উপভোগ করার সিদ্ধান্ত নিয়েছে। আমরা এটিকে আমাদের ডলিটল ক্লাসে যুক্ত করব :

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
আসুন তিনটি প্রাণীর আচরণ করার জন্য একই কোড চালানোর চেষ্টা করি:

public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
এবং এখানে ফলাফল দেখতে কেমন: রোগী সুস্থ! সিংহ 80 কিমি/ঘন্টা বেগে চলে। রোগী সুস্থ! বাঘ 60 কিমি/ঘন্টা বেগে চলে। রোগী সুস্থ! চিতা 120 কিমি/ঘন্টা বেগে চলে এখানে আমরা স্পষ্ট দেখতে পাই যে বস্তুর নির্দিষ্ট আচরণ সংরক্ষিত আছে, যদিও আমরা তিনটি প্রাণীকে বিড়ালের কাছে 'সাধারণ' করার পর পদ্ধতিতে পাস করেছি । পলিমরফিজমের কারণে, জাভা ভালভাবে মনে রাখে যে এগুলি কেবল তিনটি বিড়াল নয়। তারা একটি সিংহ, একটি বাঘ এবং একটি চিতা, যেগুলো একেকজন একেকভাবে দৌড়ায়। এটি পলিমরফিজমের প্রধান সুবিধা চিত্রিত করে: নমনীয়তা। যখন আমাদের অনেক ধরণের দ্বারা ভাগ করা কিছু কার্যকারিতা বাস্তবায়নের প্রয়োজন হয়, তখন সিংহ, বাঘ এবং চিতাগুলি কেবল 'বিড়াল' হয়ে যায়। সমস্ত প্রাণী আলাদা, কিন্তু কিছু পরিস্থিতিতে একটি বিড়াল একটি বিড়াল, তার প্রজাতি নির্বিশেষে :) এখানে আপনার জন্য কিছু ভিডিও নিশ্চিতকরণ।
যখন এই 'সাধারণকরণ' অবাঞ্ছিত হয় এবং এর পরিবর্তে আমাদের প্রতিটি প্রজাতিকে ভিন্নভাবে আচরণ করার প্রয়োজন হয়, প্রতিটি প্রকার তার নিজস্ব কাজ করে। পলিমারফিজমের জন্য ধন্যবাদ, আপনি ক্লাসের বিস্তৃত পরিসরের জন্য একটি একক ইন্টারফেস (পদ্ধতির সেট) তৈরি করতে পারেন। এটি প্রোগ্রামগুলিকে কম জটিল করে তোলে। এমনকি যদি আমরা 40 ধরনের বিড়ালকে সমর্থন করার জন্য প্রোগ্রামটি প্রসারিত করি, তবুও আমাদের কাছে সবচেয়ে সহজ ইন্টারফেস থাকবে: সমস্ত 40টি বিড়ালের জন্য একটি একক রান() পদ্ধতি।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION