Vivasoft-logo

ইন্টারফেসের শর্ত বা চুক্তি এবং নামকরণের উদাহরণ

একটি ছোট এক্সামপল দিয়ে শুরু করা যাক, যা আগে দেখলাম তাতে কিছু যোগ করি,

আমার প্লেএবল (Playable) ইন্টারফেস এ,

  1. স্টপ (Stop) মেথড সিগনেচার (Method Signature) যোগ করি।
  2. এখানে একটা জিনিস লক্ষ্যনীয় যে ইন্টারফেসের নাম সাধারণত এজেক্টিভ (adjective) বা Suffix এ এবল (-able) হয়ে থাকে। যেমন, Java : Moveable – যার মধ্য move() বিহেভিয়ার থাকবে, Soundable – যার মধ্য sound() বিহেভিয়ার থাকবে, কিন্তু Noun হতে পারে। C# : IMoveable – যার মধ্য move() বিহেভিয়ার থাকবে, ISoundable – যার মধ্য sound() বিহেভিয়ার থাকবে, ISoundable.
  3. ইন্টারফেস দ্বারা কোন ক্লাস এ এক বা একাধিক রেস্পন্সিবিলিটি বা বিহেভিয়ার যুক্ত করা হয়ে থাকে।

এখন এই প্লেএবলে (Playable) ইন্টারফেসকে আমি যদি কোন কনক্রিট (Concrete) ক্লাসে রূপান্তরিত চাই, তাহলে এই ইন্টারফেসের সব মেথড, কনক্রিট (Concrete) ক্লাসকে ইমপ্লিমেন্ট করতে হবে।

উদাহরণ হিসেবে ধরে নিচ্ছি আমরা ভিএলসি প্লেয়ার (VlcPlayer) নামে একটি প্লেয়ার তৈরি করছি যা এই প্লেএবলে (Playable) ইন্টারফেসকে ইমপ্লিমেন্ট করে

জাভা (Java) উদাহরণ

লিংকঃ http://tpcg.io/_IXHOTQ

// জাভা (Java) – Interface
interface Playable {
    void play();
    void stop();
}

তাহলে,

//জাভা (Java) – VlcPlayer
class VlcPlayer implements Playable {
    public void play() {
        System.out.println(“Vlc player is playing video.”);
    }
    public void stop() {
        System.out.println(“Vlc player is paused.”);
    }
}

অ্যাবস্ট্র্যাকশন ও ইন্টারফেসে এবিলিটি বোঝায়, তা বঝার জন্য আমরা একটা ছোট মেথড তৈরি করি, মেথডটির নাম টেস্টপ্লেবল (testPlayable), যাতে আমরা প্লেবল ইন্টারফেসটাকে গ্রহণ করব এবং তার প্লে (Play) এবং স্টপ (Stop) মেথড কে কল (Call or Invoke) করব। এখানে আমরা, কনক্রিট (Concrete) ক্লাসের ইমপ্লিমেন্টশন (Implementation) সম্পর্কে জানি না।

public class HelloWorld {
    public static void testPlayable(Playable p) {
        p.play();
        p.stop();
    }
    public static void main(String []args) {
        System.out.println(“Vlc Player Test!”);
        testPlayable(new VlcPlayer());
    }
}

Output:

//Output – আউটপুট
Vlc Player Test!
Vlc player is playing video.
Vlc player is paused.

অ্যাবস্ট্র্যাকশন ও ইন্টারফেস খুব পাওয়ারফুল concept যা দিয়ে অনেক ভালো এপ্লিকেশন ডিজাইন করা সম্ভব, ইন্টারফেস ব্যবহার করে অ্যাপ্লিকেশন কে ডি-কাপল (De-couple) করা যায়, যার মাধ্যমে এপ্লিকেশনে লো লেভেল ডিপেন্ডেন্সি অ্যাভয়েড করে হাই লেভেল ডিপেন্ডেন্সি নিয়ে অ্যাবস্ট্রাকশনের মাধ্যমে কাজ করা যায়। এই ডি-কাপলিং (De-coupling) এর ব্যাপারটা আমরা ডিজাইন প্যাটার্ন বুটক্যাম্পে (Bootcamp) এ শিখব।

একইভাবে আমরা এখন সি# (C#) এক্সাম্পল দেখব।

সি# (C#) পরিবর্তন সমূহঃ

  1. ইন্টারফেস ইমপ্লিমেন্ট করার জন্য “implements” এর পরিবর্তে “:” ব্যবহার করে।
  2. আউটপুটে প্রিন্ট করার জন্য System.out.println এর পরিবর্তে Console.WriteLine ব্যবহার করে।
  3. এন্ট্রি পয়েন্ট হিসেবে main এর পরিবর্তে Main ব্যবহার করে।
  4. ক্লাস এবং ইন্টারফেসের নাম, এবং মেথডের নামের জন্য PascalCasing ব্যবহার করে।
  5. ইন্টারফেসের নামে – “I” – prefix ব্যবহার করে, যা তাদের ইন্টারফেস হিসেবে চিহ্নিত করে। (পুরোপুরি নেইমিং কনভেনশন শেখার জন্য নেইমিংকনভেনশন সেকশন টা দেখার অনুরোধ রইলো।)
  6. আমরা এখানে পাবলিক অ্যাক্সেস মডিফায়ার ব্যবহার করেছি। আমরা যদি একই নেমস্পেস (namespace) এর ভেতরে ডেফিনেশন লিখাটা, যেমন ক্লাস এবং ইন্টারফেস যদি একিই নেইমস্পেস (namespace) থাকত, তাহলে পাবলিক এক্সেস মডিফায়ার ব্যবহার না করলেও হত। যার উদাহরণ আমরা পরে দেখব।