জাভা এবং সি # তে ইন্টারফেস এবং বিমূর্ত শ্রেণীর মধ্যে পার্থক্য
কন্টেন্ট
ইন্টারফেস এবং বিমূর্ত শ্রেণি উভয়ই ওওপিতে "অসম্পূর্ণ প্রকার" অবদান রাখে। কখনও কখনও আমাদের "কী করবেন" সংজ্ঞায়িত করার জন্য একটি সুপারক্লাসের প্রয়োজন হয় তবে "কীভাবে করবেন" তা নয়, অংশটি কীভাবে করা যায় তার প্রয়োজনীয়তা অনুসারে উদ্ভূত শ্রেণি দ্বারা প্রয়োগ করা হবে, "ইন্টারফেস”এটির একটি সমাধান সরবরাহ করুন। কখনও কখনও আমাদের একটি সুপারক্লাস শ্রেণীর প্রয়োজন যা কিছু সাধারণ কাঠামো সংজ্ঞায়িত করে যা উদ্ভূত শ্রেণীর দ্বারা প্রয়োগ করা যেতে পারে এবং কিছু নির্দিষ্ট কাঠামো যা উদ্ভূত শ্রেণীর দ্বারা ব্যবহার করা যেতে পারে, "বিমূর্ত ক্লাস”এটির একটি সমাধান সরবরাহ করে। ইন্টারফেস এবং বিমূর্ত শ্রেণীর মধ্যে মৌলিক পার্থক্য হ'ল ইন্টারফেসটি সম্পূর্ণ অসম্পূর্ণ এবং বিমূর্ত শ্রেণিটি আংশিকভাবে অসম্পূর্ণ।
- তুলনা রেখাচিত্র
- সংজ্ঞা
- মূল পার্থক্য
- উপসংহার
তুলনা রেখাচিত্র
তুলনা করার জন্য বেস | ইন্টারফেস | বিমূর্ত শ্রেণি |
---|---|---|
মৌলিক | যখন আপনার কেবল প্রয়োজনীয়তার জ্ঞান থাকে তবে এটির প্রয়োগ সম্পর্কে নয়, আপনি "ইন্টারফেস" ব্যবহার করেন। | আপনি যখন প্রয়োগগুলি সম্পর্কে আংশিক জানেন তখন আপনি "অ্যাবস্ট্রাক্ট ক্লাস" ব্যবহার করেন। |
পদ্ধতি | ইন্টারফেসে কেবল বিমূর্ত পদ্ধতি রয়েছে। | বিমূর্ত শ্রেণিতে বিমূর্ত পদ্ধতি পাশাপাশি কংক্রিট পদ্ধতি রয়েছে। |
পদ্ধতিগুলির অ্যাক্সেস মডিফায়ার | ইন্টারফেসের পদ্ধতিগুলি সর্বদা "সর্বজনীন" এবং "বিমূর্ত" হয়, যদিও আমরা ঘোষণা না করি। সুতরাং, এটি 100%, খাঁটি বিমূর্ত শ্রেণি হিসাবে বলা যেতে পারে। | এটি আবশ্যিক নয় যে বিমূর্ত শ্রেণিতে পদ্ধতিটি সর্বজনীন এবং বিমূর্ত হবে। এটিরও কংক্রিট পদ্ধতি থাকতে পারে। |
পদ্ধতিগুলির জন্য সীমাবদ্ধ সংশোধক | নিম্নলিখিত সংশোধকগুলির সাথে একটি ইন্টারফেস পদ্ধতি ঘোষণা করা যায় না: সর্বজনীন: ব্যক্তিগত এবং সুরক্ষিত বিমূর্ত: চূড়ান্ত, স্ট্যাটিক, সিঙ্ক্রোনাইজড, নেটিভ, স্ট্রাইকফপি। | বিমূর্ত শ্রেণীর পরিবর্তনশীলগুলির সংশোধনকারীদের উপর কোনও বিধিনিষেধ নেই। |
ভেরিয়েবলগুলির অ্যাক্সেস মডিফায়ার | ইন্টারফেস ভেরিয়েবলের জন্য অনুমোদিত অ্যাকসেস মডিফায়ারটি সর্বজনীন, স্থির এবং চূড়ান্ত আমরা ঘোষণা করছি কিনা তা। | বিমূর্ত শ্রেণিতে ভেরিয়েবলগুলি সর্বজনীন, স্থির, চূড়ান্ত হওয়া উচিত নয়। |
চলকগুলির জন্য সীমাবদ্ধ সংশোধক | ইন্টারফেস ভেরিয়েবলগুলি ব্যক্তিগত, সুরক্ষিত, ক্ষণস্থায়ী, অস্থির হিসাবে ঘোষণা করা যায় না। | বিমূর্ত শ্রেণীর ভেরিয়েবলগুলির সংশোধনকারীদের উপর কোনও বিধিনিষেধ নেই। |
ভেরিয়েবলের সূচনা | ইন্টারফেস ভেরিয়েবলগুলি এর ঘোষণার সময় অবশ্যই শুরু করতে হবে। | এটি বাধ্যতামূলক নয় যে বিমূর্ত শ্রেণির ভেরিয়েবলগুলি ঘোষণার সময় শুরু করা উচিত। |
তাত্ক্ষণিক এবং স্থির ব্লক | ইন্টারফেসের অভ্যন্তরে, আপনি উদাহরণ বা স্থির ব্লক ঘোষণা করতে পারবেন না। | বিমূর্ত শ্রেণিটি এর অভ্যন্তরে কোনও উদাহরণ বা স্থির ব্লকের অনুমতি দেয়। |
কন্সট্রাকটর | আপনি ইন্টারফেসের ভিতরে কনস্ট্রাক্টর ঘোষণা করতে পারবেন না। | আপনি একটি বিমূর্ত শ্রেণীর ভিতরে নির্মাণকারী ঘোষণা করতে পারেন declare |
ইন্টারফেস সংজ্ঞা
জাভা একাধিক উত্তরাধিকারের অনুমতি দেয় না। অর্থাৎ একক শ্রেণি একসাথে একাধিক শ্রেণির উত্তরাধিকারী হতে পারে না। এর পেছনের কারণ একটি উদাহরণ দিয়ে ব্যাখ্যা করা যেতে পারে। ধরা যাক, আমাদের দুটি অভিভাবক শ্রেণি, এ এবং বি এবং একটি উত্পন্ন শ্রেণি সি রয়েছে Theএখন, উভয়টির A এবং B এর মেথড সেট আছে () রয়েছে, তবে এটি শ্রেণি C এর জন্য প্রশ্ন হবে যে কোন শ্রেণীর সেট () পদ্ধতির উত্তরাধিকারী হওয়া উচিত should এই সমস্যার সমাধান হ'ল "ইন্টারফেস"।
ইন্টারফেস একটি খাঁটি বিমূর্ত শ্রেণি। একটি ইন্টারফেস তৈরি করতে ব্যবহৃত কীওয়ার্ডটি হ'ল "ইন্টারফেস"। ইন্টারফেসের ভিতরে সমস্ত পদ্ধতি সম্পূর্ণ বিমূর্ত হয়। ইন্টারফেসটি কেবল নির্দিষ্ট করে যে কোনও শ্রেণীর কী করা উচিত তবে এটি এটি কী করে তা নির্ধারণ করে না। কেবলমাত্র ইন্টারফেসের ভিতরে ঘোষিত সমস্ত পদ্ধতি বিমূর্ত, একটি ইন্টারফেসের জন্য কোনও উদাহরণ তৈরি করা হয়নি। জাভাতে "ইন্টারফেস" এর সাধারণ ফর্মটি হ'ল:access_specifier ইন্টারফেস ইন্টারফেস_নাম {রিটার্ন-টাইপ পদ্ধতি-নাম 1 (প্যারামিটার-তালিকা); রিটার্ন-টাইপ পদ্ধতি-নাম 2 (প্যারামিটার-তালিকা); প্রকারের চূড়ান্ত-বর্ণনাম = মান; প্রকারের চূড়ান্ত-বর্ণ 2 = মান; // ... রিটার্ন-টাইপ পদ্ধতি-নামএন (প্যারামিটার-তালিকা); প্রকারের চূড়ান্ত-বর্ণনাম = মান; }
অ্যাক্সেস স্পেসিফায়ারকে সর্বজনীন ঘোষণা করা হয়েছে কারণ ক্লাসগুলিকে ইন্টারফেস প্রয়োগ করতে হবে।
সি ++ তে আমাদের "ইন্টারফেস" ধারণাটি নেই। তবে, জাভা এবং সি # ইন্টারফেসটি খুব ভালভাবে সংজ্ঞায়িত করে।
জাভা ইন্টারফেস:
- একটি ইন্টারফেসের ভেরিয়েবলগুলি সর্বদা সর্বজনীন, স্থির এবং চূড়ান্ত হয়।
- পরিবর্তনগুলি এটির ঘোষণার সময় শুরু করতে হবে।
- চলকগুলিকে কখনই ব্যক্তিগত, সুরক্ষিত, ক্ষণস্থায়ী এবং অস্থির হিসাবে ঘোষণা করা যায় না।
- একটি ইন্টারফেসের পদ্ধতিগুলি সর্বদা সর্বজনীন এবং বিমূর্ত থাকে যদিও এগুলি কখনই ব্যক্তিগত, সুরক্ষিত, চূড়ান্ত, স্থিতিশীল, সিঙ্ক্রোনাইজড, নেটিভ এবং স্ট্রাইকফপি হিসাবে ঘোষিত হতে পারে না।
- আপনি ইন্টারফেসের ভিতরে কোনও কনস্ট্রাক্টরকে ঘোষণা করতে পারবেন না কারণ কনস্ট্রাক্টরের মূল উদ্দেশ্য শ্রেণি ভেরিয়েবলের সূচনা কিন্তু ইন্টারফেস ভেরিয়েবলগুলি এর ঘোষণার সময় আরম্ভ হয়।
- ইন্টারফেসটি অন্যান্য ইন্টারফেসের উত্তরাধিকারী হতে পারে তবে, এই জাতীয় ইন্টারফেস প্রয়োগকারী শ্রেণি অবশ্যই উত্তরাধিকারসূত্রে প্রাপ্ত সমস্ত ইন্টারফেসের পদ্ধতিগুলি প্রয়োগ করে।
- কোনও শ্রেণি একসাথে একাধিক ইন্টারফেসের উত্তরাধিকারী হতে পারে এবং এটি অবশ্যই উত্তরাধিকারসূত্রে প্রাপ্ত সমস্ত ইন্টারফেসের সমস্ত পদ্ধতি প্রয়োগ করে।
জাভাতে একটি ইন্টারফেস প্রয়োগের সাধারণ ফর্ম:
শ্রেণি শ্রেণি_নাম ইন্টারফেস_নাম কার্যকর করে-// শ্রেণী-বডি}
একটি ইন্টারফেস উত্তরাধিকারী হওয়ার জন্য, একটি শ্রেণি একটি শব্দ "প্রয়োগগুলি" ব্যবহার করে এবং শ্রেণি উত্তরাধিকারসূত্রে প্রাপ্ত ইন্টারফেসের মাধ্যমে ঘোষণা করা সমস্ত পদ্ধতি প্রয়োগ করে।
সি # তে ইন্টারফেস:
সি # তে ইন্টারফেস জাভাতে ইন্টারফেসের সাথে প্রায় একই রকম:
- সি # তে ইন্টারফেস ভেরিয়েবলগুলি ঘোষণা করে না।
- ইন্টারফেসের নামটি মূলধন I এর সাথে উপসর্গযুক্ত এবং কোলন (:) চিহ্ন দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত।
সি # তে একটি ইন্টারফেস প্রয়োগের সাধারণ ফর্ম:
শ্রেণীর শ্রেণি_নাম: ইন্টারফেস_নাম {// শ্রেণী-বডি}
বিমূর্ত শ্রেণির সংজ্ঞা
যে ক্লাসে এক বা একাধিক বিমূর্ত পদ্ধতি রয়েছে তাকে অ্যাবস্ট্রাক্ট ক্লাস বলা হয় এবং শ্রেণীর ঘোষণার শুরুতে "শ্রেণি" কীওয়ার্ডের পূর্ববর্তী "বিমূর্ত" কীওয়ার্ড ব্যবহার করে একটি শ্রেণিকে বিমূর্ত হিসাবে ঘোষণা করা হয়। যেহেতু বিমূর্ত শ্রেণিতে বিমূর্ত পদ্ধতি রয়েছে এটি একটি অসম্পূর্ণ ধরণের হয়ে থাকে। সুতরাং, আপনি একটি বিমূর্ত শ্রেণীর অবজেক্ট তৈরি করতে পারবেন না। যখনই কোনও শ্রেণি একটি বিমূর্ত শ্রেণীর উত্তরাধিকার সূত্রে আসে তবে অবশ্যই এটি বিমূর্ত শ্রেণীর সমস্ত বিমূর্ত পদ্ধতি প্রয়োগ করতে হবে যদি তা না করে তবে এটি অবশ্যই বিমূর্ত হিসাবে ঘোষণা করতে হবে ab বিমূর্ত পদ্ধতিটির সম্পূর্ণ বাস্তবায়ন না হওয়া পর্যন্ত বিমূর্ত বৈশিষ্ট্য উত্তরাধিকার সূত্রে প্রাপ্ত।
বিমূর্ত শ্রেণিতেও কংক্রিট পদ্ধতি থাকতে পারে যা ডেরাইভড ক্লাস যেমন হয় তেমন ব্যবহার করতে পারে। তবে, আপনি একটি বিমূর্ত নির্মাণ বা কোনও বিমূর্ত শ্রেণীর ভিতরে একটি বিমূর্ত স্থির পদ্ধতি ঘোষণা করতে পারবেন না। জাভাতে বিমূর্ত শ্রেণির সাধারণ ফর্মটি নিম্নরূপ:
বিমূর্ত শ্রেণি শ্রেণি_নাম st বিমূর্ত পদ্ধতি_নাম 1 (); বিমূর্ত পদ্ধতি_নাম 2 (); : রিটার্ন_টাইপ মেথড_নাম ৩ (প্যারামিটার_লিস্ট) {// কংক্রিট পদ্ধতি} রিটার্ন_টাইপ মেথড_নাম ৪ (প্যারামিটার_লিস্ট) {// কংক্রিট পদ্ধতি}};
জাভা এবং সি # উভয় ক্ষেত্রে একটি বিমূর্ত শ্রেণির ধারণা একই রকম। একটি বিমূর্ত শ্রেণি সি ++ এ কিছুটা আলাদা।
সি ++ তে যদি কোনও শ্রেণীর অন্তত একটি ভার্চুয়াল ফাংশন থাকে তবে শ্রেণিটি একটি বিমূর্ত শ্রেণিতে পরিণত হয়। "বিমূর্ত" কীওয়ার্ডের পরিবর্তে, "ভার্চুয়াল" কীওয়ার্ডটি একটি বিমূর্ত পদ্ধতি ঘোষণা করতে ব্যবহৃত হয়।
- আপনি যখন "কী প্রয়োজন" এর জ্ঞান রাখেন তবে "এটি কীভাবে প্রয়োগ করা হবে" তা নয় তবে ইন্টারফেসটি অবশ্যই ব্যবহার করা উচিত। অন্যদিকে, যদি আপনি কী প্রয়োজন তা জানেন এবং এটি কীভাবে প্রয়োগ করা হবে তা আংশিকভাবে জানেন তবে একটি বিমূর্ত শ্রেণি ব্যবহার করুন।
- একটি ইন্টারফেসের সমস্ত পদ্ধতি বিমূর্ত থাকে তবে, একটি বিমূর্ত শ্রেণিতে কিছু বিমূর্ত পদ্ধতি এবং কিছু কংক্রিট পদ্ধতি রয়েছে।
- একটি ইন্টারফেসের ভিতরে থাকা পদ্ধতিগুলি সর্বজনীন এবং বিমূর্ত, তাই একে খাঁটি বিমূর্ত শ্রেণিও বলা হয়। অন্যদিকে, বিমূর্তির অভ্যন্তরের পদ্ধতিগুলি কেবল সর্বজনীন এবং বিমূর্তের মধ্যে সীমাবদ্ধ নয়।
- একটি ইন্টারফেস পদ্ধতি কখনই ব্যক্তিগত, সুরক্ষিত, চূড়ান্ত, স্ট্যাটিক, সিঙ্ক্রোনাইজড, নেটিভ বা স্ট্রাইকফপি হতে পারে না। অন্যদিকে, বিমূর্ত শ্রেণির পদ্ধতিগুলির জন্য কোনও বিধিনিষেধ নেই।
- একটি ইন্টারফেসের ভেরিয়েবলগুলি সর্বজনীন এবং চূড়ান্ত হয় যদিও আমরা সেগুলি ঘোষণা করি বা না করি, সেখানে কোনও বিমূর্ত শ্রেণীর ভেরিয়েবলগুলিকে কেবল সর্বজনীন এবং চূড়ান্ত হতে পারে না no
- একটি ইন্টারফেসের ভেরিয়েবলগুলি কখনই ব্যক্তিগত সুরক্ষিত ক্ষণস্থায়ী বা অস্থির হতে পারে না যদিও কোনও বিমূর্ত শ্রেণিতে ভেরিয়েবলের কোনও বিধিনিষেধ নেই।
- একটি ইন্টারফেসের ভেরিয়েবল ঘোষণার সময় অবশ্যই শুরু করা উচিত। অন্যদিকে, বিমূর্ত শ্রেণিতে ভেরিয়েবলগুলি যে কোনও সময় আরম্ভ করা যেতে পারে।
- একটি ইন্টারফেসের ভিতরে, কোনও উদাহরণ বা স্ট্যাটিক ব্লক ঘোষণা করা যায় না তবে আপনি বিমূর্ত ক্লাসের মধ্যে উদাহরণ বা স্থির ব্লক ঘোষণা করতে পারেন।
- আপনি কোনও ইন্টারফেসের ভিতরে কনস্ট্রাক্টর সংজ্ঞায়িত করতে পারবেন না তবে আপনি একটি বিমূর্ত শ্রেণীর ভিতরে কনস্ট্রাক্টরকে সংজ্ঞায়িত করতে পারেন।
উপসংহার:
যখন আপনাকে একটি বেস ক্লাস তৈরি করতে হবে যা একটি সাধারণীকরণ পদ্ধতি রয়েছে যা উদ্ভাবিত শ্রেণীর দ্বারা তাদের প্রয়োজন অনুসারে প্রয়োগ করা যেতে পারে, তখন ইন্টারফেস এবং বিমূর্ত শ্রেণীর ধারণা এটি করতে সহায়তা করে।