কীভাবে মিক্সিন বা বৈশিষ্ট্যগুলি একাধিক উত্তরাধিকারের চেয়ে ভাল?


54

সি ++ এর একাধিক উত্তরাধিকার রয়েছে, অনেক ভাষার ডিজাইন এটিকে বিপজ্জনক হিসাবে নিষেধ করে। তবে কিছু ভাষা যেমন রুবি এবং পিএইচপি একই জিনিস করতে অদ্ভুত বাক্য গঠন ব্যবহার করে এবং এটি মিক্সিন বা বৈশিষ্ট্যগুলি বলে। আমি বহুবার শুনেছি যে মিক্সিন / বৈশিষ্ট্যগুলি সাধারণ একাধিক উত্তরাধিকারের চেয়ে অপব্যবহার করা শক্ত।

বিশেষত কী তাদের কম বিপজ্জনক করে তোলে? এমন কি এমন কিছু আছে যা মিশিন / বৈশিষ্ট্যগুলি দিয়ে সম্ভব নয় তবে সি ++ - স্টাইলের একাধিক উত্তরাধিকারের সাথে সম্ভব? তাদের সাথে হীরা সমস্যাটি চালানো কি সম্ভব?

দেখে মনে হচ্ছে আমরা একাধিক উত্তরাধিকার ব্যবহার করছি তবে কেবলমাত্র অজুহাত তৈরি করছি যে সেগুলি মিক্সিন / বৈশিষ্ট্য তাই আমরা সেগুলি ব্যবহার করতে পারি।


7
এই সম্পর্কে একটি ভাল লিখিত, চিন্তাশীল এবং পুঙ্খানুপুঙ্খ উত্তর পোস্ট করার জন্য কেউ অপেক্ষা করছেন।
রবার্ট হার্ভে

7
রুবি এবং পিএইচপি মিশ্রণ এবং বৈশিষ্ট্য পরিচয় করিয়ে দেয় না। মিক্সিনগুলি ফ্লেভারস (1980) এ পরিচয় করানো হয়েছিল, সিকিয়াক স্মলটালকের (2001) বৈশিষ্ট্যগুলি প্রবর্তন করা হয়েছিল। স্বাদ একাধিক উত্তরাধিকার সহ প্রথম বস্তু-ভিত্তিক ভাষা ছিল এবং এতে মিক্সিন ব্যবহার হত। সি ++ কেবলমাত্র 2.0 সংস্করণে একাধিক উত্তরাধিকার পেয়েছে, যা ফ্লেভার্সের 9 বছর পরে 1989 সালে প্রকাশিত হয়েছিল। সুতরাং, প্রশ্নটি হওয়া উচিত: স্বাদের প্লেইন মিক্সস রয়েছে তবে সি ++ এর মতো কিছু ভাষা একই কাজ করতে অদ্ভুত বাক্য গঠন করে এবং এটিকে একাধিক উত্তরাধিকার বলে।
জার্গ ডব্লু মিট্টাগ

উত্তর:


31

একাধিক উত্তরাধিকার নিয়ে যখন বেশিরভাগ সমস্যা পূর্ণাঙ্গ শ্রেণীর সাথে ব্যবহৃত হয় তখন সেগুলির মধ্যে অনেকগুলি সমস্যা রয়েছে তবে তারা সমস্তই দ্ব্যর্থহীনতার আশেপাশে ঘুরে ।

অস্পষ্টতা কয়েকটি ভিন্ন উপায়ে প্রদর্শিত হয়:

  1. যদি আপনার একই ক্ষেত্রের সাথে দুটি বেস ক্লাস থাকে x, এবং উত্পন্ন প্রকারটি জিজ্ঞাসা xকরে, এটি কী পায়?
    • দুটি xভেরিয়েবলের যদি অসংলগ্ন প্রকার থাকে তবে আপনি এটি নির্ধারণ করতে পারেন।
    • যদি তারা একই ধরণের হয় তবে আপনি তাদের একই ভেরিয়েবলে একত্রীকরণের চেষ্টা করতে পারেন।
    • আপনি সর্বদা তাদের অদ্ভুত পুরোপুরি যোগ্য নাম হিসাবে প্রকাশ করতে পারেন।
  2. আপনার যদি একই ফাংশনযুক্ত দুটি fস্বতন্ত্র স্বাক্ষর সহ দুটি বেস ক্লাস থাকে , এবং কেউ কল করে f, যা ডাকা হয়?
    • যদি দুটি বেস শ্রেণি একটি অন্য সাধারণ ভার্চুয়াল পূর্বপুরুষ (হীরা সমস্যা) ভাগ করে নেয়।
    • যদি ফাংশনটির আলাদা, তবে সামঞ্জস্যপূর্ণ স্বাক্ষর থাকে?
  3. আপনি যখন দুটি বেস ক্লাস সহ একটি ক্লাস বানাবেন, তখন বেস ক্লাসের কনস্ট্রাক্টরকে প্রথমে বলা হয়? আপনি যখন বস্তুটি ধ্বংস করেন, তখন কোনটি মারা যায়?
  4. আপনি যখন মেমরিটিতে অবজেক্টটি রাখেন, আপনি কীভাবে এটি ধারাবাহিকভাবে করবেন?
  5. 3 বেস ক্লাস দিয়ে আপনি এই সমস্ত কেস কিভাবে পরিচালনা করবেন? 10?

