অন্য কোনও ভাষার মতো রুবির ইন্টারফেস রয়েছে ।
নোট করুন যে আপনাকে ইন্টারফেসের ধারণার সাথে সংঘাত না দেওয়ার বিষয়ে সতর্ক থাকতে হবে , যা interfaceজাভা, সি # এবং ভিবি.এনইটি প্রোগ্রামিংয়ের মূলশব্দ যা ধারণার সাথে একটি ইউনিটের দায়িত্ব, গ্যারান্টি এবং প্রোটোকলের একটি বিমূর্ত স্পেসিফিকেশন is ভাষা। রুবিতে আমরা প্রাক্তনটিকে সর্বদা ব্যবহার করি তবে পরবর্তীকালের সহজলভ্যতা নেই।
এই দুটি পার্থক্য করা খুব গুরুত্বপূর্ণ। কী গুরুত্বপূর্ণ ইন্টারফেস , না interface। interfaceআপনি উপযোগী প্রায় কাছাকাছি কিছুই বলে। জাভাতে চিহ্নিতকারী ইন্টারফেসগুলির চেয়ে ভাল এটি আর কিছুই প্রদর্শন করে না, যা ইন্টারফেসগুলি যার কোনও সদস্যই নেই: কেবল একবার দেখুন java.io.Serializableএবং java.lang.Cloneable; এই দুটি interfaceগুলি খুব আলাদা জিনিস বোঝায় , তবুও তাদের ঠিক একই স্বাক্ষর রয়েছে।
সুতরাং, দুই যদি interfaceগুলি মানে ভিন্ন জিনিস, একই স্বাক্ষর আছে, কি ঠিক হল interfaceএমনকি আপনি নিশ্চয়তা?
আর একটি ভাল উদাহরণ:
package java.util;
interface List<E> implements Collection<E>, Iterable<E> {
void add(int index, E element)
throws UnsupportedOperationException, ClassCastException,
NullPointerException, IllegalArgumentException,
IndexOutOfBoundsException;
}
কি ইন্টারফেস এর java.util.List<E>.add?
- সংগ্রহের দৈর্ঘ্য হ্রাস না করে
- সংগ্রহের আগে থাকা সমস্ত আইটেমগুলি এখনও আছে
- যে
elementসংগ্রহে আছে
এবং এর মধ্যে আসলে কোনটি দেখা যাচ্ছে interface? কেউই না! এর মধ্যে এমন কিছু নেই interfaceযা বলছে যে Addপদ্ধতিটি অবশ্যই একেবারে যুক্ত করতে পারে, এটি সংগ্রহ থেকে কোনও উপাদান সরাতে পারে ।
এটি এর পুরোপুরি বৈধ বাস্তবায়ন interface:
class MyCollection<E> implements java.util.List<E> {
void add(int index, E element)
throws UnsupportedOperationException, ClassCastException,
NullPointerException, IllegalArgumentException,
IndexOutOfBoundsException {
remove(element);
}
}
আরেকটি উদাহরণ: java.util.Set<E>এটি আসলে কোথায় বলে যে এটি, এটি আপনি জানেন, একটি সেট ? কোথাও! বা আরও স্পষ্টভাবে ডকুমেন্টেশনে। ইংরেজীতে.
interfacesজাভা এবং। নেট থেকে উভয় ক্ষেত্রেই সমস্ত প্রাসঙ্গিক তথ্য প্রকৃতপক্ষে ডক্সে থাকে, প্রকারভেদে নয়। সুতরাং, প্রকারগুলি যদি আপনাকে যাইহোক কিছু আকর্ষণীয় কিছু না বলে, তবে কেন সেগুলিকে এগুলিতে রাখবেন? শুধু ডকুমেন্টেশনে আটকাবেন না কেন? এবং রুবি ঠিক তাই করে।
মনে রাখবেন যে অন্যান্য ভাষা রয়েছে যেখানে ইন্টারফেসটি আসলে অর্থবহ উপায়ে বর্ণিত হতে পারে। তবে, সেই ভাষাগুলি সাধারণত " " ইন্টারফেসকে বর্ণনা করে এমন কন্সট্রাক্টকে কল করে না interface, তারা এটিকে কল করে type। নির্ভরশীল-টাইপড প্রোগ্রামিং ভাষায়, উদাহরণস্বরূপ, বৈশিষ্ট্যগুলি প্রকাশ করতে পারেন যে sortফাংশনটি মূল হিসাবে একই দৈর্ঘ্যের সংগ্রহ প্রদান করে, মূল যে প্রতিটি উপাদান থাকে তাও সাজানো সংগ্রহে থাকে এবং এটির চেয়ে বড় কোনও উপাদান নেই একটি ছোট উপাদান উপস্থিত হয়।
সুতরাং, সংক্ষেপে: রুবির জাভার সমতুল্য নেই interface। এটা তোলে নেই , তবে, একটি সমতুল্য একটি জাভা আছে ইন্টারফেস , এবং এটি ঠিক জাভা হিসাবে একই আছে: ডকুমেন্টেশন।
এছাড়াও, জাভা-র মতো, স্বীকৃতি টেস্টগুলি ইন্টারফেসগুলিও নির্দিষ্ট করতে ব্যবহৃত হতে পারে ।
বিশেষ করে, রুবি এ, ইন্টারফেস একটি বস্তুর এটা করতে পারি দ্বারা নির্ধারিত হয় না , কি না classহয়, বা কি moduleএটি দ্রবণ। একটি যে কোনো বস্তু <<পদ্ধতি যোগ করা যেতে পারে। এই ইউনিট পরীক্ষা, যেখানে আপনি কেবল একটি মধ্যে পাস করতে পারেন খুবই দরকারী Arrayবা Stringএকটি আরো জটিল পরিবর্তে Logger, যদিও Arrayএবং Loggerএকটি সুনির্দিষ্ট ভাগ করি না interfaceআসলে তারা উভয় একটি পদ্ধতি বলা আছে ছাড়া <<।
আরেকটি উদাহরণ হল StringIO, যা কার্যকরী একই ইন্টারফেস হিসাবে IOএবং এইভাবে একটি বৃহৎ অংশ ইন্টারফেস এর File, কিন্তু ব্যতীত কোন সাধারণ পূর্বপুরুষ ভাগ না করে Object।