2010-06-14 29 views
14

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

+4

इन शर्तों में से एक वास्तव में दूसरों के लिए उपयुक्त नहीं है :) (तुलनात्मकता के संबंध में) –

उत्तर

30

एक वर्ग, वर्तमान, पारंपरिक OOP में, डेटा (सदस्य चर) कार्य/प्रक्रियाओं है कि उस डेटा पर काम के साथ साथ ही (सदस्य कार्यों या तरीकों का एक संग्रह है)। कक्षा के अन्य तीन शर्तों से कोई संबंध नहीं है, इस तथ्य से अलग कि इसमें "शामिल है" (बाद में "ठीक से" जुड़ा हुआ है)।

अन्य तीन शब्द ... अच्छा, यह निर्भर करता है।

फ़ंक्शन कंप्यूटिंग कथन का संग्रह है। तो प्रक्रिया है। कुछ बहुत गुदा प्रतिधारण भाषाओं में, हालांकि, एक समारोह एक मूल्य देता है और एक प्रक्रिया नहीं करता है। ऐसी भाषाओं में प्रक्रियाओं का आमतौर पर उनके दुष्प्रभावों (जैसे I/O) के लिए उपयोग किया जाता है जबकि कार्यों का उपयोग गणना के लिए किया जाता है और साइड इफेक्ट्स से बचने के लिए होता है। (यह वह उपयोग है जिसका मैं पक्षपात करता हूं। हाँ, मैं गुदा प्रतिरक्षी हूं।)

अधिकांश भाषाएं गुदा प्रतिरक्षी नहीं हैं, और नतीजतन लोग "फ़ंक्शन" और "प्रक्रिया" शब्द का उपयोग एक दूसरे के रूप में करेंगे , अपनी पृष्ठभूमि के आधार पर एक दूसरे को पसंद करते हैं। (Modula- * प्रोग्रामर "प्रक्रिया" का उपयोग करते हैं जाएगा, जबकि C/C++/जावा/जो कुछ भी, "समारोह" का उपयोग करने के उदाहरण के लिए। करते हैं) एक समारोह (या प्रक्रिया) के लिए

एक विधि सिर्फ शब्दजाल है एक वर्ग के लिए बाध्य। दरअसल सभी ओओपी भाषाएं "विधि" शब्द का उपयोग नहीं करती हैं। एक ठेठ (लेकिन सार्वभौमिक नहीं!) कार्यान्वयन में, विधियों में अंतर्निहित प्रथम पैरामीटर (जिसे this या self या जैसे) कहा जाता है, जिसमें कक्षा शामिल है। जैसा कि मैंने कहा, सार्वभौमिक नहीं है। कुछ भाषाएं पहले पैरामीटर को स्पष्ट करती हैं (और इस प्रकार आप जो भी चाहें नामित करने की अनुमति देते हैं) जबकि अभी भी दूसरों में कोई जादू पहला पैरामीटर नहीं है।


संपादित इस उदाहरण को जोड़ने के लिए:

निम्नलिखित अपरीक्षित और uncompiled सी ++ - कोड की तरह आप दिखाना चाहिए क्या बातें की तरह शामिल कर रहे हैं।

class MyClass 
{ 
    int memberVariable; 

    void setMemberVariableProcedure(int v) 
    { 
    memberVariable = v; 
    } 

    int getMemberVariableFunction() 
    { 
    return memberVariable; 
    } 
}; 

void plainOldProcedure(int stuff) 
{ 
    cout << stuff; 
} 

int plainOldFunction(int stuff) 
{ 
    return 2 * stuff; 
} 

इस कोड getMemberVariableProcedure में और getMemberVariableFunction दोनों तरीके हैं।

+3

जोड़ने के लिए धन्यवाद फ़ंक्शन/प्रक्रिया अंतर वास्तव में गुदा नहीं है - यह वास्तव में एक अच्छा विचार है, और इसे अक्सर कमांड/क्वेरी अलगाव कहा जाता है। – kyoryu

+1

इसका मतलब यह है कि आप गुदा प्रतिशोध के रूप में (या यह "गुदा-प्रतिधारण" है?) जैसा कि मैं हूं। ;) –

+0

धन्यवाद आप मेरे साथ उदाहरण प्रदान कर सकते हैं। इस बीच अंतर करने के लिए? –

3

प्रक्रियाएं, कार्य और विधियां आम तौर पर समान होती हैं, उनमें कुछ प्रसंस्करण विवरण होते हैं।

इन तीनों और उन स्थानों के बीच एकमात्र अंतर जो मैं सोच सकता हूं, उनका उपयोग किया जाता है।

मेरा मतलब है कि 'विधि' आमतौर पर कक्षा के भीतर कार्यों को परिभाषित करने के लिए उपयोग की जाती है, जहां कई प्रकार के उपयोगकर्ता सार्वजनिक, संरक्षित, निजी की तरह सही पहुंच सकते हैं।

"प्रक्रियाएं" भी कार्य करती हैं, लेकिन वे आम तौर पर एक समारोह की पूर्ति पर या किसी दूसरे के साथ समानांतर होने पर कार्य की एक श्रृंखला का प्रतिनिधित्व करते हैं।


कक्षाएं संबंधित विशेषताओं और विधियों का संग्रह हैं। गुण कक्षा के उस वस्तु को परिभाषित करते हैं जहां विधियों द्वारा कक्षा द्वारा किए गए कार्यों को किया जाता है।

आशा, इस मददगार था

+0

परंपरागत रूप से, एक प्रक्रिया और एक समारोह के बीच का अंतर यह है कि एक प्रक्रिया एक मूल्य के दौरान एक मूल्य देता है। सी-शैली भाषाएं इस भेद को नहीं बनाती हैं - सबकुछ एक कार्य है, यह सिर्फ 'शून्य' वापस कर सकता है। – walkytalky

+0

@ वाल्कीटाल्की, – Starx

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