সর্বাধিক সুস্পষ্ট সমস্যা হ'ল ফাংশন ওভাররাইডিং।
আসুন বলি দুটি ক্লাস রয়েছে A
এবং B
উভয়ই একটি পদ্ধতির সংজ্ঞা দেয় doSomething
। এখন আপনি একটি থার্ড ক্লাস সংজ্ঞায়িত C
উভয় থেকে, যা উত্তরাধিকারী A
এবং B
, কিন্তু আপনি ওভাররাইড না doSomething
পদ্ধতি।
সংকলক যখন এই কোডটি বীজ করে ...
C c = new C();
c.doSomething();
... পদ্ধতির কোন প্রয়োগটি ব্যবহার করা উচিত? আরও কোনও ব্যাখ্যা ছাড়াই সংকলকটির পক্ষে অস্পষ্টতা সমাধান করা অসম্ভব।
ওভাররাইড ছাড়াও, একাধিক উত্তরাধিকারের সাথে অন্য বড় সমস্যা হ'ল মেমরির দৈহিক বস্তুর বিন্যাস।
সি ++ এবং জাভা এবং সি # এর মতো ভাষা প্রতিটি ধরণের অবজেক্টের জন্য স্থির ঠিকানা-ভিত্তিক বিন্যাস তৈরি করে। এটার মতো কিছু:
class A:
at offset 0 ... "abc" ... 4 byte int field
at offset 4 ... "xyz" ... 8 byte double field
at offset 12 ... "speak" ... 4 byte function pointer
class B:
at offset 0 ... "foo" ... 2 byte short field
at offset 2 ... 2 bytes of alignment padding
at offset 4 ... "bar" ... 4 byte array pointer
at offset 8 ... "baz" ... 4 byte function pointer
সংকলক যখন মেশিন কোড উত্পন্ন করে (বা বাইটকোড), এটি প্রতিটি পদ্ধতি বা ক্ষেত্র অ্যাক্সেস করতে সেই সংখ্যাসূচক অফসেটগুলি ব্যবহার করে।
একাধিক উত্তরাধিকার এটিকে খুব কৃপণ করে তোলে।
বর্গ তাহলে C
উভয় থেকে উত্তরাধিকারী A
এবং B
, কম্পাইলার ডেটা বিন্যাস ব্যবহার করার সিদ্ধান্ত নেন হয়েছে AB
অর্ডার বা BA
অর্ডার।
তবে এখন কল্পনা করুন যে আপনি কোনও জিনিসে পদ্ধতি কল করছেন B
। আসলেই কি এটি একটি B
? অথবা এটি আসলে কোনও C
বস্তুকে বহুবর্ষগতভাবে বলা হয়, তার B
ইন্টারফেসের মাধ্যমে ? অবজেক্টের আসল পরিচয়ের উপর নির্ভর করে শারীরিক বিন্যাস আলাদা হবে এবং কল-সাইটে অনুরোধ করার জন্য ফাংশনের অফসেটটি জানা অসম্ভব।
এই ধরণের সিস্টেম হ্যান্ডেল করার উপায় হ'ল ফিক্সড-লেআউট পদ্ধতির খনন করা, ফাংশনগুলি চাওয়ার বা তার ক্ষেত্রগুলিতে অ্যাক্সেস করার আগে প্রতিটি বস্তুকে তার বিন্যাসের জন্য জিজ্ঞাসা করার অনুমতি দেওয়া হয়।
তাই ... দীর্ঘ গল্প সংক্ষিপ্ত ... একাধিক উত্তরাধিকার সমর্থন করার জন্য সংকলক লেখকদের পক্ষে এটি গলায় ব্যথা। সুতরাং যখন গুডো ভ্যান রসমের মতো কেউ অজগর ডিজাইন করেন বা অ্যান্ডারস হেলসবার্গ যখন সি # ডিজাইন করেন, তখন তারা জানেন যে একাধিক উত্তরাধিকারকে সমর্থন করা সংকলক বাস্তবায়নকে উল্লেখযোগ্যভাবে আরও জটিল করে তুলবে, এবং সম্ভবত তারা সুবিধাটি ব্যয়ের জন্য মূল্যবান বলে মনে করেন না।