এবং এটি গতিশীল প্রেরণ, টাইপ অনুমান, প্যাটার্ন ম্যাচিং এবং আমি কম জানি এমন জিনিসগুলিকে উপেক্ষা করে যেগুলি যখন ভাষা সম্পূর্ণ শ্রেণীর একাধিক উত্তরাধিকারকে সমর্থন করে তখন আরও চ্যালেঞ্জ হয়ে ওঠে।

বৈশিষ্ট্য বা মিক্স-ইনস (বা ইন্টারফেস, বা ...) হ'ল সমস্ত গঠন যা বিশেষত কোনও প্রকারের ক্ষমতা সীমাবদ্ধ করে যাতে কোনও অস্পষ্টতা না থাকে। এগুলি নিজেরাই খুব কমই নিজেরাই করে থাকে। এটি ধরণের সংমিশ্রণটি মসৃণ হতে দেয় কারণ দুটি ভেরিয়েবল বা দুটি ফাংশন নেই ... একটি পরিবর্তনশীল এবং একটি রেফারেন্স রয়েছে; একটি ফাংশন এবং একটি স্বাক্ষর। সংকলক জানে কী করতে হবে।

গৃহীত অন্যান্য সাধারণ পদ্ধতি হ'ল ব্যবহারকারীকে একবারে তাদের টাইপটি "বিল্ড" করতে (বা মিশ্রিত করতে) বাধ্য করা। নতুন শ্রেণিতে বেস ক্লাসগুলি সমান অংশীদার হওয়ার পরিবর্তে আপনি এক প্রকারে অন্যটিতে যুক্ত করুন - যা কিছু ছিল তা ওভাররাইড করে (সাধারণত reচ্ছিক সিনট্যাক্স সহ পুনরায় নামকরণ এবং / অথবা ওভাররাইড বিটগুলি পুনরায় প্রকাশ করতে)।

এমন কি এমন কিছু আছে যা মিশিন / বৈশিষ্ট্যগুলি দিয়ে সম্ভব নয় তবে সি ++ - স্টাইলের একাধিক উত্তরাধিকারের সাথে সম্ভব?

ভাষার উপর নির্ভর করে - একাধিক বেস শ্রেণি থেকে ভেরিয়েবলের জন্য ফাংশন এবং স্টোরেজ বাস্তবায়নের একীভূত করা এবং এটিকে উত্পন্ন ধরণে প্রকাশ করা সাধারণত ঝামেলা বা অসম্ভব হয়ে ওঠে ।

তাদের সাথে হীরা সমস্যাটি চালানো কি সম্ভব?

মাঝে মাঝে কম মারাত্মক প্রকরণগুলি আপনার ভাষার উপর ভিত্তি করে পপ আপ হয়ে যায়, তবে সাধারণত হয় না। বৈশিষ্ট্যগুলির সম্পূর্ণ বিন্দুটি হ'ল ধরণের অস্পষ্টতা ভাঙা।


আপনি কি আমাকে উদাহরণস্বরূপ ভাষা / প্রযুক্তি যেমন "বিল্ডিং" ধরণের অনুমতি দেওয়ার উদাহরণ দিতে পারেন?
গেরম্যান

@ জারম্যান - আমি অবশ্যই কোনও স্কালার বিশেষজ্ঞ নই, তবে আমার বোধগম্য withসেখানে কীওয়ার্ডটি করে।
টেলাস্টিন

"এমন কাঠামো তৈরি করে যা কোনও প্রকারের ক্ষমতাকে সীমাবদ্ধ করে যাতে কোনও অস্পষ্টতা না থাকে": কী সীমাবদ্ধতা? ইন্টারফেসের ভেরিয়েবল নেই, সুতরাং এটি একটি সীমা, তবে স্কালাল বৈশিষ্ট্য এবং রুবি মডিউলগুলি রয়েছে। এগুলি কি অন্য উপায়ে সীমাবদ্ধ?
ডেভিড মোলস

@ ডেভিডমোলস - এটি সাধারণ উপায়, আমি ভার্চুয়াল প্রেরণের বিধিগুলির সীমাবদ্ধতাও দেখেছি (সি # এর সুস্পষ্ট প্রয়োগিত ইন্টারফেসগুলি মনে করুন)।
টেলাস্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.