গতিশীল ভাষায় উত্তরাধিকার বনাম মিশ্রণ?


19

গতিশীল ভাষাগুলিতে মিশ্রণের চেয়ে উত্তরাধিকারের ধরণগুলি কখন পছন্দ করবেন?

মিক্সিন্স দ্বারা, আমি বোঝাতে চাইছি যথার্থ যথাযথ মিশ্রণ, যেমন রানটাইমের সময় কোনও বস্তুতে ফাংশন এবং ডেটা সদস্যদের সন্নিবেশ করানো হিসাবে।

আপনি কখন মিশ্রণের পরিবর্তে প্রোটোটাইপাল উত্তরাধিকার ব্যবহার করবেন? মিক্সিন বলতে আমি কী বোঝাতে চাইছি তা আরও পরিষ্কারভাবে বর্ণনা করার জন্য কিছু সিউডোকোড:

asCircle(obj) {
  obj.radius = 0
  obj.area = function() {
    return this.radius * this.radius * 3.14
  }

myObject = {}
asCircle(myObject)
myObject.area() // -> 0

2
মিক্সিনগুলি সোজা-আপ উত্তরাধিকারের চেয়ে ক্রস কাটার দিকগুলির মতো। এটি সম্ভবত আপনার জন্য কিছু ব্যবহারের ক্ষেত্রে সংজ্ঞা দেবে।
ashes999

1
রচনা, কেউ :)
OnesimusUnbound

উত্তর:


14

প্রোটোটাইপিকাল উত্তরাধিকার সহজ। এটি মিক্সিনগুলির চেয়ে একক সুবিধা।

এটি এটি একটি লাইভ লিঙ্ক। যদি আপনি প্রোটোটাইপ যা উত্তরাধিকার সূত্রে প্রাপ্ত হয় তা পরিবর্তন করা হয়।

উদাহরণস্বরূপ পিডি ব্যবহার করে

var Circle = {
  constructor: function _constructor() {
    this.radius = 0;
    return this;
  },
  area: function _area() {
    return this.radius * this.radius * Circle.PI
  },
  PI: 3.14
};

var mixedIn = pd.extend({}, Circle).constructor();
var inherited = pd.make(Circle, {}).constructor();

Circle.perimeter = perimeter;

inherited.perimeter(); // wins
mixedIn.perimeter(); // fails

function perimeter() {
  return 2 * this.radius;
}

সুতরাং মূলত, যদি আপনি "ইন্টারফেস" বৃত্তে পরিবর্তনগুলি চান যা রান-টাইমে সমস্ত কার্যকারিতা যা "কার্যকরী" ব্যবহার করে তার কার্যকারিতা প্রতিফলিত করে, তবে এর থেকে উত্তরাধিকারী হন।

আপনি যদি পরিবর্তনগুলি প্রতিবিম্বিত করতে না চান তবে এটি মেশান।

নোট করুন যে মিক্সিনগুলির পাশাপাশি এর চেয়েও বেশি উদ্দেশ্য রয়েছে। মিক্সিনগুলি একাধিক "উত্তরাধিকার" এর জন্য আপনার প্রক্রিয়া।

আপনি যদি একাধিক "ইন্টারফেস" প্রয়োগ করতে কোনও অবজেক্ট চান তবে আপনাকে কিছুটা মিশ্রিত করতে হবে prot আপনি প্রোটোটাইপিকাল উত্তরাধিকারের জন্য যেটি ব্যবহার করেন তা হ'ল আপনি রান-টাইমে প্রতিফলিত করতে পরিবর্তনগুলি চান, অন্যগুলি মিশ্রিত হবে।


12

আমার ঘোড়া জ্ঞান এটি আমাকে বলে:

  • যদি একাধিক বস্তু বা শ্রেণীর শ্রেণিবিন্যাস জুড়ে কিছু কার্যকর হয় - তবে এটি একটি মিশ্রণ করুন
  • যদি কিছু হয় শুধুমাত্র দরকারী বরাবর ব্যবহার উত্তরাধিকার - একটি একক অনুক্রমের

সম্পর্কিত নোট:

  • "দরকারী" শব্দটি রূপকভাবে নেওয়া উচিত
  • যে ভাষাগুলির একাধিক উত্তরাধিকার নেই, তাদের জন্য মিশ্রণগুলি একটি ভাল বিকল্প
  • পিএইচপি 5.4 বৈশিষ্ট্যগুলিকে পরিচয় করিয়ে দেয় যা মিক্সিন এবং একাধিক উত্তরাধিকারের জগত উভয়েরই থেকে মঙ্গলযুক্ত

