विशेषता (कंप्यूटर प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Concept used in object-oriented programming}} {{Technical|date=March 2012}} {{more citations needed|date=November 2022}} कंप्यूटर प्...")
 
No edit summary
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Concept used in object-oriented programming}}
{{Short description|Concept used in object-oriented programming}}[[कंप्यूटर प्रोग्रामिंग]] में, '''ट्रैट''' [[प्रोग्रामिंग भाषा]] में प्रयुक्त एक अवधारणा है जो [[विधि (कंप्यूटर प्रोग्रामिंग)]] के एक सेट का प्रतिनिधित्व करती है जिसका उपयोग [[कक्षा (कंप्यूटर विज्ञान)|क्लास (कंप्यूटर विज्ञान)]] की कार्यक्षमता बढ़ाने के लिए किया जा सकता है।<ref name="schaerli-ecoop-2003">{{cite journal | first1=Nathanael | last1=Schärli | first2=Stéphane | last2=Ducasse | first3=Oscar | last3=Nierstrasz | author-link3=Oscar Nierstrasz | first4=Andrew P. | last4=Black | url=http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf | title=Traits: Composable Units of Behaviour | journal=Proceedings of the European Conference on Object-Oriented Programming (ECOOP). | series=Lecture Notes in Computer Science | volume=2743 | year=2003 | pages=248–274 |publisher=Springer |doi=10.1007/978-3-540-45070-2_12 |isbn=978-3-540-45070-2 |citeseerx=10.1.1.1011.8}}</ref><ref>{{cite journal | first1=Stéphane | last1=Ducasse | first2=Oscar | last2=Nierstrasz | first3=Nathanael | last3=Schärli | first4=Roel | last4=Wuyts | first5=Andrew P. | last5=Black | title=Traits: A mechanism for fine-grained reuse. | journal= ACM Transactions on Programming Languages and Systems | volume=28 | issue=2 | pages=331–388 | date=March 2006 | doi=10.1145/1119479.1119483 |citeseerx=10.1.1.64.2480| s2cid=16434119 }}</ref>
{{Technical|date=March 2012}}
{{more citations needed|date=November 2022}}
 
[[कंप्यूटर प्रोग्रामिंग]] में, एक विशेषता [[प्रोग्रामिंग भाषा]] में प्रयुक्त एक अवधारणा है जो [[विधि (कंप्यूटर प्रोग्रामिंग)]] के एक सेट का प्रतिनिधित्व करती है जिसका उपयोग [[कक्षा (कंप्यूटर विज्ञान)]] की कार्यक्षमता बढ़ाने के लिए किया जा सकता है।<ref name="schaerli-ecoop-2003">{{cite journal | first1=Nathanael | last1=Schärli | first2=Stéphane | last2=Ducasse | first3=Oscar | last3=Nierstrasz | author-link3=Oscar Nierstrasz | first4=Andrew P. | last4=Black | url=http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf | title=Traits: Composable Units of Behaviour | journal=Proceedings of the European Conference on Object-Oriented Programming (ECOOP). | series=Lecture Notes in Computer Science | volume=2743 | year=2003 | pages=248–274 |publisher=Springer |doi=10.1007/978-3-540-45070-2_12 |isbn=978-3-540-45070-2 |citeseerx=10.1.1.1011.8}}</ref><ref>{{cite journal | first1=Stéphane | last1=Ducasse | first2=Oscar | last2=Nierstrasz | first3=Nathanael | last3=Schärli | first4=Roel | last4=Wuyts | first5=Andrew P. | last5=Black | title=Traits: A mechanism for fine-grained reuse. | journal= ACM Transactions on Programming Languages and Systems | volume=28 | issue=2 | pages=331–388 | date=March 2006 | doi=10.1145/1119479.1119483 |citeseerx=10.1.1.64.2480| s2cid=16434119 }}</ref>




== तर्क ==
== तर्क ==
वस्तु-उन्मुख प्रोग्रामिंग में, व्यवहार कभी-कभी उन वर्गों के बीच साझा किया जाता है जो एक दूसरे से संबंधित नहीं होते हैं। उदाहरण के लिए, कई असंबंधित वर्गों में जेएसओएन को [[क्रमबद्धता]] ऑब्जेक्ट्स के तरीके हो सकते हैं। ऐतिहासिक रूप से, व्यवहार की आवश्यकता वाले प्रत्येक वर्ग में कोड को डुप्लिकेट किए बिना इसे हल करने के लिए कई दृष्टिकोण रहे हैं। अन्य तरीकों में [[ एकाधिक वंशानुक्रम ]] और [[मिक्सिन]] शामिल हैं, लेकिन इनमें कमियां हैं: कोड का व्यवहार अप्रत्याशित रूप से बदल सकता है यदि मिक्सिन लागू करने के क्रम में बदलाव किया जाता है, या यदि पैरेंट क्लास या मिक्सिन में नए तरीके जोड़े जाते हैं।
वस्तु-उन्मुख प्रोग्रामिंग में, व्यवहार कभी-कभी उन क्लासेस के बीच साझा किया जाता है जो एक दूसरे से संबंधित नहीं होते हैं। उदाहरण के लिए, कई असंबद्ध क्लासेस में ऑब्जेक्ट को जेएसओएन में क्रमबद्ध करने के तरीके हो सकते हैं। ऐतिहासिक रूप से, व्यवहार की आवश्यकता वाले प्रत्येक क्लास में कोड को अनुलिपि किए बिना इसे हल करने के लिए कई दृष्टिकोण रहे हैं। अन्य तरीकों में [[ एकाधिक वंशानुक्रम |एकाधिक इन्हेरिटेन्स]] और [[मिक्सिन]] सम्मिलित हैं, लेकिन इनमें कमियां हैं: कोड का व्यवहार अप्रत्याशित रूप से बदल सकता है यदि मिक्सिन प्रयुक्त करने के क्रम में बदलाव किया जाता है, या यदि पैरेंट क्लास या मिक्सिन में नए तरीके जोड़े जाते हैं।


लक्षण इन समस्याओं को कक्षाओं को विशेषता का उपयोग करने और वांछित व्यवहार प्राप्त करने की अनुमति देकर हल करते हैं। यदि एक वर्ग एक से अधिक लक्षणों का उपयोग करता है, तो जिस क्रम में लक्षणों का उपयोग किया जाता है, उससे कोई फर्क नहीं पड़ता। लक्षणों द्वारा प्रदान की गई विधियों की कक्षा के डेटा तक सीधी पहुंच है।
ट्रेट इन समस्याओं को क्लासेस को ट्रैट का उपयोग करने और वांछित व्यवहार प्राप्त करने की स्वीकृति देकर संशोधन करते हैं। यदि एक क्लास एक से अधिक ट्रैट का उपयोग करता है, तो जिस क्रम में ट्रैट का उपयोग किया जाता है, उससे कोई अंतर नहीं होता है। ट्रैट द्वारा प्रदान की गई विधियों की क्लास के डेटा तक प्रत्यक्ष रूप से अभिगम्य है।


== विशेषताएं ==
== विशेषताएं ==
लक्षण प्रोटोकॉल (ऑब्जेक्ट उन्मुख प्रोग्रामिंग) | प्रोटोकॉल (इंटरफेस) और [[मिश्रण]] के पहलुओं को जोड़ते हैं। एक इंटरफ़ेस की तरह, एक विशेषता एक या एक से अधिक [[फंक्शन प्रोटोटाइप]] को परिभाषित करती है, जिनमें से लागू करने वाली कक्षाओं को कार्यान्वयन प्रदान करना चाहिए। एक मिश्रण की तरह, एक विशेषता कार्यान्वयन वर्ग के लिए अतिरिक्त व्यवहार प्रदान करती है।
ट्रेट प्रोटोकॉल (इंटरफेस) और [[मिश्रण|मिक्सिन]] के स्वरूपों को जोड़ते हैं। एक इंटरफ़ेस की तरह, एक ट्रैट एक या एक से अधिक [[फंक्शन प्रोटोटाइप]] को परिभाषित करती है, जिनमें से प्रयुक्त करने वाली क्लासेस को कार्यान्वयन प्रदान करना चाहिए। एक मिक्सिन की तरह, एक ट्रैट कार्यान्वयन क्लास के लिए अतिरिक्त व्यवहार प्रदान करती है।


विभिन्न गुणों द्वारा प्रदान की गई विधियों के बीच नामकरण टकराव के मामले में, प्रोग्रामर को स्पष्ट रूप से स्पष्ट करना चाहिए कि कक्षा में इनमें से कौन सी विधियों का उपयोग किया जाएगा; इस प्रकार मल्टीपल इनहेरिटेंस # द डायमंड प्रॉब्लम ऑफ मल्टीपल इनहेरिटेंस को मैन्युअल रूप से हल करना। यह वस्तु-उन्मुख प्रोग्रामिंग में अन्य रचना विधियों से अलग है, जहाँ परस्पर विरोधी नाम स्कोप (कंप्यूटर विज्ञान) द्वारा स्वचालित रूप से हल हो जाते हैं।
विभिन्न गुणों द्वारा प्रदान की गई विधियों के बीच नामकरण संघट्टन के स्थिति में, प्रोग्रामर को स्पष्ट रूप से स्पष्ट करना चाहिए कि क्लास में इनमें से कौन सी विधियों का उपयोग किया जाएगा; इस प्रकार एकाधिक इन्हेरिटेन्स की हीरक की समस्या को मैन्युअल रूप से संशोधन करना। यह वस्तु-उन्मुख प्रोग्रामिंग में अन्य रचना विधियों से अलग है, जहां परस्पर विरोधी नाम स्कूपिंग (कम्प्यूटर विज्ञान) नियमों द्वारा स्वचालित रूप से संशोधित हो जाते हैं।


