"হ্যালো, অ্যামিগো! অবশেষে আমরা সত্যিই আকর্ষণীয় কিছুতে এসেছি। আজ আমি আপনাকে একাধিক উত্তরাধিকার সম্পর্কে বলতে যাচ্ছি । একাধিক উত্তরাধিকার প্রকৃতপক্ষে একটি খুব আকর্ষণীয় এবং শক্তিশালী হাতিয়ার। এবং যদি এটি বিভিন্ন সমস্যার জন্য না হতো, তাহলে জাভা ক্লাসের একাধিক উত্তরাধিকার সমর্থন করবে। কিন্তু এটা করে না, তাই আমাদের অবশ্যই ইন্টারফেসের একাধিক উত্তরাধিকার নিয়ে সন্তুষ্ট থাকতে হবে । যা বেশ চমৎকার।"

একাধিক ইন্টারফেসের উত্তরাধিকার - 1

কল্পনা করুন আপনি একটি কম্পিউটার গেম লিখছেন। এবং এর অক্ষরগুলি (আপনার বস্তুগুলি) অবশ্যই খুব জটিল উপায়ে আচরণ করতে হবে: একটি মানচিত্রের উপর হাঁটা, আইটেম সংগ্রহ করা, অনুসন্ধানগুলি সম্পাদন করা, অন্যান্য চরিত্রের সাথে যোগাযোগ করা, কাউকে হত্যা করা, অন্য কাউকে বাঁচানো। ধরা যাক আপনি সমস্ত বস্তুকে 20টি বিভাগে ভাগ করতে সক্ষম হয়েছেন। এর মানে হল, যদি আপনি ভাগ্যবান হন, তাহলে আপনি আপনার অবজেক্টগুলিকে সংজ্ঞায়িত করার জন্য মাত্র 20 টি ক্লাস দিয়ে যেতে পারবেন। কিন্তু এখানে ধরা আছে: এই বস্তুর মিথস্ক্রিয়া কত অনন্য ফর্ম থাকবে? প্রতিটি ধরণের বস্তুর 20টি অন্যান্য ধরণের বস্তুর সাথে অনন্য মিথস্ক্রিয়া থাকতে পারে (আমরা একই ধরণের বস্তুর সাথে মিথস্ক্রিয়া গণনা করছি)। অন্য কথায়, আপনাকে 20 x 20 = 400 ইন্টারঅ্যাকশনের জন্য কোড লিখতে হবে! এবং যদি অনন্য বস্তুর প্রকারের সংখ্যা 20 নয়, 100 হয়, তাহলে মিথস্ক্রিয়া সংখ্যা 10,000 হতে পারে!

"ওহ! এখন আমি বুঝতে পারছি কেন প্রোগ্রামিং এত কঠিন কাজ।"

"এটি সহজ। প্রচুর বিমূর্ততার জন্য ধন্যবাদ। এবং ইন্টারফেসের একাধিক উত্তরাধিকারের জন্য সামান্য ধন্যবাদ ছাড়াই।"

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

একটি বড় প্রোগ্রাম লেখার সময়, বিকাশকারীরা সাধারণত এটি শুরু থেকেই করে:

1) সমস্ত ক্ষমতা/ ভূমিকা চিহ্নিত করুন।

2) এই ভূমিকাগুলির মধ্যে মিথস্ক্রিয়া সংজ্ঞায়িত করুন।

3) তারপর কেবল সমস্ত ক্লাসে ভূমিকা বরাদ্দ করুন।

"হয়তো একটা উদাহরণ?"

"অবশ্যই। এর কার্টুন «টম এবং জেরি» ভূমিকা তাকান।"

জাভা কোড বর্ণনা
interface Moveable
{}
- ভূমিকা / সরানোর ক্ষমতা।
interface Eatable
{}
- ভূমিকা/খাবার ক্ষমতা।
interface Eat
{}
- ভূমিকা/কাউকে খাওয়ার ক্ষমতা।
class Tom extends Cat implements Moveable, Eatable, Eat
{}
টম একটি বিড়াল যার তিনটি ভূমিকা রয়েছে:
1) সে নড়াচড়া করতে পারে
2) সে কাউকে খেতে পারে
3) তাকে কেউ খেতে পারে (একটি কুকুর)
class Jerry extends Mouse implements Moveable, Eatable
{}
জেরি হল একটি ইঁদুর যার দুটি ভূমিকা রয়েছে:
1) সে নড়াচড়া করতে পারে
2) তাকে কেউ খেয়ে ফেলতে পারে
class Killer extends Dog implements Moveable, Eat
{}
হত্যাকারী দুটি ভূমিকা সহ একটি কুকুর: 1) সে নড়াচড়া করতে পারে 2) সে কাউকে খেতে পারে

শুধুমাত্র এই তিনটি ভূমিকা (ইন্টারফেস) জেনে আপনি একটি প্রোগ্রাম লিখতে পারেন এবং এই ভূমিকাগুলির মধ্যে সঠিক মিথস্ক্রিয়া বর্ণনা করতে পারেন। উদাহরণস্বরূপ, একটি বস্তু "আপনি খেতে পারেন" এর পরে (মুভেবল ইন্টারফেসের মাধ্যমে) তাড়া করবে এবং "যে আপনাকে খেতে পারে" এর থেকে পালিয়ে যাবে। এবং এই সব নির্দিষ্ট বস্তু সম্পর্কে না জেনে. আপনি যদি প্রোগ্রামে আরও অবজেক্ট (ক্লাস) যোগ করেন এবং এই ভূমিকাগুলি রাখেন তবে এটি এখনও সুন্দরভাবে কাজ করবে, আপনার বস্তুর আচরণ নিয়ন্ত্রণ করবে।