+1, রুবিতে "একাধিক অবজেক্টস বা শ্রেণি শ্রেণিবদ্ধকরণের জন্য দরকারী কিছু" এর আমার প্রিয় উদাহরণটি হ'ল গণনাযোগ্য মডিউল: রুবি- ডক.আর.অর্গ
ডেভিড

1
আমি বলব যে একাধিক উত্তরাধিকার মিক্সিনগুলির বিকল্প (এত ভাল নয়) হতে পারে।
সাইমন বার্গোট

@ সিমন আমি বলব যে
মিক্সিনগুলি

আমার ঘোড়া জ্ঞান আমাকে এটিও জানিয়েছিল। :)
theringostarrs

9

"ইস-এ" পরীক্ষাটি ব্যবহার করুন।

যখন আপনি "সাবক্লাস আইএস একটি সুপারক্লাস" বলতে পারেন তখন উত্তরাধিকার সীমাবদ্ধ। তারা একই জিনিস। "পনির একটি দুগ্ধজাত পণ্য"।

মিক্সিনস সব কিছুর জন্য। "পনির একটি স্যান্ডউইচ ব্যবহার করা যেতে পারে"। পনির কোনও স্যান্ডউইচ নয়, তবে এটি স্যান্ডউইচিংয়ে অংশ নেয়।

পুনশ্চ. গতিশীল ভাষাগুলির সাথে এর কোনও যোগসূত্র নেই। স্থির সংকলন সহ যে কোনও একাধিক উত্তরাধিকার ভাষার (যেমন, সি ++) একই সিদ্ধান্ত পয়েন্ট থাকে।


অবশ্যই +1- স্থির ভাষাতেও মিশ্রণ রয়েছে।
ডেড জিএম

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

@ ম্যাগনাস ওলফেল্ট: তারা একই ধরণের জিনিস। "পনির একটি দুগ্ধজাত পণ্য"। আইএস-এ-র জন্য এটিই নিয়ম। আমি আর কি বলব?
এস.লট

আমার প্রশ্ন নকশা সিদ্ধান্ত সম্পর্কে আরও - আপনি কোন পরিস্থিতিতে উত্তরাধিকার চান এবং কোন কারণে? গতিশীল ভাষাগুলিতে আমি মিশনগুলির চেয়ে উত্তরাধিকার বাছাইয়ের কয়েকটি কারণ দেখতে পাচ্ছি, রায়নাগুলি যা বর্ণনা করেছে তার সাথেও। অবজেক্ট তৈরির পারফরম্যান্স একটি কারণ হতে পারে।
ম্যাগনাস ওলফেল্ট

@ ম্যাগনাস ওলফেল্ট: "আপনি কোন পরিস্থিতিতে উত্তরাধিকার চান" যখন দুই শ্রেণি আইএস-এ সম্পর্ককে সন্তুষ্ট করে। "অবজেক্ট তৈরির পারফরম্যান্স" একে অপরের থেকে একটি বেছে নেওয়ার কারণ নয়। উত্তরাধিকার দুটি শ্রেণীর অবজেক্ট সম্পর্কে খুব দৃ statement় বক্তব্য দেয়। মিক্সিনগুলি একটি দুর্বল এবং আরও নমনীয় বিবৃতি দেয়। যখন দুটি শ্রেণি "আইএস-এ" সম্পর্কটি সন্তুষ্ট করে তখন উত্তরাধিকার ব্যবহার করা হয়। আমি আর কি বলতে পারি? আমি আপনার প্রশ্ন খুব ভাল বুঝতে পারি না। আপনি আরও কি জানতে চান তা পরিষ্কার করতে পারেন?
এস .লট

0

ভাল, আমি আপনাকে এটি দিতে পারি সেরা উদাহরণ হ'ল একটি গেমের একজন অভিনেতা যা কিছু বেস স্টাফের জন্য উত্তরাধিকারী তবে ভাগ করে দেওয়া কার্যকারিতার জন্য মিক্সিন / প্লাগিন ব্যবহার করে। ভাগ করা কার্যকারিতা হতে পারে (সরাসরি উত্স কোড থেকে!):

var plugins = {
    SingleVisualEntity : SingleVisualEntity,
    JumpBehaviour      : JumpBehaviour,
    WeaponBehaviour    : WeaponBehaviour,
    RadarBehaviour     : RadarBehaviour,
    EnergyGatherer     : EnergyGatherer,
    LifeBarPlugin      : LifeBarPlugin,
    SelectionPlugin    : SelectionPlugin,
    UpgradePlugin      : UpgradePlugin,
    BrainPlugin        : BrainPlugin,
    PlanetObjectPlugin : PlanetObjectPlugin,
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.