যখন কেউ কেউ উত্তরাধিকারের Java OOP দৃষ্টান্ত সম্পর্কে কথা বলে, তখন তারা সাধারণত একটি উত্তরাধিকারী, একটি শিশু শ্রেণির সাথে একটি অভিভাবক শ্রেণিকে প্রসারিত করে। যাইহোক, আপনি যখন জাভা ইমপ্লিমেন্টস কীওয়ার্ড দেখেন, এর মানে হল আমরা বিমূর্ততার অন্য স্তরে চলে যাই এবং জাভাতে ইন্টারফেসের সাথে কাজ শুরু করি। আমরা ইন্টারফেসগুলি কী, সেগুলি কীসের জন্য, কীভাবে বাস্তবায়ন ঘটে সে সম্পর্কে কথা বলতে যাচ্ছি।
ইন্টারফেস এবং বাস্তবায়ন কি
আপনি সম্ভবত "ইন্টারফেস" শব্দটি বহুবার শুনেছেন। উদাহরণস্বরূপ, একটি কম্পিউটারে একটি ইনপুট ইন্টারফেস (মাউস এবং কীবোর্ড) রয়েছে, অনেক প্রোগ্রামের ব্যবহারকারী ইন্টারফেস রয়েছে। বিস্তৃত অর্থে, একটি ইন্টারফেস হল দুটি মিথস্ক্রিয়াকারী পক্ষের মধ্যে একটি লিঙ্ক। উদাহরণস্বরূপ, একই কীবোর্ড বা টিভি রিমোট কন্ট্রোল। প্রোগ্রামিং এবং বিশেষ করে জাভাতে, একটি ইন্টারফেস হল একটি নির্দিষ্ট চুক্তি যা বলে যে ক্লাসটি এটি বাস্তবায়ন করবে তারা কী করবে। একটি ইন্টারফেস শুধুমাত্র আচরণ সংজ্ঞায়িত করে। এটি এমন বস্তু সম্পর্কে কিছু বলে না যা এটি বাস্তবায়ন করবে। আপনি এইভাবে জাভাতে একটি ইন্টারফেস ঘোষণা করতে পারেন:
public interface MyInterface {
// constants declaration
// methods without implementation
// static methods
// default methods (default)
// private methods
}
এখানে জাভাতে ইমপ্লিমেন্টের একটি সিনট্যাক্স রয়েছে:
public class MyClass implements MyInterface{
//implementing the methods of MyInterface
//Other code
}
একটি ইন্টারফেস এটি নির্দিষ্ট না করে আচরণ বর্ণনা করে। উদাহরণস্বরূপ, একটি আচরণ যেমন "আন্দোলন" বিভিন্ন ধরণের বস্তুতে প্রয়োগ করা যেতে পারে: একটি সাইকেল, একজন ব্যক্তি, একটি গাড়ি, একটি নদীর পানি ইত্যাদি। সাঁতারের আচরণ হাঁস, জাহাজ বা মাছের আচরণ হতে পারে। এই বস্তুগুলির মধ্যে আর কিছু মিল নেই যে তারা নড়াচড়া করতে বা সাঁতার কাটতে পারে। হ্যাঁ, এবং সাঁতারের সাথে খুব আন্দোলন তারা খুব আলাদা। যাইহোক, জাভাতে আপনি হাঁস , নৌকা , মাছের ক্লাস তৈরি করতে পারেন এবং তাদের সাঁতারের ক্ষমতা প্রয়োগ করতে দিন। এখানে Java Implements কীওয়ার্ড ব্যবহার করা হয়।
কীওয়ার্ড উদাহরণ বাস্তবায়ন করুন
public interface Swimmable {
void moveForward();
void TurnRight();
void TurnLeft();
}
আপনি দেখতে পাচ্ছেন, পদ্ধতিগুলি নিজেরাই প্রয়োগ করা হয় না। কিন্তু আমরা ঘোষণা করেছি যে এই ইন্টারফেসটি বাস্তবায়নকারী ক্লাসগুলিকে অবশ্যই একটি সরল রেখায় সাঁতার কাটতে হবে, পাশাপাশি ডান এবং বামে ঘুরতে হবে। আসুন ক্লাস তৈরি করি যা এই ইন্টারফেসটি বাস্তবায়ন করবে।
public class Duck implements Swimmable {
//implementing the methods
public void moveForward() {
System.out.println(" Quack, I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft(){
System.out.println("I am turning left...");
}
public void Stop() {
System.out.println("Quack. I am relaxing on the surface of the water...");
}
}
public class Fish implements Swimmable {
public void moveForward() {
System.out.println("I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft() {
System.out.println("I am turning left...");
}
public void turnUp(){
System.out.println("I am turning up...");
}
public void turnDown(){
System.out.println("I am turning down...");
}
public void Stop() {
System.out.println("I am relaxing somewhere under the water surface...");
}
}
চুক্তি অনুসারে সাঁতারের যোগ্য ইন্টারফেস বাস্তবায়নকারী সমস্ত শ্রেণীকে অবশ্যই সামনের দিকে সাঁতার কাটতে সক্ষম হতে হবে ( মুভফরওয়ার্ড() পদ্ধতি প্রয়োগ করতে হবে, সেইসাথে ডান এবং বামে ঘুরতে হবে। এই পদ্ধতির বাস্তবায়ন প্রয়োজন। একটি হাঁস এবং একটি মাছ ভিন্নভাবে সাঁতার কাটে। ধরা যাক একটি মাছের দুটি অতিরিক্ত পদ্ধতি রয়েছে যা তার উপরে এবং নীচে সাঁতার কাটতে সক্ষম হয়৷ সাঁতারের যোগ্য ইন্টারফেসে এটি নেই৷ যাইহোক, যদি আমরা মাছ শ্রেণীর একটি শিশু তৈরি করি, উদাহরণস্বরূপ, টুনা বা সালমন, তারা, প্রতিটি "মাছ" এর মতো, উপরে এবং নীচে সাঁতার কাটতে সক্ষম হবে।
জাভাতে একাধিক ইন্টারফেস
আপনি সম্ভবত ইতিমধ্যেই জানেন, জাভা একাধিক উত্তরাধিকার সমর্থন করে না। এর মানে হল যে একটি ক্লাস শুধুমাত্র একটি সুপারক্লাস থেকে উত্তরাধিকারসূত্রে পাওয়া যেতে পারে। তবে একটি উপায়ে আপনি এখনও জাভাতে "একাধিক উত্তরাধিকার" ব্যবহার করতে পারেন, কারণ একটি ক্লাস একাধিক ইন্টারফেস প্রয়োগ করতে পারে।
To implement multiple interfaces, use the next syntax:
interface MyFirstInterface {
public void myMethod();
}
interface MySecondInterface {
public void myOtherMethod();
}
// MyClass implements both MyFirstInterface and MySecondInterface
class MyClass implements MyFirstInterface, MySecondInterface {
public void myMethod() {
//method implementation
}
public void myOtherMethod() {
//method implementation
}
}
একাধিক ইন্টারফেসের উদাহরণ
মনে রাখবেন যে হাঁস কেবল সাঁতার কাটতে পারে না, উড়তেও পারে। আসুন ফ্লাইট ইন্টারফেস লিখি এবং আমাদের হাঁসে এটি বাস্তবায়ন করি।
public interface Flyable {
double startAge = 0.1;
void fly();
}
public class Duck implements Swimmable, Flyable {
public void moveForward() {
System.out.println(" Quack, I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft(){
System.out.println("I am turning left...");
}
public void Stop() {
System.out.println("Quack. I am relaxing on the surface of the water...");
}
public void fly(){
System.out.println("I am flying!!!");
}
}
এবং আবার, এটা মনে রাখা গুরুত্বপূর্ণ যে কেন আমরা ইন্টারফেস লিখছি। ধরা যাক যদি এটি একটি পাখি, একটি বিমান, একটি স্কাইডাইভার এবং একটি ড্যান্ডেলিয়ন দ্বারা বাস্তবায়িত হয়, তাদের ফ্লাইট সম্পূর্ণ ভিন্ন হবে।
GO TO FULL VERSION