मिश्रण बनाम लक्षण


जवाबों:


214
  1. मिश्रण में राज्य (पारंपरिक) लक्षण नहीं हो सकते हैं।
  2. मिश्रण "निहित संघर्ष संकल्प" का उपयोग करते हैं, लक्षण "स्पष्ट संघर्ष संकल्प" का उपयोग करते हैं
  3. मिश्रण रेखीयकरण पर निर्भर करता है, लक्षण चपटा होता है।

लक्षणों के बारे में व्याख्यान

ad 1. मिश्रणों में आप उदाहरण चर को परिभाषित कर सकते हैं। लक्षण इसकी अनुमति नहीं देते हैं। राज्य को वर्ग (= गुण का उपयोग करके वर्ग) प्रदान करके प्रदान किया जाना चाहिए

ad 2. नाम संघर्ष हो सकता है। दो मिश्रण ( MAऔर MB) या लक्षण ( TAऔर TB) एक ही परिभाषा के साथ विधि को परिभाषित करते हैं foo():void

Mixin MA {
    foo():void {
        print 'hello'
    }
}

Mixin MB {
    foo():void {
        print 'bye'
    }
}

Trait TA {
    foo():void {
        print 'hello'
    }
}

Trait TB {
    foo():void {
        print 'bye'
    }
}

मिक्सिन्स में कंपोजिंग क्लास में होने वाली उलझनों C mixins MA, MB को सुलझाया जाता है।

Class C mixins MA, MB {
    bar():void {
        foo();
    }
}

यह फोन करेगा foo():voidसेMA

दूसरी ओर, ट्रिट्स का उपयोग करते समय, कंपोजिंग क्लास को संघर्षों को हल करना होगा।

Class C mixins TA, TB {
    bar():void {
        foo();
    }
}

यह कोड संघर्ष (दो परिभाषाएँ foo():void) को बढ़ाएगा ।

ad 3. किसी पद्धति का शब्दार्थ इस बात पर निर्भर नहीं करता है कि यह किसी विशेषता में या उस वर्ग में परिभाषित किया गया है जो लक्षण का उपयोग करता है।

दूसरे शब्दों में, यह मायने नहीं रखता है कि वर्ग में गुण होते हैं या लक्षण कोड "कॉपी - पेस्ट" है।


5
मुझे पता है कि यह एक साल की तारीख है, लेकिन भविष्य के पाठकों के लिए, माणिक में यह अंतिम मॉड्यूल बनाने की विधि का उपयोग करेगा जो कि इसमें मिलाया गया था, इसलिए इसे फू कहेंगे () फॉर्म MB
rik.vanmechelen

4
स्काला के लक्षणों में क्षेत्र हो सकते हैं, इसका मतलब है कि वे "पारंपरिक" लक्षण नहीं हैं?
सर्जियो

4
हां, ये "पारंपरिक" नहीं हैं, इन्हें "स्टेटफुल" लक्षण कहा जाता है। स्टेटफुल लक्षणों और
मिश्रणों के

7
टेंटेटिव -1; जिस तरह से जंगल में 'ट्रिट' और 'मिक्सिन' शब्दों का इस्तेमाल किया जाता है, वह बहुत असंगत है और यहां कम से कम एक बिंदु ज्यादातर गलत है। PHP और विकिपीडिया (और @ शेरगियो के अनुसार, स्काला भी) लक्षणहीन होने के बारे में आपसे असहमत हैं। मुझे यह उत्तर उपयोगी नहीं लगता क्योंकि यह नंगे अभिकथनों से बना है, और यह मेरे लिए स्पष्ट नहीं है कि यह व्यक्तिगत रूप से इन शब्दों का उपयोग करने से अधिक कुछ है। अन्यथा आश्वस्त होने के लिए, मुझे आपके दावों का समर्थन करने के लिए वास्तविक दुनिया (उदाहरण के लिए वास्तविक प्रोग्रामिंग भाषाओं) में शब्दों का उपयोग करने के कई उदाहरण देखने होंगे।
मार्क अमेरी

3
@AykutKllic रैखिककरण -> "संकलक इस सवाल का समाधान करता है कि अस्पष्टता के बिना, सुपर क्या है।" ( ibm.com/developerworks/library/j-jn8 )
बेन

9

ये पृष्ठ डी प्रोग्रामिंग भाषा में अंतर को स्पष्ट करते हैं।

http://dlang.org/mixin.html

http://dlang.org/traits.html

इस संदर्भ में मिश्रण मक्खी पर उत्पन्न कोड हैं, और फिर संकलन के दौरान कोड में उस बिंदु पर डाला जाता है। सरल डीएसएल के लिए काफी आसान है।

लक्षण समय-बाह्य बाह्य मान हैं (बजाय बाहरी स्रोत से उत्पन्न कोड के)। अंतर सूक्ष्म है। मिक्स तर्क जोड़ते हैं, लक्षण संकलन-समय प्रकार की जानकारी जैसे डेटा जोड़ते हैं।

रूबी के बारे में ज्यादा नहीं जानते, लेकिन उम्मीद है कि इससे कुछ मदद मिलेगी।


41
डी में मिक्सिन्स और ट्रेट्स कंप्यूटर साइंस में आमतौर पर उन शब्दों से पूरी तरह अलग होते हैं। डी में, दोनों स्वचालित कोड पीढ़ी के लिए प्रीप्रोसेसर प्राइमरी हैं। अन्य भाषाओं में, वे विरासत तंत्र हैं। डी में नामकरण का निर्णय दुर्भाग्यपूर्ण है।
टायलरल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.