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

নির্দিষ্ট আচরণ সমর্থন করার জন্য ইন্টারফেস বিদ্যমান - 1

বৃহত্তর অর্থে, যেকোনো ইন্টারফেস হল কোনো কিছুর সাথে অন্য কিছুর সাথে যোগাযোগ করার একটি প্রক্রিয়া। উদাহরণস্বরূপ, একটি টিভি রিমোট একটি দূরবর্তী ইন্টারফেস। একটি কুকুর কমান্ড বোঝে এবং কার্যকর করে, যার অর্থ কুকুর একটি ভয়েস (নিয়ন্ত্রণ) ইন্টারফেস সমর্থন করে। সবকিছুর সংক্ষিপ্তসারে, আমরা বলতে পারি যে একটি ইন্টারফেস হল দুটি জিনিসের ইন্টারঅ্যাক্ট করার জন্য একটি প্রমিত উপায়, যেখানে উভয় পক্ষই মান জানে। যখন একজন ব্যক্তি একটি কুকুরকে "বসতে" বলেন, তখন তার আদেশ একটি «কুকুর ভয়েস-কন্ট্রোল ইন্টারফেসের» অংশ, এবং যদি কুকুরটি আদেশ মেনে চলে, তাহলে আমরা বলি যে কুকুরটি ইন্টারফেসটিকে সমর্থন করে।

তাই এটা প্রোগ্রামিং. পদ্ধতি হল একটি বস্তুর উপর, তার ডেটাতে সম্পাদিত ক্রিয়া। এবং যদি একটি ক্লাস নির্দিষ্ট পদ্ধতি প্রয়োগ করে, তবে এটি নির্দিষ্ট কমান্ডের "নির্বাহকে সমর্থন করে"। একটি ইন্টারফেসে পদ্ধতিগুলিকে একত্রিত করে আমরা কী লাভ করব?

1) প্রতিটি ইন্টারফেস , ক্লাসের মতই , একটি অনন্য নাম রয়েছে। উভয় পক্ষই 100% নিশ্চিত হতে পারে যে অন্য পক্ষ তাদের জানা সঠিক ইন্টারফেস সমর্থন করে এবং কিছু অনুরূপ ইন্টারফেস নয়।

2) প্রতিটি ইন্টারফেস একটি ক্লাসের উপর নির্দিষ্ট বিধিনিষেধ আরোপ করে যা এটিকে সমর্থন করতে যাচ্ছে। একটি ইন্টারফেস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত পদ্ধতিগুলি কল করা হলে ক্লাস (এর বিকাশকারী) সিদ্ধান্ত নেয় যে এটি কী করবে, তবে ফলাফলটি যুক্তিসঙ্গত প্রত্যাশার সীমার মধ্যে হওয়া উচিত। যদি আমরা একটি কুকুরকে "বসতে" আদেশ করি এবং তারপরে এটি 5 মিনিটের জন্য জায়গায় ঘুরতে থাকে এবং তারপর বসে থাকে, তাহলে এটি ইন্টারফেসটিকে সমর্থন করে। কিন্তু যদি এটি পরিবর্তে আপনাকে পায়ে ধরে ফেলে, তবে আমরা খুব কমই বলতে পারি যে এটি ইন্টারফেসকে সমর্থন করে। কমান্ড কার্যকর করা প্রত্যাশিত ফলাফল তৈরি করেনি।

ধরা যাক আপনি এবং আপনার বন্ধুরা একটি কম্পিউটার গেম লিখছেন। এবং আপনি একটি অক্ষর আচরণ প্রোগ্রাম বরাদ্দ করা হয়েছে. আপনার একজন সহকর্মী ইতিমধ্যেই পর্দায় সমস্ত অক্ষর প্রদর্শনের জন্য কোড লিখেছেন৷ একজন দ্বিতীয় সহকর্মী, যিনি গেমটিকে ডিস্কে সংরক্ষণ করার জন্য দায়ী, একটি ফাইলে সমস্ত গেম অবজেক্ট সংরক্ষণ করার জন্য কোড লিখেছেন। তাদের প্রত্যেকে প্রচুর কোড লিখেছে এবং সেই কোডের সাথে ইন্টারফেস করার জন্য একটি ইন্টারফেস তৈরি করেছে। উদাহরণস্বরূপ, এটি এই মত দেখতে হতে পারে:

জাভা কোড বর্ণনা
interface Saveable
{
 void saveToMap(Map<String, Object> map);
 void loadFromMap(Map<String, Object> map);
}
- একটি মানচিত্র থেকে একটি বস্তু সংরক্ষণ/লোড করার জন্য ইন্টারফেস।
interface Drawable
{
 void draw(Screen screen);
}
- পাস করা স্ক্রীন অবজেক্টের ভিতরে একটি বস্তু আঁকার জন্য ইন্টারফেস।
class PacMan implements Saveable, Drawable
{}
- আপনার ক্লাস, যা দুটি ইন্টারফেস সমর্থন করে।

অন্য কথায়, যেকোনো ইন্টারফেস (ইন্টারফেসের গ্রুপ) সমর্থন করার জন্য, আপনার ক্লাস অবশ্যই:

1) তাদের উত্তরাধিকারী

2) তাদের মধ্যে ঘোষিত পদ্ধতিগুলি বাস্তবায়ন করুন

3) পদ্ধতিগুলিকে অবশ্যই তা করতে হবে যা তারা করতে চেয়েছিল।

তারপর প্রোগ্রামের বাকি কোড, যা আপনার ক্লাস এবং এর অবজেক্ট সম্পর্কে কিছুই জানে না, আপনার ক্লাসের সাথে কাজ করতে পারে।

"কেন কোড আমার ক্লাস সম্পর্কে কিছু জানতে পারে না?"

"ধরা যাক আপনি এমন একটি প্রোগ্রাম থেকে কোড নিয়েছেন যা এক বছর আগে কেউ লিখেছিল। অথবা ধরুন আপনার বন্ধুরা গেম ইঞ্জিনটি অন্য কারও কাছ থেকে কিনেছে/লাইসেন্স করেছে। আপনার কাছে গেমটির জন্য কার্যকরী কোড রয়েছে। হাজার হাজার বস্তু যা একে অপরের সাথে যোগাযোগ করে। এবং তারা আপনি যদি আপনার ক্লাসগুলি সঠিকভাবে প্রয়োগ করা ইন্টারফেসের মাধ্যমে সেই মিথস্ক্রিয়াটি ঘটান তবে সহজেই আপনার বস্তুর সাথে সঠিকভাবে ইন্টারঅ্যাক্ট করতে পারে ।"

"দূর! আমি জানতাম না যে এটা সম্ভব।"

"সব বড় প্রজেক্টই এভাবে কাজ করে। মানুষ অনেক আগেই স্ক্র্যাচ থেকে লেখা বন্ধ করে দিয়েছে।"

মানুষ প্রতিবার গণিত এবং বর্ণমালাকে নতুন করে উদ্ভাবন করে না। পরিবর্তে, তারা তাদের আগে উদ্ভাবিত সমস্ত কিছু অধ্যয়ন করে।