2015-11-17 3 views
16

मैं जूलिया के साथ जूनो पर काम कर रहा हूं।
जुलिआ: ओओपी या नहीं

मुझे नहीं पता कि जूलिया ओओपी का समर्थन करता है या नहीं।

उदाहरण के लिए, क्या class या struct सी ++ की तरह कुछ है?

डेटा या फ़ंक्शन जैसे सदस्यों के साथ इसे कैसे घोषित करें?

+7

जब मैं Google 'जूलिया ओओपी का समर्थन करता हूं' मुझे बहुत से संबंधित लेख मिलते हैं। क्या वे सहायक नहीं हैं? वास्तव में? –

+1

यह प्रश्न पहला परिणाम है जो प्रकट होता है जब मैं इसे Google पर देखता हूं;)। किसी भी मामले में जब आप अपने दिमाग में पहुंचने और इसे काम करने के लिए पाइथन या सी ++ भाषा से गुजरते हैं तो यह काफी मुश्किल होता है। अपने अनुभव में =) – silgon

उत्तर

20

संदेह होने पर, दस्तावेज़ पढ़ें ...

http://docs.julialang.org/en/release-0.4/manual/types/#composite-types

लंबी कहानी कम:

type MyType 
    a::Int64 
    b::Float64 
end 

x = MyType(3, 4) 

x.a 

संपादित करें: तरीके परिभाषित कर रहे हैं प्रकार परिभाषा के बाहर है, उदा

function double(x::MyType) 
    x.a *= 2 
end 

तरीके नहीं प्रकार के अंदर रहते हैं, के रूप में वे सी ++ या अजगर में करना होगा, उदाहरण के लिए करते हैं। यह जूलिया, एकाधिक प्रेषण की मुख्य विशेषता में से एक को उपयोगकर्ता द्वारा परिभाषित प्रकारों के साथ काम करने की अनुमति देता है, जो सिस्टम-परिभाषित प्रकारों के समान स्तर पर हैं।

+0

यह थोड़ा सा पैडेंटिक प्रतीत हो सकता है (मैं कोशिश नहीं कर रहा हूं!), अजगर में आपका फ़ंक्शन 'डबल()' केवल एक कार्य होगा, एक विधि नहीं। विवरण: https://stackoverflow.com/questions/20981789/difference-between-methods-and-functions – stucash

+0

बिंदु यह है कि पायथन में आप अक्सर x.double(), यानी ऑब्जेक्ट की एक डबल विधि परिभाषित करेंगे। –

2

मैं भाषा पर कोई विशेषज्ञ नहीं हूं लेकिन मेरी समझ है: हाँ..और नहीं।

इसमें कक्षाओं और structs के बराबर है, हालांकि एक ही कन्स्ट्रक्टर के अलावा उन वस्तुओं पर कोई विधि नहीं है।

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

6

मैं जूलिया उपयोगकर्ता समूह Julia and Object-Oriented Programming के भीतर इस मूल्यवान बातचीत का उल्लेख करना चाहता हूं।
मेरे लिए जूलिया एक पारंपरिक OO भाषा पसंद नहीं है, और मैं हमेशा अधिक के रूप में जूलिया के बारे में सोचना, एक विधि उन्मुखी भाषा कि एक उन्मुखी एक वस्तु की तरह, वह यह है कि क्योंकि आप के संरचना बनाने की कोशिश करता है, तो जूलिया में encapsulated डेटा और कार्यक्षमता, जल्द ही आप खुद को परेशानी में डाल देंगे।

15

जूलिया पूरी तरह से ऑब्जेक्ट-उन्मुख नहीं है क्योंकि आप जूलिया की वस्तुओं ("प्रकार") के तरीकों को संलग्न नहीं कर सकते हैं।हालांकि वस्तुओं के समान प्रकार समान दिखते हैं। हालांकि, चूंकि उनके पास अपने स्वयं के संबंधित तरीके नहीं हैं और कोई विरासत नहीं है, वस्तुएं स्वयं अभिनय नहीं करती हैं। इसके बजाय आपके पास ऐसे कार्य हैं जो वस्तुओं पर कार्य करते हैं।

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

0

हां। यह सिर्फ ठोस वर्गों से कंक्रीट "कक्षाओं" से प्राप्त नहीं हो सकता है।

एकाधिक प्रेषण के साथ कार्य एकल प्रेषण के साथ विधियों का सख्त सामान्यीकरण हैं और सख्ती से अधिक बहुलक हैं। आपको उन्हें कक्षा परिभाषा के बाहर परिभाषित करना होगा, क्योंकि वे कई वस्तुओं से "संबंधित" हो सकते हैं।

ओओ भाषा में पारंपरिक तरीके जूलिया फ़ंक्शंस का एक विशेष मामला है जहां आप केवल पहले तर्क के आधार पर प्रेषण कर रहे हैं।

संबंधित मुद्दे