संचालन जो लक्षणों के साथ किए जा सकते हैं उनमें शामिल हैं:<ref>{{cite journal
संचालन जो ट्रैट के साथ किए जा सकते हैं उनमें सम्मिलित हैं:<ref>{{cite journal
|first1        = Kathleen |last1 = Fisher | author1-link = Kathleen Fisher
|first1        = Kathleen |last1 = Fisher | author1-link = Kathleen Fisher
|first2        = John    |last2 = Reppy
|first2        = John    |last2 = Reppy
Line 36: Line 32:
|year          = 2004
|year          = 2004
}}</ref>
}}</ref>
* सममित योग: एक ऑपरेशन जो एक नई विशेषता बनाने के लिए दो अलग-अलग लक्षणों को मिलाता है
* सममित योग: एक संचालक जो एक नई ट्रैट बनाने के लिए दो अलग-अलग ट्रैट को मिलाता है
* ओवरराइड (या असममित योग): एक ऑपरेशन जो किसी मौजूदा विशेषता में विधियों को जोड़कर एक नई विशेषता बनाता है, संभवतः इसके कुछ तरीकों को ओवरराइड करने वाली विधि
* ओवरराइड (या असममित योग): संचालक जो किसी सम्मिलित ट्रैट में विधियों को जोड़कर एक नई ट्रैट बनाता है, संभवतः इसके कुछ तरीकों को ओवरराइड करता है
* उपनाम: एक ऑपरेशन जो मौजूदा पद्धति के लिए एक नया नाम जोड़कर एक नया गुण बनाता है
* अन्य नाम: एक संचालक जो सम्मिलित पद्धति के लिए एक नया नाम जोड़कर एक नया ट्रैट बनाता है
* अपवर्जन: एक ऑपरेशन जो किसी मौजूदा विशेषता से एक विधि को हटाकर एक नया गुण बनाता है। (इसे उपनाम ऑपरेशन के साथ जोड़कर एक उथला नाम बदलें ऑपरेशन उत्पन्न होता है)।
* बहिष्करण: एक संचालक जो किसी सम्मिलित ट्रैट से एक विधि को हटाकर एक नया ट्रैट बनाता है। इसे उपनाम संचालक के साथ जोड़कर एक उथला नाम बदलें संचालक उत्पन्न होता है।


यदि किसी विशेषता से किसी विधि को बाहर रखा गया है, तो वह विधि उस वर्ग द्वारा प्रदान की जानी चाहिए जो विशेषता का उपभोग करती है, या उस वर्ग के मूल वर्ग द्वारा। ऐसा इसलिए है क्योंकि विशेषता द्वारा प्रदान की गई विधियाँ बहिष्कृत विधि कह सकती हैं।
यदि किसी ट्रैट से किसी विधि को बाहर रखा गया है, तो वह विधि उस क्लास द्वारा प्रदान की जानी चाहिए जो ट्रैट का उपभोग करती है, या उस क्लास के पैरेंट क्लास द्वारा करता है। ऐसा इसलिए है क्योंकि ट्रैट द्वारा प्रदान की गई विधियाँ बहिष्कृत विधि कह सकती हैं।


विशेषता रचना क्रम[[विनिमेय]] है (अर्थात दिए गए गुण A और B, A + B, B + A के समतुल्य हैं) और साहचर्य (अर्थात दिए गए लक्षण A, B, और C, (A + B) + C, A + (B +) के समतुल्य हैं सी))।<ref name="schaerli-ecoop-2003"/>
ट्रैट रचना क्रम[[विनिमेय]] है अर्थात दिए गए ट्रैट A और B, A + B, B + A के समतुल्य हैं और साहचर्य अर्थात दिए गए ट्रेट A, B, और C, (A + B) + C, A + (B +) के समतुल्य C है।<ref name="schaerli-ecoop-2003"/>




== सीमाएं ==
== सीमाएं ==
जबकि लक्षण कई विकल्पों पर महत्वपूर्ण लाभ प्रदान करते हैं, उनकी अपनी सीमाएँ होती हैं।
जबकि ट्रेट कई विकल्पों पर महत्वपूर्ण लाभ प्रदान करते हैं, उनकी अपनी सीमाएँ होती हैं।


=== आवश्यक तरीके ===
=== आवश्यक विधि ===


यदि एक लक्षण के लिए उपभोग करने वाले वर्ग को कुछ तरीके प्रदान करने की आवश्यकता होती है, तो विशेषता यह नहीं जान सकती है कि क्या वे विधियाँ लक्षण की जरूरतों के लिए शब्दार्थ_समानता हैं। पर्ल जैसी कुछ गतिशील भाषाओं के लिए, आवश्यक विधि को केवल एक विधि नाम से पहचाना जा सकता है, पूर्ण प्रकार के हस्ताक्षर से नहीं, जिससे यह गारंटी देना कठिन हो जाता है कि आवश्यक विधि उपयुक्त है।
यदि एक ट्रेट के लिए उपभोग करने वाले क्लास को कुछ तरीके प्रदान करने की आवश्यकता होती है, तो ट्रैट यह नहीं पहचान सकती है कि क्या वे विधियाँ ट्रेट की आवश्यकताओ के लिए सेमेन्टिक समानता हैं। पीईआरएल जैसी कुछ गतिशील भाषाओं के लिए, आवश्यक विधि को केवल एक विधि नाम से पहचाना जा सकता है, पूर्ण प्रकार के हस्ताक्षर से नहीं, जिससे यह प्रत्याभूति देना कठिन हो जाता है कि आवश्यक विधि उपयुक्त है।


=== तरीकों को छोड़कर ===
=== बहिष्करण विधि ===


यदि किसी विशेषता से किसी विधि को बाहर रखा जाता है, तो वह विधि विशेषता के लिए एक 'आवश्यक' विधि बन जाती है क्योंकि विशेषता के अन्य तरीके इसे कॉल कर सकते हैं।
यदि किसी ट्रैट से किसी विधि को बाहर रखा जाता है, तो वह विधि ट्रैट के लिए एक 'आवश्यक' विधि बन जाती है क्योंकि ट्रैट के अन्य तरीके इसे कॉल कर सकते हैं।


== समर्थित भाषाएँ ==
== समर्थित भाषाएँ ==
लक्षण मूल रूप से प्रोग्रामिंग लैंग्वेज [[ स्वयं (प्रोग्रामिंग भाषा) ]] से आते हैं<ref>{{cite conference | first1=Gael | last1=Curry | first2=Larry | last2=Baer | first3=Daniel | last3=Lipkie | first4=Bruce | last4=Lee | title=Traits: An approach to multiple-inheritance subclassing | conference=SIGOA Conference on Office Information Systems | pages=1–9 | location=Philadelphia, Pennsylvania, USA | year=1982 | publisher=ACM Press | doi=10.1145/966873.806468 }}</ref> और निम्नलिखित प्रोग्रामिंग भाषाओं द्वारा समर्थित हैं:
ट्रेट मूल रूप से प्रोग्रामिंग लैंग्वेज [[ स्वयं (प्रोग्रामिंग भाषा) |स्वयं (प्रोग्रामिंग भाषा)]] से आते हैं<ref>{{cite conference | first1=Gael | last1=Curry | first2=Larry | last2=Baer | first3=Daniel | last3=Lipkie | first4=Bruce | last4=Lee | title=Traits: An approach to multiple-inheritance subclassing | conference=SIGOA Conference on Office Information Systems | pages=1–9 | location=Philadelphia, Pennsylvania, USA | year=1982 | publisher=ACM Press | doi=10.1145/966873.806468 }}</ref> और निम्नलिखित प्रोग्रामिंग भाषाओं द्वारा समर्थित हैं:


