ট্র্যাক
/
Java
Java
/
সিলেবাস
/
ইন্টারফেস
ইন

ইন্টারফেস মধ্যে Java

১টি অনুশীলনী

ইন্টারফেস সম্পর্কে

interfaces হলো একটি ক্লাসের ব্যবহারকে তার ইমপ্লিমেন্টেশন থেকে ডিকাপলিং করার প্রধান উপায়। এই ডিকাপলিং ইমপ্লিমেন্টেশন রক্ষণাবেক্ষণে নমনীয়তা দেয় এবং টাইপ সেফ জেনেরিক আচরণ সমর্থনে সহায়তা করে।

ইন্টারফেসের সিনট্যাক্স অনেকটা ক্লাসের মতোই, শুধু পার্থক্য হলো এতে মেথডগুলি কেবল সিগনেচার রূপে থাকে, কোনো বডি দেওয়া হয় না।

public interface Language {
    String speak();
}

public interface ItalianLanguage extends Language {
    String speak();
    String speakItalian();
}

public interface ScriptConverter {
    void setVersion(String version);
    String getVersion();
    String convertCyrillicToLatin(String cyrillic);
}

ইন্টারফেসটি ইমপ্লিমেন্ট করা ক্লাসকে ইন্টারফেসে ডিফাইন করা সব অপারেশন ইমপ্লিমেন্ট করতে হবে।

সাধারণত ইন্টারফেস নিচের এক বা একাধিক কাজ করে:

  • ব্যবহার করা কোড যেন বিভিন্ন ক্লাসকে জেনেরিকভাবে দেখতে পারে তা সম্ভব করা। এখানে ইন্টারফেস একটি বেস ক্লাসের মতোই ভূমিকা পালন করে। এর একটি উদাহরণ java.io.InputStream,
  • কোনো নির্দিষ্ট উদ্দেশ্যে কার্যকারিতার একটি উপসেট প্রকাশ করা (যেমন Comparable<T>)
  • একটি ক্লাসের পাবলিক API প্রকাশ করা, যাতে একাধিক ইমপ্লিমেন্টেশন পাশাপাশি থাকতে পারে। এর একটি উদাহরণ হলো টেস্ট ডাবল
public class ItalianTraveller implements ItalianLanguage {

    public String speak() {
        return "Ciao mondo";
    }

    public String speakItalian() {
        return speak();
    }
}

public class ItalianTravellerV2 implements ItalianLanguage {

    public String speak() {
        return "migliorata - Ciao mondo";
    }

    public String speakItalian() {
        return speak();
    }
}

public class FrenchTraveller implements Language {
    public String speak() {
        return "Ça va?";
    }
}

public class RussianTraveller implements Language, ScriptConverter {

    private String version;

    public void setVersion(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }

    public String speak()
    {
        return "Привет мир";
    }

    public String convertCyrillicToLatin(String cyrillic) {
        throw new UnsupportedOperationException();
    }
}

public class DocumentTranslator implements ScriptConverter {

    private String version;

    public void setVersion(String version) {
        this.version = version;
    }

    public String getVersion() {
        return version;
    }

    public String translate(String russian) {
        throw new UnsupportedOperationException();
    }

    public String convertCyrillicToLatin(String cyrillic) {
        throw new UnsupportedOperationException();
    }
}

উপরের ইন্টারফেস ও ক্লাসগুলি ব্যবহার করা কোড যেসব কাজ করতে পারে:

  • ভাষা নির্বিশেষে সব স্পিকারকে একইভাবে ব্যবহার করা।
  • স্ক্রিপ্ট রূপান্তর সামলানো কোনো সাবসিস্টেমকে, সে কোন নির্দিষ্ট টাইপ নিয়ে কাজ করছে তা গ্রাহ্য না করেই কাজ করতে দেওয়া।
  • ইতালীয় স্পিকারের পরিবর্তন সম্পর্কে কিছু না জেনে থাকা, যা সুবিধাজনক যদি ক্লাসের কোড ও ব্যবহারকারীর কোড আলাদা টিম রক্ষণাবেক্ষণ করে।

টেস্টিং সহজ করতে ইন্টারফেস ব্যাপকভাবে ব্যবহৃত হয়, কারণ এগুলি সহজে মকিং করার সুযোগ দেয়।

ইন্টারফেস extend কিওয়ার্ড দিয়ে অন্য ইন্টারফেস এক্সটেন্ড করতে পারে।

ইন্টারফেসের সদস্যরা ডিফল্টভাবে পাবলিক থাকে।

ইন্টারফেসে নেস্টেড টাইপ থাকতে পারে: interfaces, enums আর classes। এখানে যে ইন্টারফেসগুলির ভেতরে এরা থাকে, তারা নেমস্পেস হিসেবে কাজ করে। ইন্টারফেসের বাইরে থেকে নেস্টেড টাইপ ব্যবহার করতে হলে ইন্টারফেসের নাম আগে বসিয়ে ডট সিনট্যাক্স দিয়ে সদস্যটি চিহ্নিত করতে হয়।

নকশা অনুযায়ী Java মাল্টিপল ইনহেরিটেন্স সমর্থন করে না, তবে ইন্টারফেসের মাধ্যমে এক ধরনের মাল্টিপল ইনহেরিটেন্সের সুবিধা দেয়।

এছাড়া, ইন্টারফেসের মাধ্যমে পলিমরফিজম ইমপ্লিমেন্ট করা যায় এই ধারণাটিই ইন্টারফেস ব্যবস্থার মূল ভিত্তি।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

ইন্টারফেস শিখুন