খুব সংকীর্ণ অর্থে, উত্তরটি হ্যাঁ "হ্যাঁ": ধরে নেওয়া যে আপনার বেস ক্লাস বা ইন্টারফেসগুলি একক উদ্দেশ্যে ডিজাইন করা হয়েছে, উভয়ের উত্তরাধিকার সূত্রে একাধিক দায়িত্ব নিয়ে শ্রেণি তৈরি হয়। তবে এটি "খারাপ জিনিস" কিনা তা আপনি উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাস বা ইন্টারফেসের প্রকৃতির উপর নির্ভর করে।
আপনি আপনার শ্রেণি এবং ইন্টারফেস দুটি প্রধান গ্রুপে বিভক্ত করতে পারেন - এটি আপনার সিস্টেমের প্রয়োজনীয় জটিলতাগুলিকে সম্বোধন করে এবং এর দুর্ঘটনাজনিত জটিলতাগুলিকে সম্বোধন করে। যদি একাধিক "প্রয়োজনীয় জটিলতা" শ্রেণি থেকে উত্তরাধিকারী হয় তবে এটি খারাপ; যদি আপনি একটি "অপরিহার্য" এবং এক বা একাধিক "দুর্ঘটনাজনিত" শ্রেণি থেকে উত্তরাধিকারী হন তবে তা ঠিক।
উদাহরণস্বরূপ, একটি বিলিং সিস্টেমে আপনার চালান এবং বিলিং চক্র উপস্থাপনের ক্লাস থাকতে পারে (তারা প্রয়োজনীয় জটিলতার দিকে মনোযোগ দেয়) এবং অবিচ্ছিন্ন অবজেক্টের ক্লাস (তারা দুর্ঘটনাজনিত জটিলতার সমাধান করে)। আপনি যদি এইভাবে উত্তরাধিকারী হন
class BillingCycleInvoice : public BillingCycle, public Invoice {
};
এটি খারাপ: BillingCycleInvoiceএটি সিস্টেমের প্রয়োজনীয় জটিলতার সাথে সম্পর্কিত বলে আপনার একটি মিশ্র দায়িত্ব রয়েছে।
অন্যদিকে, যদি আপনি এর মতো উত্তরাধিকারী হন
class PersistentInvoice : public Invoice, public PersistentObject {
};
আপনার ক্লাসটি ঠিক আছে: প্রযুক্তিগতভাবে, এটি একবারে দুটি উদ্বেগকে সরবরাহ করে, তবে যেহেতু এর মধ্যে কেবল একটির প্রয়োজনীয়তা রয়েছে তাই আপনি দুর্ঘটনাকবলিত উত্তরাধিকার সূত্রে "ব্যবসায় করার ব্যয়" হিসাবে লিখতে পারেন।