* [[एम्बिएंट टॉक]]: सेल्फ ट्रेट्स (ऑब्जेक्ट-बेस्ड मल्टीपल इनहेरिटेंस) और स्मॉलटाक के [[ चीख़ ]] ट्रेट्स (प्रोग्रामर द्वारा लक्षणों की स्पष्ट रचना की आवश्यकता) के गुणों को जोड़ती है। यह राज्यों के भीतर राज्य को सक्षम करने के लिए स्टेटफुल और फ्रीज़ेबल लक्षणों पर शोध पर बनाता है, जिसे पहली परिभाषाओं में अनुमति नहीं दी गई थी।<ref>{{cite conference | url=http://soft.vub.ac.be/Publications/2009/vub-prog-tr-09-04.pdf | title=लेक्सिकल नेस्टिंग का उपयोग करके लक्षणों में राज्य और दृश्यता नियंत्रण जोड़ना| conference=European Conference on Object-Oriented Programming (ECOOP 2009) | first1=Tom | last1=Van Cutsem | first2=Alexandre | last2=Bergel | first3=Stéphane | last3=Ducasse | first4=Wolfgang | last4=De Meuter | pages=220–243 | publisher=Springer-Verlag | isbn=978-3-642-03012-3 | date=2009 | series=Lecture Notes in Computer Science | volume=5653 |doi=10.1007/978-3-642-03013-0_11 |citeseerx=10.1.1.372.1265}}</ref>
* [[एम्बिएंट टॉक]]: सेल्फ ट्रेट्स (ऑब्जेक्ट-आधारित एकाधिक इनहेरिटेंस) और स्मॉलटाक के स्क्वीक ट्रेट्स (प्रोग्रामर द्वारा ट्रेट की स्पष्ट संयोजन की आवश्यकता) के गुणों को जोड़ती है। यह ट्रैट के अंदर स्थिति को सक्षम करने के लिए स्टेटफुल और फ्रीज़ेबल ट्रैट पर शोध पर आधारित है, जिसकी पहली परिभाषाओं में स्वीकृति नहीं थी।<ref>{{cite conference | url=http://soft.vub.ac.be/Publications/2009/vub-prog-tr-09-04.pdf | title=लेक्सिकल नेस्टिंग का उपयोग करके लक्षणों में राज्य और दृश्यता नियंत्रण जोड़ना| conference=European Conference on Object-Oriented Programming (ECOOP 2009) | first1=Tom | last1=Van Cutsem | first2=Alexandre | last2=Bergel | first3=Stéphane | last3=Ducasse | first4=Wolfgang | last4=De Meuter | pages=220–243 | publisher=Springer-Verlag | isbn=978-3-642-03012-3 | date=2009 | series=Lecture Notes in Computer Science | volume=5653 |doi=10.1007/978-3-642-03013-0_11 |citeseerx=10.1.1.372.1265}}</ref>
*C Sharp (प्रोग्रामिंग भाषा)|C#: संस्करण 8.0 के बाद से, C# में डिफ़ॉल्ट इंटरफ़ेस विधियों के लिए समर्थन है,<ref>{{cite web | url=https://docs.microsoft.com/en-gb/dotnet/csharp/whats-new/csharp-8#default-interface-methods | title=डिफ़ॉल्ट इंटरफ़ेस तरीके| website=What's new in C# 8.0 | publisher=Microsoft | access-date=November 29, 2019}}</ref> जिनमें कुछ विशेष गुण होते हैं।<ref>{{cite web | url=https://www.talkingdotnet.com/default-implementations-in-interfaces-in-c-sharp-8/ | title=Interfaces in C# 8.0 gets a makeover | website=Default Implementation in Interfaces in C# 8.0 | date=9 September 2019 | publisher=Talking Dotnet | access-date=November 29, 2019}}</ref>
*C # (प्रोग्रामिंग भाषा): संस्करण 8.0 के बाद से, C# में डिफ़ॉल्ट इंटरफ़ेस विधियों के लिए समर्थन है,<ref>{{cite web | url=https://docs.microsoft.com/en-gb/dotnet/csharp/whats-new/csharp-8#default-interface-methods | title=डिफ़ॉल्ट इंटरफ़ेस तरीके| website=What's new in C# 8.0 | publisher=Microsoft | access-date=November 29, 2019}}</ref> जिनमें कुछ विशेष गुण होते हैं।<ref>{{cite web | url=https://www.talkingdotnet.com/default-implementations-in-interfaces-in-c-sharp-8/ | title=Interfaces in C# 8.0 gets a makeover | website=Default Implementation in Interfaces in C# 8.0 | date=9 September 2019 | publisher=Talking Dotnet | access-date=November 29, 2019}}</ref>
* [[C++]]: सामान्य [[कंटेनर (डेटा संरचना)]] का समर्थन करने के लिए [[मानक टेम्पलेट लाइब्रेरी]] और C++ मानक लाइब्रेरी में उपयोग किया जाता है<ref>{{cite web | url=http://www.sgi.com/tech/stl/iterator_traits.html | title=iterator_traits&lt;Iterator&gt; | website=Standard Template Library | publisher=SGI}}</ref><ref>{{cite magazine | url=http://www.cantrip.org/traits.html | title=Traits: a new and useful template technique | first=Nathan C. | last=Myers | magazine=C++ Report | date=June 1995 | access-date=January 23, 2016}}</ref> और बूस्ट [[सी ++ पुस्तकालयों को बढ़ावा दें]] टाइपट्रिट्स लाइब्रेरी में।<ref>{{cite web | url=http://www.boost.org/more/generic_programming.html#traits | title=Generic Programming Techniques: Traits | website=Boost C++ Libraries | first=David | last=Abrahams | access-date=January 23, 2016}}</ref>
* C++: जेनेरिक कंटेनर क्लासेस<ref>{{cite web | url=http://www.sgi.com/tech/stl/iterator_traits.html | title=iterator_traits&lt;Iterator&gt; | website=Standard Template Library | publisher=SGI}}</ref><ref>{{cite magazine | url=http://www.cantrip.org/traits.html | title=Traits: a new and useful template technique | first=Nathan C. | last=Myers | magazine=C++ Report | date=June 1995 | access-date=January 23, 2016}}</ref> और बूस्ट टाइपट्रैट्स लाइब्रेरी<ref>{{cite web | url=http://www.boost.org/more/generic_programming.html#traits | title=Generic Programming Techniques: Traits | website=Boost C++ Libraries | first=David | last=Abrahams | access-date=January 23, 2016}}</ref> को समर्थन करने के लिए मानक टेम्प्लेट लाइब्रेरी और C++ मानक लाइब्रेरी में उपयोग किया जाता है।
* [[ कर्ल (प्रोग्रामिंग भाषा) ]]: मिक्सिन्स के रूप में सार वर्ग विधि कार्यान्वयन की अनुमति देता है और इस प्रकार दूसरे नाम से लक्षण बनाता है।{{citation needed|date=January 2016}}
* [[ कर्ल (प्रोग्रामिंग भाषा) | सीयूआरएल (प्रोग्रामिंग भाषा)]] : मिक्सिन्स के रूप में एब्स्ट्रेक्ट क्लास विधि कार्यान्वयन की स्वीकृति देता है और इस प्रकार दूसरे नाम से ट्रेट बनाता है।{{citation needed|date=January 2016}}
* [[डी (प्रोग्रामिंग भाषा)]]: संस्करण 2.003 के बाद से, __traits भाषा विस्तार<ref>{{cite web | url=http://dlang.org/traits.html | title=लक्षण| website=The D Language Reference | publisher=Digital Mars | access-date=January 23, 2016}}</ref> और एसटीडी.ट्रेट्स मॉड्यूल<ref>{{cite web | url=http://dlang.org/phobos/std_traits.html | title=एसटीडी.लक्षण| website=The D Language — Library Reference | publisher=Digital Mars | access-date=January 23, 2016}}</ref> सहायक टेम्प्लेट संकलन-समय लक्षण प्रदान करते हैं। अन्य भाषा सुविधाओं (विशेष रूप से टेम्प्लेट और मिक्सिन) के साथ, वे इंटरफेस और प्रकारों के आधार पर लचीले स्वचालित पीढ़ी के तरीकों की अनुमति देते हैं। डी कई सदस्य वर्गों को अग्रेषित करने सहित सदस्य विधियों और चर के स्पष्ट अलियासिंग की भी अनुमति देता है।<ref>{{cite web | url=http://dlang.org/class.html#AliasThis | title=कक्षाओं| website=The D Language Reference | publisher=Digital Mars | access-date=January 23, 2016}}</ref>
* [[डी (प्रोग्रामिंग भाषा)|D (प्रोग्रामिंग भाषा)]]: संस्करण 2.003 के बाद से, ट्रैट भाषा विस्तार<ref>{{cite web | url=http://dlang.org/traits.html | title=लक्षण| website=The D Language Reference | publisher=Digital Mars | access-date=January 23, 2016}}</ref> और एसटीडी ट्रेट्स मॉड्यूल<ref>{{cite web | url=http://dlang.org/phobos/std_traits.html | title=एसटीडी.लक्षण| website=The D Language — Library Reference | publisher=Digital Mars | access-date=January 23, 2016}}</ref> सहायक टेम्प्लेट संकलन-समय ट्रेट प्रदान करते हैं। अन्य भाषा सुविधाओं (विशेष रूप से टेम्प्लेट और मिक्सिन) के साथ, वे इंटरफेस और प्रकारों के आधार पर सामान्य स्वचालित पीढ़ी के तरीकों की स्वीकृति देते हैं। D कई मेम्बर क्लासेस को अग्रेषित करने सहित मेम्बर विधियों और वेरिएबल के स्पष्ट अलियासिंग की भी स्वीकृति देता है।<ref>{{cite web | url=http://dlang.org/class.html#AliasThis | title=कक्षाओं| website=The D Language Reference | publisher=Digital Mars | access-date=January 23, 2016}}</ref>
* [[किले (प्रोग्रामिंग भाषा)]]<ref>{{cite web | url=http://stephane.ducasse.free.fr/Teaching/CoursAnnecy/0506-Master/ForPresentations/Fortress-PLDITutorialSlides9Jun2006.pdf | title=किले प्रोग्रामिंग भाषा ट्यूटोरियल| first1=Guy | last1=Steele | first2=Jan-Willem | last2=Maessen | publisher=Sun Microsystems | date=June 11, 2006 | access-date=January 23, 2016}}</ref>
* [[किले (प्रोग्रामिंग भाषा)|फोरटेस (प्रोग्रामिंग भाषा)]]<ref>{{cite web | url=http://stephane.ducasse.free.fr/Teaching/CoursAnnecy/0506-Master/ForPresentations/Fortress-PLDITutorialSlides9Jun2006.pdf | title=किले प्रोग्रामिंग भाषा ट्यूटोरियल| first1=Guy | last1=Steele | first2=Jan-Willem | last2=Maessen | publisher=Sun Microsystems | date=June 11, 2006 | access-date=January 23, 2016}}</ref>
* [[ग्रूवी (प्रोग्रामिंग भाषा)]]: संस्करण 2.3 के बाद से<ref>{{cite web | url=http://www.groovy-lang.org/objectorientation.html#_traits | title=Object Orientation: Traits | website=The Groovy Programming Language | access-date=January 23, 2016}}</ref>
* [[ग्रूवी (प्रोग्रामिंग भाषा)]]: संस्करण 2.3 के बाद से<ref>{{cite web | url=http://www.groovy-lang.org/objectorientation.html#_traits | title=Object Orientation: Traits | website=The Groovy Programming Language | access-date=January 23, 2016}}</ref>
* [[हास्केल (प्रोग्रामिंग भाषा)]]: हास्केल में, लक्षणों को [[ वर्ग टाइप करें ]] के रूप में जाना जाता है।
* [[हास्केल (प्रोग्रामिंग भाषा)]]: हास्केल में, ट्रैट को टाइप क्लास के रूप में जाना जाता है।
* [[ मिला हुआ ]]: संस्करण 2.4.0 के बाद से।<ref>{{Cite news|url=https://haxe.org/download/version/2.4.0/|title=Haxe 2.4.0 - Haxe - The Cross-platform Toolkit|work=Haxe - The Cross-platform Toolkit|access-date=2017-09-12}}</ref> स्टेटिक एक्सटेंशन कहा जाता है<ref>{{Cite news|url=https://haxe.org/manual/lf-static-extension.html|title=मैनुअल - हैक्स - क्रॉस-प्लेटफ़ॉर्म टूलकिट|work=Haxe - The Cross-platform Toolkit|access-date=2017-09-12}}</ref> मैनुअल में, यह उपयोग करता है <code>using</code> कीवर्ड
* [[ मिला हुआ | हैक्स]] : संस्करण 2.4.0 के बाद से<ref>{{Cite news|url=https://haxe.org/download/version/2.4.0/|title=Haxe 2.4.0 - Haxe - The Cross-platform Toolkit|work=Haxe - The Cross-platform Toolkit|access-date=2017-09-12}}</ref> स्थैतिक एक्सटेंशन कहा जाता है<ref>{{Cite news|url=https://haxe.org/manual/lf-static-extension.html|title=मैनुअल - हैक्स - क्रॉस-प्लेटफ़ॉर्म टूलकिट|work=Haxe - The Cross-platform Toolkit|access-date=2017-09-12}}</ref> यह <code>using</code> कीवर्ड का उपयोग करता है
* [[जावा (प्रोग्रामिंग भाषा)]]: संस्करण 8 के बाद से, जावा में डिफ़ॉल्ट विधियों के लिए समर्थन है,<ref>{{cite web | url=https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html | title=डिफ़ॉल्ट तरीके| website=The Java Tutorials | publisher=Oracle | access-date=January 23, 2016}}</ref> जिनमें कुछ विशेष गुण होते हैं।<ref>{{cite journal | url=https://hal.inria.fr/inria-00432538/ | title= FeatherTrait: A Modest Extension of Featherweight Java | first1=Luigi | last1=Liquori | first2=Arnaud | last2=Spiwack | journal= ACM Transactions on Programming Languages and Systems | date=2008 | volume= 30 | issue= 2 | pages= 11:1 |doi=10.1145/1330017.1330022| s2cid= 17231803 }}</ref><ref>{{cite journal | url=https://hal.inria.fr/inria-00432540/ | title= इंटरफेस के साथ फेदरट्रेट जावा का विस्तार| first1=Luigi | last1=Liquori | first2=Arnaud | last2=Spiwack | journal= Theoretical Computer Science | date=2008 | volume= 398 | issue= 1–3 | pages= 243–260 |doi=10.1016/j.tcs.2008.01.051| s2cid= 12923128 | doi-access=free }}</ref><ref>{{cite conference | url=https://hal.inria.fr/hal-01026531/en | title=Trait-oriented Programming in Java 8 | first1=Viviana | last1=Bono | first2=Enrico | last2=Mensa | first3=Marco | last3=Naddeo | conference=International Conference on Principles and Practices of Programming on the Java Platform: virtual machines, languages, and tools (PPPJ ’14) | date=September 2014 | conference-url=http://pppj2014.pk.edu.pl/ |pages=181–6 |doi=10.1145/2647508.2647520 |citeseerx=10.1.1.902.161}}</ref><ref>{{cite web | title=जावा में विशेषता पैटर्न की परिभाषा| url=http://ageofjava.com/2016/02/definition-of-trait-pattern-in-java.html | archive-url=https://web.archive.org/web/20160804005218/http://ageofjava.com/2016/02/definition-of-trait-pattern-in-java.html | url-status=dead | archive-date=August 4, 2016 | website=Age of Java | date=February 3, 2016 | access-date=February 3, 2016 | first=Emil | last=Forslund}}</ref>
* [[जावा (प्रोग्रामिंग भाषा)]]: संस्करण 8 के बाद से, जावा में डिफ़ॉल्ट विधियों के लिए समर्थन है,<ref>{{cite web | url=https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html | title=डिफ़ॉल्ट तरीके| website=The Java Tutorials | publisher=Oracle | access-date=January 23, 2016}}</ref> जिनमें कुछ विशेष गुण होते हैं।<ref>{{cite journal | url=https://hal.inria.fr/inria-00432538/ | title= FeatherTrait: A Modest Extension of Featherweight Java | first1=Luigi | last1=Liquori | first2=Arnaud | last2=Spiwack | journal= ACM Transactions on Programming Languages and Systems | date=2008 | volume= 30 | issue= 2 | pages= 11:1 |doi=10.1145/1330017.1330022| s2cid= 17231803 }}</ref><ref>{{cite journal | url=https://hal.inria.fr/inria-00432540/ | title= इंटरफेस के साथ फेदरट्रेट जावा का विस्तार| first1=Luigi | last1=Liquori | first2=Arnaud | last2=Spiwack | journal= Theoretical Computer Science | date=2008 | volume= 398 | issue= 1–3 | pages= 243–260 |doi=10.1016/j.tcs.2008.01.051| s2cid= 12923128 | doi-access=free }}</ref><ref>{{cite conference | url=https://hal.inria.fr/hal-01026531/en | title=Trait-oriented Programming in Java 8 | first1=Viviana | last1=Bono | first2=Enrico | last2=Mensa | first3=Marco | last3=Naddeo | conference=International Conference on Principles and Practices of Programming on the Java Platform: virtual machines, languages, and tools (PPPJ ’14) | date=September 2014 | conference-url=http://pppj2014.pk.edu.pl/ |pages=181–6 |doi=10.1145/2647508.2647520 |citeseerx=10.1.1.902.161}}</ref><ref>{{cite web | title=जावा में विशेषता पैटर्न की परिभाषा| url=http://ageofjava.com/2016/02/definition-of-trait-pattern-in-java.html | archive-url=https://web.archive.org/web/20160804005218/http://ageofjava.com/2016/02/definition-of-trait-pattern-in-java.html | url-status=dead | archive-date=August 4, 2016 | website=Age of Java | date=February 3, 2016 | access-date=February 3, 2016 | first=Emil | last=Forslund}}</ref>
* [[जावास्क्रिप्ट]]: कार्यों और प्रतिनिधिमंडलों के माध्यम से लक्षण लागू किए जा सकते हैं<ref>{{cite web | url=http://peterseliger.blogspot.com/2014/04/the-many-talents-of-javascript.html | title=जावास्क्रिप्ट की कई प्रतिभाएँ| first=Peter | last=Seliger | date=April 11, 2014 | access-date=January 23, 2015}}</ref> या पुस्तकालयों के माध्यम से जो गुण प्रदान करते हैं।<ref>{{cite web | url=https://traitsjs.github.io/traits.js-website/ | title=Traits.js: Traits for JavaScript | access-date=January 23, 2016}}</ref><ref>{{cite journal | url=http://soft.vub.ac.be/Publications/2012/vub-soft-tr-12-19.pdf | title=जावास्क्रिप्ट के लिए मजबूत विशेषता संरचना| first1=Tom | last1=Van Cutsem | first2=Mark S. | last2=Miller | journal=Science of Computer Programming| year=2012 | access-date=January 23, 2016}}</ref><ref>{{cite web | url=https://cocktailjs.github.io/ | title=कॉकटेलजेएस| access-date=January 23, 2016}}</ref>
* [[जावास्क्रिप्ट]]: कार्यों और प्रतिनिधिमंडलों के माध्यम से ट्रेट प्रयुक्त किए जा सकते हैं<ref>{{cite web | url=http://peterseliger.blogspot.com/2014/04/the-many-talents-of-javascript.html | title=जावास्क्रिप्ट की कई प्रतिभाएँ| first=Peter | last=Seliger | date=April 11, 2014 | access-date=January 23, 2015}}</ref> या लाइब्रेरी के माध्यम से जो गुण प्रदान करते हैं।<ref>{{cite web | url=https://traitsjs.github.io/traits.js-website/ | title=Traits.js: Traits for JavaScript | access-date=January 23, 2016}}</ref><ref>{{cite journal | url=http://soft.vub.ac.be/Publications/2012/vub-soft-tr-12-19.pdf | title=जावास्क्रिप्ट के लिए मजबूत विशेषता संरचना| first1=Tom | last1=Van Cutsem | first2=Mark S. | last2=Miller | journal=Science of Computer Programming| year=2012 | access-date=January 23, 2016}}</ref><ref>{{cite web | url=https://cocktailjs.github.io/ | title=कॉकटेलजेएस| access-date=January 23, 2016}}</ref>
* [[जूलिया (प्रोग्रामिंग भाषा)]]: कई पैकेज लक्षणों को लागू करते हैं, जैसे,<ref>{{cite web | url=https://github.com/mauro3/सिंपलट्रेट्स.जेएल| title=सिंपलट्रेट्स.जेएल| author=mauro3 | website=[[GitHub]] | access-date=March 23, 2017}}</ref>
* [[जूलिया (प्रोग्रामिंग भाषा)]]: कई पैकेज ट्रैट को प्रयुक्त करते हैं, जैसे,<ref>{{cite web | url=https://github.com/mauro3/सिंपलट्रेट्स.जेएल| title=सिंपलट्रेट्स.जेएल| author=mauro3 | website=[[GitHub]] | access-date=March 23, 2017}}</ref>
* [[कोटलिन (प्रोग्रामिंग भाषा)]]: लक्षणों को इंटरफेस कहा गया है<ref>{{cite web | url=http://kotlinlang.org/docs/reference/interfaces.html | title=इंटरफेस| website=Kotlin Reference | publisher=JetBrains | access-date=January 23, 2016}}</ref> M12 के बाद से।<ref>{{cite web | url=http://blog.jetbrains.com/kotlin/2015/05/kotlin-m12-is-out/ | title=Kotlin M12 is out! | first=Andrey | last=Breslav | website=Kotlin Blog | publisher=JetBrains | date=May 29, 2015 | access-date=January 23, 2016}}</ref>
* [[कोटलिन (प्रोग्रामिंग भाषा)]]: ट्रैट को <ref>{{cite web | url=http://kotlinlang.org/docs/reference/interfaces.html | title=इंटरफेस| website=Kotlin Reference | publisher=JetBrains | access-date=January 23, 2016}}</ref> M12 के बाद से इंटरफेस कहा गया है।<ref>{{cite web | url=http://blog.jetbrains.com/kotlin/2015/05/kotlin-m12-is-out/ | title=Kotlin M12 is out! | first=Andrey | last=Breslav | website=Kotlin Blog | publisher=JetBrains | date=May 29, 2015 | access-date=January 23, 2016}}</ref>
* कमंद (प्रोग्रामिंग भाषा)<ref>{{cite web | url=http://lassoguide.com/language/traits.html | title=लक्षण| website=Lasso Language Guide | publisher=LassoSoft | date=January 6, 2014 | access-date=January 23, 2016}}</ref>
* एलएएसएसओ (प्रोग्रामिंग भाषा)<ref>{{cite web | url=http://lassoguide.com/language/traits.html | title=लक्षण| website=Lasso Language Guide | publisher=LassoSoft | date=January 6, 2014 | access-date=January 23, 2016}}</ref>  
* [[OCaml]]: विभिन्न प्रकार की भाषा सुविधाओं का उपयोग करके लक्षणों को लागू किया जा सकता है: मॉड्यूल और मॉड्यूल प्रकार का समावेशन, फ़ंक्टर और फ़ंक्टर प्रकार, वर्ग और वर्ग प्रकार की विरासत, वगैरह।
* [[OCaml|ऑनलाइन कम्पाइलर]]: विभिन्न प्रकार की भाषा सुविधाओं का उपयोग करके ट्रैट को प्रयुक्त किया जा सकता है: मॉड्यूल और मॉड्यूल प्रकार का समावेशन, फ़ंक्टर और फ़ंक्टर प्रकार, क्लास और क्लास प्रकार इन्हेरिटेन्स, आदि सम्मिलित है।
* [[पर्ल]]: भूमिकाएं कहलाती हैं, वे [[मूस (पर्ल)]], रोल :: टिनी और रोल :: बेसिक जैसे पर्ल पुस्तकालयों में कार्यान्वित की जाती हैं। भूमिकाएँ बहन भाषा [[राकू (प्रोग्रामिंग भाषा)]] का हिस्सा हैं। <ref>{{cite web | url=http://www.modernperlbooks.com/mt/2009/04/the-why-of-perl-roles.html | title=पर्ल रोल्स का क्यों| author=chromatic | date=April 30, 2009 | access-date=January 23, 2016}}</ref> कोरिन्ना ओओपी प्रस्ताव की स्वीकृति के साथ<ref>{{cite web | url=https://github.com/Ovid/Cor/blob/master/rfc/mvp.md | title=कोरिना ओओपी प्रस्ताव| website=Corinna RFC | author=Curtis "Ovid" Poe | access-date=September 30, 2022}}</ref> आधुनिक ओओपी प्रणाली के हिस्से के रूप में पर्ल की भाषा के मूल निवासी भूमिकाएं होंगी।
* [[पर्ल|पीईआरएल]]: भूमिकाएं कहा जाता है, वे मूस, रोल :: टिनी और रोल :: सामान्य जैसे पीईआरएल लाइब्रेरी में प्रयुक्त होते हैं। रोल सहायक भाषा आरएकेयू (प्रोग्रामिंग भाषा) का भाग हैं। <ref>{{cite web | url=http://www.modernperlbooks.com/mt/2009/04/the-why-of-perl-roles.html | title=पर्ल रोल्स का क्यों| author=chromatic | date=April 30, 2009 | access-date=January 23, 2016}}</ref> कोरिन्ना ओओपी प्रस्ताव की स्वीकृति के साथ<ref>{{cite web | url=https://github.com/Ovid/Cor/blob/master/rfc/mvp.md | title=कोरिना ओओपी प्रस्ताव| website=Corinna RFC | author=Curtis "Ovid" Poe | access-date=September 30, 2022}}</ref> आधुनिक ओओपी प्रणाली के भाग के रूप में मूल भाषा की भूमिका होगी।
* [[पीएचपी]]: संस्करण 5.4 के बाद से,<ref>{{cite web | url=http://www.php.net/manual/en/language.oop5.traits.php | title=लक्षण| website=PHP Documentation | publisher=The PHP Group | access-date=January 23, 2016}}</ref><ref name="php:rfc:horizontalreuse">{{cite web | last=Marr | first=Stefan | title=Request for Comments: Horizontal Reuse for PHP | url=https://wiki.php.net/rfc/horizontalreuse | website=PHP.net wiki | publisher=The PHP Group | date=January 9, 2011 | access-date=January 31, 2011}}</ref> PHP उपयोगकर्ताओं को उन टेम्पलेट्स को निर्दिष्ट करने की अनुमति देता है जो छद्म एकाधिक विरासत के रूप में एक से अधिक (विशेषता-) वर्ग से प्राप्त करने की क्षमता प्रदान करते हैं।
* [[पीएचपी]]: संस्करण 5.4 के बाद से,<ref>{{cite web | url=http://www.php.net/manual/en/language.oop5.traits.php | title=लक्षण| website=PHP Documentation | publisher=The PHP Group | access-date=January 23, 2016}}</ref><ref name="php:rfc:horizontalreuse">{{cite web | last=Marr | first=Stefan | title=Request for Comments: Horizontal Reuse for PHP | url=https://wiki.php.net/rfc/horizontalreuse | website=PHP.net wiki | publisher=The PHP Group | date=January 9, 2011 | access-date=January 31, 2011}}</ref> पीएचपी उपयोगकर्ताओं को उन टेम्पलेट्स को निर्दिष्ट करने की स्वीकृति देता है जो छद्म एकाधिक इन्हेरिटेन्स के रूप में एक से अधिक (ट्रैट-) क्लास से प्राप्त करने की क्षमता प्रदान करते हैं।
* [[पायथन (प्रोग्रामिंग भाषा)]]: एक तृतीय-पक्ष पुस्तकालय के माध्यम से,<ref>{{cite web | url=http://py3traits.readthedocs.org/ | title=py3traits Documentation | first=Teppo | last=Perä | access-date=January 23, 2016}}</ref><ref>{{cite web | url=https://github.com/Debith/py2traits | title=py2traits | first=Teppo | last=Perä | website=[[GitHub]] | access-date=January 23, 2016| date=2015-03-25 }}</ref> या उच्च-क्रम मिश्रित कक्षाओं के माध्यम से<ref>{{cite web | url=http://stupid-python-tricks.blogspot.com/2015/04/computed-properties-and-higher-order.html | title = हायर ऑर्डर मिक्सिन क्लासेस| archive-date = 2016-10-09 | archive-url = https://web.archive.org/web/20161009062141/http://stupid-python-tricks.blogspot.com/2015/04/computed-properties-and-higher-order.html }}</ref>
* [[पायथन (प्रोग्रामिंग भाषा)]]: तृतीय-पक्ष लाइब्रेरी के माध्यम से,<ref>{{cite web | url=http://py3traits.readthedocs.org/ | title=py3traits Documentation | first=Teppo | last=Perä | access-date=January 23, 2016}}</ref><ref>{{cite web | url=https://github.com/Debith/py2traits | title=py2traits | first=Teppo | last=Perä | website=[[GitHub]] | access-date=January 23, 2016| date=2015-03-25 }}</ref> या उच्च-क्रम मिक्सिन क्लासेस के माध्यम से<ref>{{cite web | url=http://stupid-python-tricks.blogspot.com/2015/04/computed-properties-and-higher-order.html | title = हायर ऑर्डर मिक्सिन क्लासेस| archive-date = 2016-10-09 | archive-url = https://web.archive.org/web/20161009062141/http://stupid-python-tricks.blogspot.com/2015/04/computed-properties-and-higher-order.html }}</ref>
* [[रैकेट (प्रोग्रामिंग भाषा)]]: एक पुस्तकालय के रूप में लक्षणों का समर्थन करता है और उन्हें लागू करने के लिए मैक्रोज़, संरचनाओं और प्रथम श्रेणी के वर्गों का उपयोग करता है।<ref>{{cite web | url=http://docs.racket-lang.org/reference/trait.html | title=लक्षण| website=The Racket Reference | access-date=January 23, 2016}}</ref>
* [[रैकेट (प्रोग्रामिंग भाषा)|आरएसीकेईटी (प्रोग्रामिंग भाषा)]]: लाइब्रेरी के रूप में ट्रैट का समर्थन करता है और उन्हें प्रयुक्त करने के लिए मैक्रोज़, संरचनाओं और प्रथम श्रेणी के क्लासेस का उपयोग करता है।<ref>{{cite web | url=http://docs.racket-lang.org/reference/trait.html | title=लक्षण| website=The Racket Reference | access-date=January 23, 2016}}</ref>
* [[रूबी (प्रोग्रामिंग भाषा)]]: लक्षणों को लागू करने के लिए मॉड्यूल मिश्रण का उपयोग किया जा सकता है।<ref>{{cite web | url=http://ruby-naseby.blogspot.com/2008/11/traits-in-ruby.html | title=रूबी में गुण| website=Ruby Naseby | author=David Naseby | date=February 14, 2004 | access-date=January 23, 2016}}</ref>
* [[रूबी (प्रोग्रामिंग भाषा)]]: ट्रैट को प्रयुक्त करने के लिए मॉड्यूल मिक्सिन का उपयोग किया जा सकता है।<ref>{{cite web | url=http://ruby-naseby.blogspot.com/2008/11/traits-in-ruby.html | title=रूबी में गुण| website=Ruby Naseby | author=David Naseby | date=February 14, 2004 | access-date=January 23, 2016}}</ref>
* [[जंग (प्रोग्रामिंग भाषा)]]<ref>{{cite web | url=https://doc.rust-lang.org/book/ch10-02-traits.html | title=लक्षण| website=The Rust Programming Language | access-date=September 30, 2019}}</ref>
* आरयूएसटी [[जंग (प्रोग्रामिंग भाषा)|(प्रोग्रामिंग भाषा)]]<ref>{{cite web | url=https://doc.rust-lang.org/book/ch10-02-traits.html | title=लक्षण| website=The Rust Programming Language | access-date=September 30, 2019}}</ref>
* [[स्काला (प्रोग्रामिंग भाषा)]]<ref>{{cite web | url=http://www.scala-lang.org/node/126 | title=लक्षण| website=A Tour of Scala | publisher=[[École polytechnique fédérale de Lausanne]] | access-date=January 23, 2016}}</ref><ref>{{cite web | url=http://www.ibm.com/developerworks/java/library/j-scala04298/ | title=The busy Java developer's guide to Scala: Of traits and behaviors | first=Ted | last=Neward | website=IBM developerWorks | publisher=IBM | date=April 29, 2008 | access-date=January 23, 2016}}</ref> विशेषता कुंजी शब्द के साथ समर्थित है <code>trait</code>.
* [[स्काला (प्रोग्रामिंग भाषा)]]<ref>{{cite web | url=http://www.scala-lang.org/node/126 | title=लक्षण| website=A Tour of Scala | publisher=[[École polytechnique fédérale de Lausanne]] | access-date=January 23, 2016}}</ref><ref>{{cite web | url=http://www.ibm.com/developerworks/java/library/j-scala04298/ | title=The busy Java developer's guide to Scala: Of traits and behaviors | first=Ted | last=Neward | website=IBM developerWorks | publisher=IBM | date=April 29, 2008 | access-date=January 23, 2016}}</ref> ट्रैट कुंजी शब्द <code>trait</code>के साथ समर्थित है
* स्मॉलटाक: स्मॉलटॉक, स्क्वीक की दो बोलियों में लक्षण लागू किए गए हैं<ref name="schaerli-ecoop-2003"/>एंड [[फिरौन]].<ref>{{cite web | url=http://pharo.gemtalksystems.com/book/LanguageAndLibraries/Traits/ | title=10 मिनट में लक्षण| website=Pharo: The CollaborActive Book | access-date=January 23, 2016}}</ref>
* स्मॉलटाक: स्मॉलटॉक की दो भाषाओ स्क्वीक <ref name="schaerli-ecoop-2003"/>[[फिरौन|और फिरौन]]<ref>{{cite web | url=http://pharo.gemtalksystems.com/book/LanguageAndLibraries/Traits/ | title=10 मिनट में लक्षण| website=Pharo: The CollaborActive Book | access-date=January 23, 2016}}</ref> में ट्रेट प्रयुक्त किए गए हैं।
* [[स्विफ्ट (प्रोग्रामिंग भाषा)]]: प्रोटोकॉल एक्सटेंशन के साथ लक्षण लागू किए जा सकते हैं।<ref>{{cite web | url=https://machinethink.net/blog/mixins-and-traits-in-swift-2.0/ | title=Mixins and Traits in Swift 2.0 | first=Matthijs | last=Hollemans | date=July 22, 2015 | access-date=January 23, 2016}}</ref>
* [[स्विफ्ट (प्रोग्रामिंग भाषा)]]: प्रोटोकॉल एक्सटेंशन के साथ ट्रेट प्रयुक्त किए जा सकते हैं।<ref>{{cite web | url=https://machinethink.net/blog/mixins-and-traits-in-swift-2.0/ | title=Mixins and Traits in Swift 2.0 | first=Matthijs | last=Hollemans | date=July 22, 2015 | access-date=January 23, 2016}}</ref>




== उदाहरण ==
== उदाहरण ==


=== सी # ===
=== C # ===
C# 8.0 पर, इंटरफ़ेस के सदस्य के रूप में कार्यान्वयन को परिभाषित करना संभव है। <syntaxhighlight lang= c# >
C# 8.0 पर, इंटरफ़ेस के मेमोरी के रूप में कार्यान्वयन को परिभाषित करना संभव है।  
सिस्टम का उपयोग करना;
using System;
 
नेमस्पेस CSharp8NewFeatures;
namespace CSharp8NewFeatures;
 
इंटरफ़ेस ILogger
interface ILogger
{
{
    // पारंपरिक इंटरफ़ेस तरीके
    // Traditional interface methods
    शून्य लॉग (स्ट्रिंग संदेश);
    void Log(string message);
    शून्य लॉग एरर (अपवाद अपवाद);
    void LogError(Exception exception);
 
    // डिफ़ॉल्ट इंटरफ़ेस विधि
    // Default interface method
    शून्य लॉगवार्निंग (स्ट्रिंग संदेश)
    void LogWarning(string message)
    {
    {
        कंसोल.राइटलाइन (संदेश);
        Console.WriteLine(message);
    }
    }      
}
}
 
वर्ग लकड़हारा: ILogger
class Logger : ILogger
{
{
    सार्वजनिक शून्य लॉग (स्ट्रिंग संदेश)
    public void Log(string message)
    {
    {
        कंसोल.राइटलाइन (संदेश);
        Console.WriteLine(message);
    }
    }
 
    सार्वजनिक शून्य LogError (अपवाद अपवाद)
    public void LogError(Exception exception)
    {
    {
        कंसोल। राइटलाइन (अपवाद। ToString ());
        Console.WriteLine(exception.ToString());
    }
    }
}
}
 
वर्ग कार्यक्रम
class Program
{
{
    स्थैतिक शून्य मुख्य (स्ट्रिंग [] तर्क)
    static void Main(string[] args)
    {
    {
        ILogger लकड़हारा = नया लकड़हारा ();
        ILogger logger = new Logger();
 
        logger.LogWarning (कुछ चेतावनी संदेश);
        logger.LogWarning("Some warning message");
    }
    }
}
}
</वाक्यविन्यास हाइलाइट>


=== पीएचपी ===
====== पीएचपी ======
यह उदाहरण अन्य वर्गों को बढ़ाने के लिए एक विशेषता का उपयोग करता है:
यह उदाहरण अन्य वर्गों को बढ़ाने के लिए एक विशेषता का उपयोग करता है:
<syntaxhighlight lang="php">
// The template
// The template
trait TSingleton
trait TSingleton
{
{
    private static $_instance = null;
    private static $_instance = null;
 
    private function __construct() {} // Must have private default constructor and be aware not to open it in the class
    private function __construct() {} // Must have private default constructor and be aware not to open it in the class
 
    public static function getInstance()
    public static function getInstance()
    {
    {
        if (null === self::$_instance) {
        if (null === self::$_instance) {
            self::$_instance = new self();
            self::$_instance = new self();
        }
        }
 
        return self::$_instance;
        return self::$_instance;
    }
    }
}
}
 
class FrontController
class FrontController
{
{
    use TSingleton;
    use TSingleton;
}
}
 
// Can also be used in already extended classes
// Can also be used in already extended classes
class WebSite extends SomeClass
class WebSite extends SomeClass
{
{
    use TSingleton;
    use TSingleton;
}
}
यह एकाधिक इन्हेरिटेन्स के अनुकरण स्वरूपों की स्वीकृति देता है:
</syntaxhighlight>
यह एकाधिक विरासत के अनुकरण पहलुओं की अनुमति देता है:
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
trait TBounding
trait TBounding
Line 197: Line 190:




=== जंग ===
=== आरयूएसटी ===
रस्ट में एक विशेषता विधियों के एक सेट की घोषणा करती है जिसे एक प्रकार को लागू करना चाहिए।<ref>{{Cite web | url=http://gradebot.org/doc/ipur/trait.html | title=Traits - Introduction to Programming Using Rust}}</ref> रस्ट कंपाइलर्स को खोजे जाने वाले लक्षणों की आवश्यकता होती है, जो रस्ट में [[ सामान्य प्रोग्रामिंग ]] की सुरक्षा सुनिश्चित करता है।
आरयूएसटी में एक ट्रैट विधियों के एक सेट की घोषणा करती है जिसे एक प्रकार को प्रयुक्त करना चाहिए।<ref>{{Cite web | url=http://gradebot.org/doc/ipur/trait.html | title=Traits - Introduction to Programming Using Rust}}</ref> आरयूएसटी कंपाइलर्स को खोजे जाने वाले ट्रैट की आवश्यकता होती है, जो आरयूएसटी में [[ सामान्य प्रोग्रामिंग |सामान्य प्रोग्रामिंग]] की सुरक्षा सुनिश्चित करता है।


<syntaxhighlight lang="rust">
<syntaxhighlight lang="rust">
Line 213: Line 206:
}
}
</syntaxhighlight>
</syntaxhighlight>
जैसे लक्षणों के थकाऊ और बार-बार कार्यान्वयन को सरल बनाने के लिए <code>Debug</code> और <code>Ord</code>, <code>derive</code> मैक्रो का उपयोग कंपेलरों को स्वचालित रूप से कुछ कार्यान्वयन उत्पन्न करने के लिए अनुरोध करने के लिए किया जा सकता है।<ref>{{Cite web | url=https://doc.rust-lang.org/book/first-edition/traits.html | title=Traits - the Rust Programming Language}}</ref> व्युत्पन्न लक्षणों में शामिल हैं: <code>Clone</code>, <code>Copy</code>, <code>Debug</code>, <code>Default</code>, <code>PartialEq</code>, <code>Eq</code>, <code>PartialOrd</code>, <code>Ord</code> और <code>Hash</code>.
जैसे ट्रैट के स्थायी और बार-बार कार्यान्वयन को सरल बनाने के लिए <code>Debug</code> और <code>Ord</code>, <code>derive</code> मैक्रो का उपयोग कंपेलरों को स्वचालित रूप से कुछ कार्यान्वयन उत्पन्न करने के लिए अनुरोध करने के लिए किया जा सकता है।<ref>{{Cite web | url=https://doc.rust-lang.org/book/first-edition/traits.html | title=Traits - the Rust Programming Language}}</ref> व्युत्पन्न ट्रैट में : <code>Clone</code>, <code>Copy</code>, <code>Debug</code>, <code>Default</code>, <code>PartialEq</code>, <code>Eq</code>, <code>PartialOrd</code>, <code>Ord</code> और <code>Hash</code> सम्मिलित हैं।


== यह भी देखें ==
== यह भी देखें ==


* [[विस्तार विधि]]
* [[विस्तार विधि|एक्सटेंशन विधि]]
* [[इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]]
* [[इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)|इंटरफ़ेस (वस्तु उन्मुख प्रोग्रामिंग)]]
* [[पैरामीट्रिक बहुरूपता]]
* [[पैरामीट्रिक बहुरूपता]]
* [[यूएफसीएस]]
* [[यूएफसीएस]]
Line 228: Line 221:
==बाहरी संबंध==
==बाहरी संबंध==
* {{cite web | url=http://scg.unibe.ch/research/traits | title=Traits: Composable Units of Behavior | website=Software Composition Group | publisher=University of Bern}}
* {{cite web | url=http://scg.unibe.ch/research/traits | title=Traits: Composable Units of Behavior | website=Software Composition Group | publisher=University of Bern}}
[[Category: सी ++]] [[Category: प्रोग्रामिंग भाषा विषय]] [[Category: प्रकार सिद्धांत]]


[[Category: Machine Translated Page]]
[[Category:All articles with unsourced statements]]
[[Category:Articles with unsourced statements from January 2016]]
[[Category:CS1 errors]]
[[Category:Citation Style 1 templates|M]]
[[Category:Collapse templates]]
[[Category:Created On 13/05/2023]]
[[Category:Created On 13/05/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates based on the Citation/CS1 Lua module]]
[[Category:Templates generating COinS|Cite magazine]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia fully protected templates|Cite magazine]]
[[Category:Wikipedia metatemplates]]
[[Category:प्रकार सिद्धांत]]
[[Category:प्रोग्रामिंग भाषा विषय]]
[[Category:सी ++]]

Latest revision as of 16:59, 29 May 2023

कंप्यूटर प्रोग्रामिंग में, ट्रैट प्रोग्रामिंग भाषा में प्रयुक्त एक अवधारणा है जो विधि (कंप्यूटर प्रोग्रामिंग) के एक सेट का प्रतिनिधित्व करती है जिसका उपयोग क्लास (कंप्यूटर विज्ञान) की कार्यक्षमता बढ़ाने के लिए किया जा सकता है।[1][2]


तर्क

वस्तु-उन्मुख प्रोग्रामिंग में, व्यवहार कभी-कभी उन क्लासेस के बीच साझा किया जाता है जो एक दूसरे से संबंधित नहीं होते हैं। उदाहरण के लिए, कई असंबद्ध क्लासेस में ऑब्जेक्ट को जेएसओएन में क्रमबद्ध करने के तरीके हो सकते हैं। ऐतिहासिक रूप से, व्यवहार की आवश्यकता वाले प्रत्येक क्लास में कोड को अनुलिपि किए बिना इसे हल करने के लिए कई दृष्टिकोण रहे हैं। अन्य तरीकों में एकाधिक इन्हेरिटेन्स और मिक्सिन सम्मिलित हैं, लेकिन इनमें कमियां हैं: कोड का व्यवहार अप्रत्याशित रूप से बदल सकता है यदि मिक्सिन प्रयुक्त करने के क्रम में बदलाव किया जाता है, या यदि पैरेंट क्लास या मिक्सिन में नए तरीके जोड़े जाते हैं।

ट्रेट इन समस्याओं को क्लासेस को ट्रैट का उपयोग करने और वांछित व्यवहार प्राप्त करने की स्वीकृति देकर संशोधन करते हैं। यदि एक क्लास एक से अधिक ट्रैट का उपयोग करता है, तो जिस क्रम में ट्रैट का उपयोग किया जाता है, उससे कोई अंतर नहीं होता है। ट्रैट द्वारा प्रदान की गई विधियों की क्लास के डेटा तक प्रत्यक्ष रूप से अभिगम्य है।

विशेषताएं

ट्रेट प्रोटोकॉल (इंटरफेस) और मिक्सिन के स्वरूपों को जोड़ते हैं। एक इंटरफ़ेस की तरह, एक ट्रैट एक या एक से अधिक फंक्शन प्रोटोटाइप को परिभाषित करती है, जिनमें से प्रयुक्त करने वाली क्लासेस को कार्यान्वयन प्रदान करना चाहिए। एक मिक्सिन की तरह, एक ट्रैट कार्यान्वयन क्लास के लिए अतिरिक्त व्यवहार प्रदान करती है।

विभिन्न गुणों द्वारा प्रदान की गई विधियों के बीच नामकरण संघट्टन के स्थिति में, प्रोग्रामर को स्पष्ट रूप से स्पष्ट करना चाहिए कि क्लास में इनमें से कौन सी विधियों का उपयोग किया जाएगा; इस प्रकार एकाधिक इन्हेरिटेन्स की हीरक की समस्या को मैन्युअल रूप से संशोधन करना। यह वस्तु-उन्मुख प्रोग्रामिंग में अन्य रचना विधियों से अलग है, जहां परस्पर विरोधी नाम स्कूपिंग (कम्प्यूटर विज्ञान) नियमों द्वारा स्वचालित रूप से संशोधित हो जाते हैं।

संचालन जो ट्रैट के साथ किए जा सकते हैं उनमें सम्मिलित हैं:[3][4]

  • सममित योग: एक संचालक जो एक नई ट्रैट बनाने के लिए दो अलग-अलग ट्रैट को मिलाता है
  • ओवरराइड (या असममित योग): संचालक जो किसी सम्मिलित ट्रैट में विधियों को जोड़कर एक नई ट्रैट बनाता है, संभवतः इसके कुछ तरीकों को ओवरराइड करता है
  • अन्य नाम: एक संचालक जो सम्मिलित पद्धति के लिए एक नया नाम जोड़कर एक नया ट्रैट बनाता है
  • बहिष्करण: एक संचालक जो किसी सम्मिलित ट्रैट से एक विधि को हटाकर एक नया ट्रैट बनाता है। इसे उपनाम संचालक के साथ जोड़कर एक उथला नाम बदलें संचालक उत्पन्न होता है।

यदि किसी ट्रैट से किसी विधि को बाहर रखा गया है, तो वह विधि उस क्लास द्वारा प्रदान की जानी चाहिए जो ट्रैट का उपभोग करती है, या उस क्लास के पैरेंट क्लास द्वारा करता है। ऐसा इसलिए है क्योंकि ट्रैट द्वारा प्रदान की गई विधियाँ बहिष्कृत विधि कह सकती हैं।

ट्रैट रचना क्रमविनिमेय है अर्थात दिए गए ट्रैट A और B, A + B, B + A के समतुल्य हैं और साहचर्य अर्थात दिए गए ट्रेट A, B, और C, (A + B) + C, A + (B +) के समतुल्य C है।[1]


सीमाएं

जबकि ट्रेट कई विकल्पों पर महत्वपूर्ण लाभ प्रदान करते हैं, उनकी अपनी सीमाएँ होती हैं।

आवश्यक विधि

यदि एक ट्रेट के लिए उपभोग करने वाले क्लास को कुछ तरीके प्रदान करने की आवश्यकता होती है, तो ट्रैट यह नहीं पहचान सकती है कि क्या वे विधियाँ ट्रेट की आवश्यकताओ के लिए सेमेन्टिक समानता हैं। पीईआरएल जैसी कुछ गतिशील भाषाओं के लिए, आवश्यक विधि को केवल एक विधि नाम से पहचाना जा सकता है, पूर्ण प्रकार के हस्ताक्षर से नहीं, जिससे यह प्रत्याभूति देना कठिन हो जाता है कि आवश्यक विधि उपयुक्त है।

बहिष्करण विधि

यदि किसी ट्रैट से किसी विधि को बाहर रखा जाता है, तो वह विधि ट्रैट के लिए एक 'आवश्यक' विधि बन जाती है क्योंकि ट्रैट के अन्य तरीके इसे कॉल कर सकते हैं।

समर्थित भाषाएँ

ट्रेट मूल रूप से प्रोग्रामिंग लैंग्वेज स्वयं (प्रोग्रामिंग भाषा) से आते हैं[5] और निम्नलिखित प्रोग्रामिंग भाषाओं द्वारा समर्थित हैं:

  • एम्बिएंट टॉक: सेल्फ ट्रेट्स (ऑब्जेक्ट-आधारित एकाधिक इनहेरिटेंस) और स्मॉलटाक के स्क्वीक ट्रेट्स (प्रोग्रामर द्वारा ट्रेट की स्पष्ट संयोजन की आवश्यकता) के गुणों को जोड़ती है। यह ट्रैट के अंदर स्थिति को सक्षम करने के लिए स्टेटफुल और फ्रीज़ेबल ट्रैट पर शोध पर आधारित है, जिसकी पहली परिभाषाओं में स्वीकृति नहीं थी।[6]
  • C # (प्रोग्रामिंग भाषा): संस्करण 8.0 के बाद से, C# में डिफ़ॉल्ट इंटरफ़ेस विधियों के लिए समर्थन है,[7] जिनमें कुछ विशेष गुण होते हैं।[8]
  • C++: जेनेरिक कंटेनर क्लासेस[9][10] और बूस्ट टाइपट्रैट्स लाइब्रेरी[11] को समर्थन करने के लिए मानक टेम्प्लेट लाइब्रेरी और C++ मानक लाइब्रेरी में उपयोग किया जाता है।
  • सीयूआरएल (प्रोग्रामिंग भाषा) : मिक्सिन्स के रूप में एब्स्ट्रेक्ट क्लास विधि कार्यान्वयन की स्वीकृति देता है और इस प्रकार दूसरे नाम से ट्रेट बनाता है।[citation needed]
  • D (प्रोग्रामिंग भाषा): संस्करण 2.003 के बाद से, ट्रैट भाषा विस्तार[12] और एसटीडी ट्रेट्स मॉड्यूल[13] सहायक टेम्प्लेट संकलन-समय ट्रेट प्रदान करते हैं। अन्य भाषा सुविधाओं (विशेष रूप से टेम्प्लेट और मिक्सिन) के साथ, वे इंटरफेस और प्रकारों के आधार पर सामान्य स्वचालित पीढ़ी के तरीकों की स्वीकृति देते हैं। D कई मेम्बर क्लासेस को अग्रेषित करने सहित मेम्बर विधियों और वेरिएबल के स्पष्ट अलियासिंग की भी स्वीकृति देता है।[14]
  • फोरटेस (प्रोग्रामिंग भाषा)[15]
  • ग्रूवी (प्रोग्रामिंग भाषा): संस्करण 2.3 के बाद से[16]
  • हास्केल (प्रोग्रामिंग भाषा): हास्केल में, ट्रैट को टाइप क्लास के रूप में जाना जाता है।
  • हैक्स : संस्करण 2.4.0 के बाद से[17] स्थैतिक एक्सटेंशन कहा जाता है[18] यह using कीवर्ड का उपयोग करता है
  • जावा (प्रोग्रामिंग भाषा): संस्करण 8 के बाद से, जावा में डिफ़ॉल्ट विधियों के लिए समर्थन है,[19] जिनमें कुछ विशेष गुण होते हैं।[20][21][22][23]
  • जावास्क्रिप्ट: कार्यों और प्रतिनिधिमंडलों के माध्यम से ट्रेट प्रयुक्त किए जा सकते हैं[24] या लाइब्रेरी के माध्यम से जो गुण प्रदान करते हैं।[25][26][27]
  • जूलिया (प्रोग्रामिंग भाषा): कई पैकेज ट्रैट को प्रयुक्त करते हैं, जैसे,[28]
  • कोटलिन (प्रोग्रामिंग भाषा): ट्रैट को [29] M12 के बाद से इंटरफेस कहा गया है।[30]
  • एलएएसएसओ (प्रोग्रामिंग भाषा)[31]
  • ऑनलाइन कम्पाइलर: विभिन्न प्रकार की भाषा सुविधाओं का उपयोग करके ट्रैट को प्रयुक्त किया जा सकता है: मॉड्यूल और मॉड्यूल प्रकार का समावेशन, फ़ंक्टर और फ़ंक्टर प्रकार, क्लास और क्लास प्रकार इन्हेरिटेन्स, आदि सम्मिलित है।
  • पीईआरएल: भूमिकाएं कहा जाता है, वे मूस, रोल :: टिनी और रोल :: सामान्य जैसे पीईआरएल लाइब्रेरी में प्रयुक्त होते हैं। रोल सहायक भाषा आरएकेयू (प्रोग्रामिंग भाषा) का भाग हैं। [32] कोरिन्ना ओओपी प्रस्ताव की स्वीकृति के साथ[33] आधुनिक ओओपी प्रणाली के भाग के रूप में मूल भाषा की भूमिका होगी।
  • पीएचपी: संस्करण 5.4 के बाद से,[34][35] पीएचपी उपयोगकर्ताओं को उन टेम्पलेट्स को निर्दिष्ट करने की स्वीकृति देता है जो छद्म एकाधिक इन्हेरिटेन्स के रूप में एक से अधिक (ट्रैट-) क्लास से प्राप्त करने की क्षमता प्रदान करते हैं।
  • पायथन (प्रोग्रामिंग भाषा): तृतीय-पक्ष लाइब्रेरी के माध्यम से,[36][37] या उच्च-क्रम मिक्सिन क्लासेस के माध्यम से[38]
  • आरएसीकेईटी (प्रोग्रामिंग भाषा): लाइब्रेरी के रूप में ट्रैट का समर्थन करता है और उन्हें प्रयुक्त करने के लिए मैक्रोज़, संरचनाओं और प्रथम श्रेणी के क्लासेस का उपयोग करता है।[39]
  • रूबी (प्रोग्रामिंग भाषा): ट्रैट को प्रयुक्त करने के लिए मॉड्यूल मिक्सिन का उपयोग किया जा सकता है।[40]
  • आरयूएसटी (प्रोग्रामिंग भाषा)[41]
  • स्काला (प्रोग्रामिंग भाषा)[42][43] ट्रैट कुंजी शब्द traitके साथ समर्थित है
  • स्मॉलटाक: स्मॉलटॉक की दो भाषाओ स्क्वीक [1]और फिरौन[44] में ट्रेट प्रयुक्त किए गए हैं।
  • स्विफ्ट (प्रोग्रामिंग भाषा): प्रोटोकॉल एक्सटेंशन के साथ ट्रेट प्रयुक्त किए जा सकते हैं।[45]


उदाहरण

C #

C# 8.0 पर, इंटरफ़ेस के मेमोरी के रूप में कार्यान्वयन को परिभाषित करना संभव है।

using System;

namespace CSharp8NewFeatures;

interface ILogger
{
    // Traditional interface methods
    void Log(string message);
    void LogError(Exception exception);

    // Default interface method
    void LogWarning(string message)
    {
        Console.WriteLine(message);
    }        
}

class Logger : ILogger
{
    public void Log(string message)
    {
        Console.WriteLine(message);
    }

    public void LogError(Exception exception)
    {
        Console.WriteLine(exception.ToString());
    }
}

class Program
{
    static void Main(string[] args)
    {
        ILogger logger = new Logger();

        logger.LogWarning("Some warning message");
    }
}
पीएचपी

यह उदाहरण अन्य वर्गों को बढ़ाने के लिए एक विशेषता का उपयोग करता है:

// The template
trait TSingleton
{
    private static $_instance = null;

    private function __construct() {} // Must have private default constructor and be aware not to open it in the class

    public static function getInstance()
    {
        if (null === self::$_instance) {
            self::$_instance = new self();
        }

        return self::$_instance;
    }
}

class FrontController
{
    use TSingleton;
}

// Can also be used in already extended classes
class WebSite extends SomeClass
{
    use TSingleton;
}

यह एकाधिक इन्हेरिटेन्स के अनुकरण स्वरूपों की स्वीकृति देता है:

trait TBounding
{
    public $x, $y, $width, $height;
}

trait TMoveable
{
    public function moveTo($x, $y)
    {
        // …
    }
}

trait TResizeable
{
    public function resize($newWidth, $newHeight)
    {
        // …
    }
}

class Rectangle
{
    use TBounding, TMoveable, TResizeable;

    public function fillColor($color)
    {
        // …
    }
}


आरयूएसटी

आरयूएसटी में एक ट्रैट विधियों के एक सेट की घोषणा करती है जिसे एक प्रकार को प्रयुक्त करना चाहिए।[46] आरयूएसटी कंपाइलर्स को खोजे जाने वाले ट्रैट की आवश्यकता होती है, जो आरयूएसटी में सामान्य प्रोग्रामिंग की सुरक्षा सुनिश्चित करता है।

// type T must have the "Ord" trait
// so that ">" and "<" operations can be done
fn max<T: Ord>(a: &[T]) -> Option<&T> {
    let mut result = a.first()?;
    for n in a {
        if *n > *result {
            result = &n;
        }
    }
    Some(result)
}

जैसे ट्रैट के स्थायी और बार-बार कार्यान्वयन को सरल बनाने के लिए Debug और Ord, derive मैक्रो का उपयोग कंपेलरों को स्वचालित रूप से कुछ कार्यान्वयन उत्पन्न करने के लिए अनुरोध करने के लिए किया जा सकता है।[47] व्युत्पन्न ट्रैट में : Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord और Hash सम्मिलित हैं।

यह भी देखें

संदर्भ

  1. 1.0 1.1 1.2 Schärli, Nathanael; Ducasse, Stéphane; Nierstrasz, Oscar; Black, Andrew P. (2003). "Traits: Composable Units of Behaviour" (PDF). Proceedings of the European Conference on Object-Oriented Programming (ECOOP). Lecture Notes in Computer Science. Springer. 2743: 248–274. CiteSeerX 10.1.1.1011.8. doi:10.1007/978-3-540-45070-2_12. ISBN 978-3-540-45070-2.
  2. Ducasse, Stéphane; Nierstrasz, Oscar; Schärli, Nathanael; Wuyts, Roel; Black, Andrew P. (March 2006). "Traits: A mechanism for fine-grained reuse". ACM Transactions on Programming Languages and Systems. 28 (2): 331–388. CiteSeerX 10.1.1.64.2480. doi:10.1145/1119479.1119483. S2CID 16434119.
  3. Fisher, Kathleen; Reppy, John (2003). "Statically typed traits" (PDF). University of Chicago. Archived (PDF) from the original on May 17, 2004. {{cite journal}}: Cite journal requires |journal= (help)
  4. Fisher, Kathleen; Reppy, John (2004). A typed calculus of traits (PDF). 11th Workshop on Foundations of Object-oriented Programming. University of Chicago.
  5. Curry, Gael; Baer, Larry; Lipkie, Daniel; Lee, Bruce (1982). Traits: An approach to multiple-inheritance subclassing. SIGOA Conference on Office Information Systems. Philadelphia, Pennsylvania, USA: ACM Press. pp. 1–9. doi:10.1145/966873.806468.
  6. Van Cutsem, Tom; Bergel, Alexandre; Ducasse, Stéphane; De Meuter, Wolfgang (2009). लेक्सिकल नेस्टिंग का उपयोग करके लक्षणों में राज्य और दृश्यता नियंत्रण जोड़ना (PDF). European Conference on Object-Oriented Programming (ECOOP 2009). Lecture Notes in Computer Science. Vol. 5653. Springer-Verlag. pp. 220–243. CiteSeerX 10.1.1.372.1265. doi:10.1007/978-3-642-03013-0_11. ISBN 978-3-642-03012-3.
  7. "डिफ़ॉल्ट इंटरफ़ेस तरीके". What's new in C# 8.0. Microsoft. Retrieved November 29, 2019.
  8. "Interfaces in C# 8.0 gets a makeover". Default Implementation in Interfaces in C# 8.0. Talking Dotnet. 9 September 2019. Retrieved November 29, 2019.
  9. "iterator_traits<Iterator>". Standard Template Library. SGI.
  10. Myers, Nathan C. (June 1995). "Traits: a new and useful template technique". C++ Report. Retrieved January 23, 2016.
  11. Abrahams, David. "Generic Programming Techniques: Traits". Boost C++ Libraries. Retrieved January 23, 2016.
  12. "लक्षण". The D Language Reference. Digital Mars. Retrieved January 23, 2016.
  13. "एसटीडी.लक्षण". The D Language — Library Reference. Digital Mars. Retrieved January 23, 2016.
  14. "कक्षाओं". The D Language Reference. Digital Mars. Retrieved January 23, 2016.
  15. Steele, Guy; Maessen, Jan-Willem (June 11, 2006). "किले प्रोग्रामिंग भाषा ट्यूटोरियल" (PDF). Sun Microsystems. Retrieved January 23, 2016.
  16. "Object Orientation: Traits". The Groovy Programming Language. Retrieved January 23, 2016.
  17. "Haxe 2.4.0 - Haxe - The Cross-platform Toolkit". Haxe - The Cross-platform Toolkit. Retrieved 2017-09-12.
  18. "मैनुअल - हैक्स - क्रॉस-प्लेटफ़ॉर्म टूलकिट". Haxe - The Cross-platform Toolkit. Retrieved 2017-09-12.
  19. "डिफ़ॉल्ट तरीके". The Java Tutorials. Oracle. Retrieved January 23, 2016.
  20. Liquori, Luigi; Spiwack, Arnaud (2008). "FeatherTrait: A Modest Extension of Featherweight Java". ACM Transactions on Programming Languages and Systems. 30 (2): 11:1. doi:10.1145/1330017.1330022. S2CID 17231803.
  21. Liquori, Luigi; Spiwack, Arnaud (2008). "इंटरफेस के साथ फेदरट्रेट जावा का विस्तार". Theoretical Computer Science. 398 (1–3): 243–260. doi:10.1016/j.tcs.2008.01.051. S2CID 12923128.
  22. Bono, Viviana; Mensa, Enrico; Naddeo, Marco (September 2014). Trait-oriented Programming in Java 8. International Conference on Principles and Practices of Programming on the Java Platform: virtual machines, languages, and tools (PPPJ ’14). pp. 181–6. CiteSeerX 10.1.1.902.161. doi:10.1145/2647508.2647520.
  23. Forslund, Emil (February 3, 2016). "जावा में विशेषता पैटर्न की परिभाषा". Age of Java. Archived from the original on August 4, 2016. Retrieved February 3, 2016.
  24. Seliger, Peter (April 11, 2014). "जावास्क्रिप्ट की कई प्रतिभाएँ". Retrieved January 23, 2015.
  25. "Traits.js: Traits for JavaScript". Retrieved January 23, 2016.
  26. Van Cutsem, Tom; Miller, Mark S. (2012). "जावास्क्रिप्ट के लिए मजबूत विशेषता संरचना" (PDF). Science of Computer Programming. Retrieved January 23, 2016.
  27. "कॉकटेलजेएस". Retrieved January 23, 2016.
  28. mauro3. "सिंपलट्रेट्स.जेएल". GitHub. Retrieved March 23, 2017.
  29. "इंटरफेस". Kotlin Reference. JetBrains. Retrieved January 23, 2016.
  30. Breslav, Andrey (May 29, 2015). "Kotlin M12 is out!". Kotlin Blog. JetBrains. Retrieved January 23, 2016.
  31. "लक्षण". Lasso Language Guide. LassoSoft. January 6, 2014. Retrieved January 23, 2016.
  32. chromatic (April 30, 2009). "पर्ल रोल्स का क्यों". Retrieved January 23, 2016.
  33. Curtis "Ovid" Poe. "कोरिना ओओपी प्रस्ताव". Corinna RFC. Retrieved September 30, 2022.
  34. "लक्षण". PHP Documentation. The PHP Group. Retrieved January 23, 2016.
  35. Marr, Stefan (January 9, 2011). "Request for Comments: Horizontal Reuse for PHP". PHP.net wiki. The PHP Group. Retrieved January 31, 2011.
  36. Perä, Teppo. "py3traits Documentation". Retrieved January 23, 2016.
  37. Perä, Teppo (2015-03-25). "py2traits". GitHub. Retrieved January 23, 2016.
  38. "हायर ऑर्डर मिक्सिन क्लासेस". Archived from the original on 2016-10-09.
  39. "लक्षण". The Racket Reference. Retrieved January 23, 2016.
  40. David Naseby (February 14, 2004). "रूबी में गुण". Ruby Naseby. Retrieved January 23, 2016.
  41. "लक्षण". The Rust Programming Language. Retrieved September 30, 2019.
  42. "लक्षण". A Tour of Scala. École polytechnique fédérale de Lausanne. Retrieved January 23, 2016.
  43. Neward, Ted (April 29, 2008). "The busy Java developer's guide to Scala: Of traits and behaviors". IBM developerWorks. IBM. Retrieved January 23, 2016.
  44. "10 मिनट में लक्षण". Pharo: The CollaborActive Book. Retrieved January 23, 2016.
  45. Hollemans, Matthijs (July 22, 2015). "Mixins and Traits in Swift 2.0". Retrieved January 23, 2016.
  46. "Traits - Introduction to Programming Using Rust".
  47. "Traits - the Rust Programming Language".


बाहरी संबंध