সি ++ এর মতো ভাষায় যা একাধিক উত্তরাধিকারের অনুমতি দেয় এবং এর কোনও ইন্টারফেস নেই, বিমূর্ত শ্রেণি যেখানে সমস্ত পদ্ধতি বিমূর্ত হয় ইন্টারফেস হিসাবে পরিবেশন করতে পারে। আমি সি ++ নিয়ে এতো বেশি কাজ করি নি, তবে আমার ধারণা আমি বেস ক্লাসে একই নামের পদ্ধতি থাকাতে একাধিক উত্তরাধিকার সমস্যার কারণ হতে পারে।
পিএইচপি এবং সি # এর মতো ভাষায়, ইন্টারফেসগুলি অনুরূপ পলিমারফিজম অর্জনের একটি উপায় সরবরাহ করে, যদিও আমি এটিকে "উত্তরাধিকার" বলা অপছন্দ করি, যেহেতু একটি বিমূর্ত শ্রেণীর উত্তরাধিকারী হওয়া এবং একটি ইন্টারফেস বাস্তবায়নের মধ্যে একটি ধারণাগত পার্থক্য রয়েছে। ইন্টারফেসগুলি দ্বন্দ্বের সমস্যাটি সরিয়ে দেয়, কারণ তারা নিজেরাই প্রয়োগ করে না।
একটি ইন্টারফেস বাইরের বিশ্বের জন্য একটি চুক্তি হিসাবে কাজ করে, যখন একটি বিমূর্ত শ্রেণি একটি বাস্তবায়ন সরবরাহ করতে পারে, যদিও যদি ইন্টারফেসটিকে "নকল" হিসাবে ব্যবহার করা হয়, তবে সম্ভবত এটি হবে না।
মূল ধারণাগত পার্থক্যটি হ'ল যখন কোনও শ্রেণি অন্য শ্রেণীর উত্তরাধিকারী হয় (বিমূর্ত বা না) তখন "হয়" এর একটি সম্পর্ক থাকে, সুতরাং a Car
হয় Vehicle
এবং Dog
একটি হয় Animal
। একটি ইন্টারফেসের সাথে, এটি বিষয়টির জন্য গুরুত্বপূর্ণ। সুতরাং Car
এবং উভয়ই Dog
হতে পারে Move()
এবং ভোক্তা এটি জানেন কারণ তারা প্রয়োগ করে Movable
তবে একটি গাড়ি অবশ্যই একটি Dog
, বা নয় Animal
। এবং সরানো বাস্তবায়ন আলাদা হবে (চাকা বনাম পা) তবে গ্রাহক কোডটি যত্ন করে না এবং করা উচিত নয়। ইন্টারফেসগুলি প্রয়োগের পরিবর্তে গ্রাহক কোড সম্পর্কিত।
মূল বক্তব্যটি হ'ল যদি আপনার পছন্দের ভাষাটিতে আপনার ইন্টারফেস থাকে, তবে সেগুলি সেখানে রয়েছে এমন জিনিসের জন্য তাদের ব্যবহার করুন। যদি না হয় (সি ++ এর মতো) তবে আপনি খাঁটি বিমূর্ত ক্লাস ব্যবহার করে তাদের জাল করতে পারেন।