खैर, यह एक आम सहमति है कि यह टाइप-चेक नहीं किया गया एक वस्तु रूबी में पारित हो जाता है जब है। जावा और PHP में इंटरफेस पुष्टि करने के लिए है कि एक वस्तु एक निश्चित अनुबंध या "प्रकार" के अनुरूप है एक तरह से कर रहे हैं (ताकि कुछ Serializable
, Authorizable
, Sequential
हो सकता है और हो सकता है और जो कुछ भी है कि आप चाहते हैं)।
हालांकि, रूबी में वहाँ एक अनुबंध है जिसके लिए इंटरफेस इंटरफ़ेस अनुरूपता के रूप में कुछ सार्थक भूमिका को पूरा होगा की कोई औपचारिक धारणा विधि हस्ताक्षर में चेक नहीं किया गया है। उदाहरण के लिए, Enumerable
देखें। जब आप इसे अपने वस्तु में मिश्रण कि आपके वस्तु Enumerable
है की घोषणा करने के लिए आप अपने कार्यक्षमता के रूप में विरोध कर रहे हैं। अपने वस्तु Enumerable
किया जा रहा होने के केवल लाभ यह है कि परिभाषित होने each(&blk)
आप स्वचालित रूप से मुक्त करने के लिए map
, select
और दोस्तों मिलता है। आप पूरी तरह से एक वस्तु जो Enumerable
द्वारा प्रदान की विधियों में से सभी को लागू करता है लेकिन मॉड्यूल में मिश्रण नहीं है हो सकता है और यह अभी भी काम करेगा।
उदाहरण के लिए, रूबी में कोई भी तरीका है कि एक आईओ वस्तु आप कुछ कुछ भी नहीं एक आईओ के साथ क्या करना है कि में फ़ीड सकता है, और फिर इसे एक त्रुटि या साथ विस्फोट कर दे उम्मीद के लिए - यदि आप अपने आईओ ठूंठ सही ढंग से लागू - यह आपके ठीक ऑब्जेक्ट को "आईओ-आईएसएच" घोषित नहीं किया गया है, भले ही यह ठीक काम करेगा।
इसके पीछे का विचार इस तथ्य से आता है कि रूबी में ऑब्जेक्ट्स वास्तव में हैश टेबल को उन पर थप्पड़ मारने वाले टैग के साथ महिमा नहीं कर रहे हैं (जिसके बाद कुछ अतिरिक्त टैग हैं जो दुभाषिया या संकलक को बताते हैं कि इस ऑब्जेक्ट में इंटरफ़ेस एक्स है इसलिए यह संदर्भ वाई में उपयोग किया जा सकता है) लेकिन संदेश के जवाब में एक संलग्न इकाई। तो एक वस्तु एक विशेष संदेश का जवाब अगर यह अनुबंध fullfils, और अगर यह उस संदेश का जवाब नहीं है - अच्छी तरह से तो एक त्रुटि उठाया है।
तो इंटरफेस की अनुपस्थिति को मॉड्यूल की उपस्थिति से आंशिक रूप से मुआवजा दिया जाता है (जिसमें कॉलर/उपभोक्ता को किसी प्रकार के वादे किए बिना आप कार्यक्षमता प्राप्त कर सकते हैं) और आंशिक रूप से संदेश-पास की परंपरा द्वारा टाइप किए गए dicts।
क्योंकि वह बड़े पैमाने पर इस विषय पर छू लेती है आप जिम वेइरिच से कुछ प्रस्तुतियों देखना चाहिए।
PHP एक ओओपी भाषा है? * चकल्स * – NullUserException
http://en.wikipedia.org/wiki/Mixin – robinjam
PHP 5 (मुझे लगता है कि संस्करण था) ने ओओपी डिजाइन अवधारणाओं को PHP में पेश किया लेकिन यह इसे "ओओपी" भाषा नहीं बना। आप अब ओओपी शैली PHP कोड लिख सकते हैं। –