জাভা সংগ্রহ ফ্রেমওয়ার্কটি দেখে, আমি লক্ষ্য করেছি বেশ কয়েকটি ইন্টারফেসের মন্তব্য রয়েছে (optional operation)। এই পদ্ধতিগুলি ক্লাস বাস্তবায়নের অনুমতি দেয় UnsupportedOperationExceptionযদি তারা কেবল সেই পদ্ধতিটি প্রয়োগ করতে না চায়।
এর উদাহরণ হ'ল addAllপদ্ধতিতে Set Interface।
এখন, এই সিরিজের প্রশ্নের বিবরণ অনুসারে, ইন্টারফেসগুলি ব্যবহারটি কী আশা করতে পারে তার একটি সংজ্ঞায়িত চুক্তি।
ইন্টারফেসগুলি গুরুত্বপূর্ণ কারণ তারা শ্রেণি কী করে তা কীভাবে এটি থেকে কী করে তা আলাদা করে দেয়। কোনও ক্লায়েন্ট কী প্রত্যাশা করতে পারে তা সংজ্ঞায়িত চুক্তি বিকাশকারীকে যে কোনওভাবেই বেছে নেয় তা প্রয়োগ করতে মুক্ত করে, যতক্ষণ না তারা চুক্তিটি বহাল রাখে।
এবং
একটি ইন্টারফেস হ'ল কোনও পদক্ষেপটি করতে পারে এমন ক্রিয়াগুলির বর্ণনা ... উদাহরণস্বরূপ আপনি যখন হালকা স্যুইচটি ফ্লিপ করেন, আলোটি চলে যায়, আপনি কীভাবে যত্নশীল হন না, ঠিক কীভাবে তা করে। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে, একটি ইন্টারফেস হ'ল একটি এক্স "হওয়ার জন্য কোনও বস্তুর অবশ্যই থাকা সমস্ত ফাংশনের বিবরণ।
এবং
আমি মনে করি ইন্টারফেস ভিত্তিক পদ্ধতির উল্লেখযোগ্যভাবে সুন্দর। তারপরে আপনি আপনার নির্ভরতাগুলি সুন্দরভাবে উপহাস করতে পারেন এবং সবকিছুই মূলত কম শক্ত করে মিলিত হয়।
ইন্টারফেস + এক্সটেনশন (মিক্সিন) বনাম বেস ক্লাস
ইন্টারফেসের উদ্দেশ্য একটি চুক্তি সংজ্ঞায়িত করা এবং আপনার নির্ভরতাগুলি আলগাভাবে যুগল করে তোলা, এমন কোনও পদ্ধতিতে কী একধরণের UnsupportedOperationExceptionপরাজয়কে উদ্দেশ্য হিসাবে পরাভূত করে না? এর অর্থ আমি আর পাস করতে পারি না Setএবং কেবল ব্যবহার করতে পারি addAll। বরং আমাকে জানতে হবে যে Setআমার কী বাস্তবায়ন পাস হয়েছে, তাই আমি জানতে পারি আমি ব্যবহার করতে পারি কি addAllনা। এটা আমার কাছে বেশ মূল্যহীন বলে মনে হচ্ছে।
তাহলে কি লাভ UnsupportedOperationException? এটি কি কেবল উত্তরাধিকারের কোডটি তৈরি করছে এবং তাদের ইন্টারফেসগুলি পরিষ্কার করা দরকার? বা এর কি আরও সংবেদনশীল উদ্দেশ্য রয়েছে যা আমি মিস করছি?
src.zipদুর্দান্ত কাজ করে। এটি জেআরই মাঝে মাঝে ঠিক কী কোডটি চালাচ্ছে তা জাভাডকের কাছে স্থগিত করে না যা কিছুটা ভার্বোস হতে পারে তা জানতে সহায়তা করে।
addAllমধ্যে সংজ্ঞা দেওয়া হয়নিHashSet। এটি ডিফল্ট বাস্তবায়নে পিছিয়ে যায়AbstractCollectionযা সম্ভবত অবশ্যই ছুঁড়ে নাUnsupportedOperationException।