function - एक विधि और एक समारोह के बीच अंतर




oop methods (20)

तरीके और कार्यों के बीच अंतर

माइक्रोसॉफ्ट पर इस दस्तावेज़ को पढ़ने से

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

तो विधियों के कार्यों का सबसेट है। प्रत्येक विधि एक फ़ंक्शन है लेकिन प्रत्येक फ़ंक्शन एक विधि नहीं है, उदाहरण के लिए, एक constructor को विधि के रूप में नहीं कहा जा सकता है लेकिन यह एक फ़ंक्शन है।

क्या कोई ओओपी संदर्भ में विधियों बनाम कार्यों का एक सरल स्पष्टीकरण प्रदान कर सकता है?


आइए मान लें कि एक फ़ंक्शन कोड का एक ब्लॉक है (आमतौर पर अपने स्वयं के दायरे के साथ, और कभी-कभी अपने बंद होने के साथ) जो कुछ तर्क प्राप्त कर सकता है और परिणाम भी दे सकता है।

एक विधि एक ऐसा कार्य होता है जो किसी ऑब्जेक्ट के स्वामित्व में होता है (कुछ ऑब्जेक्ट उन्मुख सिस्टम में, यह कहना सही होता है कि यह एक वर्ग के स्वामित्व में है)। ऑब्जेक्ट / क्लास द्वारा "स्वामित्व" होने का अर्थ है कि आप ऑब्जेक्ट / क्लास के माध्यम से विधि का संदर्भ लेते हैं; उदाहरण के लिए, जावा में यदि आप किसी ऑब्जेक्ट "दरवाजे" के स्वामित्व वाली "खुली ()" विधि को "दरवाजा" लिखना चाहते हैं तो आपको "door.open ()" लिखना होगा।

आम तौर पर विधियों को ऑब्जेक्ट / कक्षा के भीतर अपने व्यवहार का वर्णन करने वाले कुछ अतिरिक्त गुण भी प्राप्त होते हैं, उदाहरण के लिए: दृश्यता (ऑब्जेक्ट उन्मुख अवधारणा से संबंधित) जो परिभाषित करता है कि किस ऑब्जेक्ट (या कक्षाओं) विधि को बुलाया जा सकता है।

कई ऑब्जेक्ट उन्मुख भाषाओं में, सभी "फ़ंक्शन" कुछ ऑब्जेक्ट (या कक्षा) से संबंधित होते हैं और इसलिए इन भाषाओं में ऐसे कोई फ़ंक्शन नहीं हैं जो विधियां नहीं हैं।


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

एक विधि कोड का एक टुकड़ा है जिसे किसी ऑब्जेक्ट से जुड़े नाम से बुलाया जाता है। ज्यादातर मामलों में यह दो महत्वपूर्ण अंतरों को छोड़कर एक समारोह के समान है:

  1. एक विधि उस वस्तु को पूरी तरह से पारित कर दी जाती है जिस पर इसे कहा जाता था।
  2. एक विधि वर्ग के भीतर मौजूद डेटा पर काम करने में सक्षम है (याद रखना कि एक वस्तु कक्षा का एक उदाहरण है - कक्षा परिभाषा है, वस्तु उस डेटा का एक उदाहरण है)।

(यह एक सरल व्याख्या है, scope मुद्दों को अनदेखा आदि)


एक समारोह और विधि के बीच मुख्य अंतर की एक बहुत ही सामान्य परिभाषा:

कार्यों को कक्षाओं के बाहर परिभाषित किया जाता है, जबकि विधियों को कक्षाओं के अंदर और भाग के रूप में परिभाषित किया जाता है।


एक समारोह एक गणितीय अवधारणा है। उदाहरण के लिए:

f(x,y) = sin(x) + cos(y)

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

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

इसलिए, यदि आपके पास एक विधि जी (x) के साथ ऑब्जेक्ट जेड है, तो आप निम्न को देख सकते हैं:

Z.g(x) = sin(x) + cos(Z.y)

इस मामले में, पैरामीटर x पास किया गया है, जैसा कि पहले फ़ंक्शन उदाहरण में था। हालांकि, cos () के लिए पैरामीटर एक मान है जो ऑब्जेक्ट जेड जेड के अंदर रहता है और उसके अंदर रहने वाले डेटा (ज़ी) जेड की जी () विधि के लिए अंतर्निहित पैरामीटर हैं।


ऐतिहासिक रूप से, "विधि" के साथ एक सूक्ष्म अंतर हो सकता है जो कुछ ऐसा नहीं करता है जो एक मूल्य वापस नहीं करता है, और एक "कार्य" जो करता है। प्रत्येक भाषा का विशेष अर्थ के साथ शब्दों का अपना लेक्सिकॉन होता है।

"सी" में , "फ़ंक्शन" शब्द का अर्थ प्रोग्राम प्रोग्राम होता है

जावा में , "फ़ंक्शन" शब्द का कोई विशेष अर्थ नहीं है। जबकि "विधि" का मतलब उन दिनों में से एक है जो कक्षा के कार्यान्वयन को बनाते हैं।

सी # में जो अनुवाद करेगा:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

लेकिन वास्तव में, मैं फिर से उत्साहित करता हूं कि 2 अवधारणाओं में वास्तव में कोई अंतर नहीं है। यदि आप जावा के बारे में अनौपचारिक चर्चाओं में "फ़ंक्शन" शब्द का उपयोग करते हैं, तो लोग आपको "विधि" का अर्थ मानेंगे और आगे बढ़ेंगे। जावा के बारे में उचित दस्तावेज़ों या प्रस्तुतियों में इसका उपयोग न करें, या आप मूर्खतापूर्ण दिखेंगे।


ओओ दुनिया में, दोनों का उपयोग आमतौर पर एक ही चीज़ के लिए किया जाता है।

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


कक्षा के उदाहरण पर कक्षा अधिनियम के तरीके, वस्तु कहा जाता है।

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}

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

# perfectly normal function
def hello(greetee):
  print "Hello", greetee

# generalise a bit (still a function though)
def greet(greeting, greetee):
  print greeting, greetee

# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
  print greeter.greeting, greetee

# very simple class we can pass to greet_with_greeter
class Greeter(object):
  def __init__(self, greeting):
    self.greeting = greeting

  # while we're at it, here's a method that uses self.greeting...
  def greet(self, greetee):
    print self.greeting, greetee

# save an object of class Greeter for later
hello_greeter = Greeter("Hello")

# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")

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

Greeter.greet(hello_greeter, "World")

इसलिए मैंने प्रभावी रूप से एक कार्य में एक विधि बदल दी है। क्या मैं एक कार्य को एक विधि में बदल सकता हूं? खैर, चूंकि पाइथन आपको परिभाषित किए जाने के बाद कक्षाओं के साथ गड़बड़ करने देता है, आइए कोशिश करें:

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

हां, समारोह greet_with_greeter अब विधि greet2 रूप में भी जाना जाता है। यह एक विधि और फ़ंक्शन के बीच एकमात्र वास्तविक अंतर दिखाता है: जब आप ऑब्जेक्ट.माइट object.method(args) को कॉल करके किसी ऑब्जेक्ट को "चालू" करते हैं, तो भाषा जादुई रूप से इसे method(object, args)

(ओओ purists तर्क दे सकता है कि एक विधि एक समारोह से कुछ अलग है, और यदि आप उन्नत पायथन या रूबी - या स्मॉलटॉक में आते हैं! - आप उनके बिंदु को देखना शुरू कर देंगे। कुछ भाषाएं किसी वस्तु के बिट्स के लिए विशेष पहुंच प्रदान करती हैं। लेकिन मुख्य वैचारिक अंतर अभी भी छुपा अतिरिक्त पैरामीटर है।)


जावास्क्रिप्ट उदाहरणों का उपयोग कर विधि बनाम फ़ंक्शन के लिए कुछ स्पष्टीकरण यहां दिया गया है:

test(20, 50); फ़ंक्शन परिभाषित करता है और कुछ चरणों को चलाने के लिए उपयोग करता है या कुछ वापस लौटाता है जिसे कहीं भी संग्रहीत / उपयोग किया जा सकता है।

आप कोड का पुन: उपयोग कर सकते हैं: कोड को एक बार परिभाषित करें और इसे कई बार उपयोग करें।

अलग-अलग परिणामों का उत्पादन करने के लिए आप अलग-अलग तर्कों के साथ कई बार एक ही कोड का उपयोग कर सकते हैं।

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test = something.test(); यहां परीक्षण () कुछ ऑब्जेक्ट या कस्टम का एक तरीका हो सकता है जो इनबिल्ट ऑब्जेक्ट्स के प्रोटोटाइप को परिभाषित करता है, यहां अधिक स्पष्टीकरण है:

जावास्क्रिप्ट विधियां वे क्रियाएं होती हैं जिन्हें ऑब्जेक्ट्स पर किया जा सकता है।

एक जावास्क्रिप्ट विधि एक प्रॉपर्टी है जिसमें फ़ंक्शन परिभाषा होती है।

जावास्क्रिप्ट में तारों के लिए निर्मित संपत्ति / विधि:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

कस्टम उदाहरण:

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

उदाहरण के लिए आप स्ट्रिंग, ऐरे इत्यादि के गुणों को परिभाषित कर सकते हैं

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        console.log(char + " does not appear in " + this);
    } else {
        console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

var something = "ThisIsSomeString"

// now use distance like this, run and check console log

something.distance("m");

कुछ संदर्भ: जावास्क्रिप्ट ऑब्जेक्ट विधि , Functions , प्रोटोटाइप पर अधिक जानकारी


पहले ऑर्डर सन्निकटन के लिए, एक विधि (सी ++ शैली ओओ में) सदस्य फ़ंक्शन के लिए एक और शब्द है, यह एक ऐसा कार्य है जो कक्षा का हिस्सा है।

सी / सी ++ जैसी भाषाओं में आपके पास ऐसे कार्य हो सकते हैं जो कक्षा के सदस्य नहीं हैं; आप किसी फ़ंक्शन को किसी विधि से संबद्ध नहीं करते हैं।


फ़ंक्शन तर्क का एक सेट है जिसका उपयोग डेटा में हेरफेर करने के लिए किया जा सकता है। हालांकि, विधि फ़ंक्शन है जिसका उपयोग उस ऑब्जेक्ट के डेटा में हेरफेर करने के लिए किया जाता है जहां यह संबंधित है। तो तकनीकी रूप से, यदि आपके पास ऐसा कार्य है जो पूरी तरह से आपकी कक्षा से संबंधित नहीं है लेकिन कक्षा में घोषित किया गया था, तो यह कोई विधि नहीं है; इसे एक खराब डिजाइन कहा जाता है।


फ़ंक्शन मुख्य रूप से प्रक्रिया उन्मुख प्रोग्रामिंग से संबंधित अवधारणा है जहां एक फ़ंक्शन एक ऐसी इकाई है जो डेटा को संसाधित कर सकती है और आपको मूल्य लौटा सकती है

विधि ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की अवधारणा है जहां एक विधि एक वर्ग का सदस्य होता है जो ज्यादातर कक्षा के सदस्यों पर प्रसंस्करण करता है।


फ़ंक्शन या विधि कोड का नामित कॉल करने योग्य टुकड़ा है जो कुछ संचालन करता है और वैकल्पिक रूप से एक मान देता है।

सी भाषा में शब्द समारोह का उपयोग किया जाता है। जावा और सी # लोग इसे एक विधि कहेंगे (और इस मामले में एक कार्य कक्षा / वस्तु के भीतर परिभाषित किया गया है)।

एक सी ++ प्रोग्रामर इसे एक फ़ंक्शन या कभी-कभी विधि कह सकता है (यदि वे प्रक्रियात्मक शैली सी ++ कोड लिख रहे हैं या सी ++ के ऑब्जेक्ट उन्मुख तरीके से काम कर रहे हैं, तो एक सी / सी ++ केवल प्रोग्रामर ही इसे एक फ़ंक्शन कहलाएगा क्योंकि शब्द 'विधि' है सी / सी ++ साहित्य में अक्सर प्रयोग किया जाता है)।

आप बस इसके नाम को कॉल करके फ़ंक्शन का उपयोग करते हैं,

result = mySum(num1, num2);


आप अपनी ऑब्जेक्ट को पहले संदर्भित करके एक विधि कॉल करेंगे,

result = MyCalc.mySum(num1,num2);

मेरी समझ से एक विधि कोई भी ऑपरेशन है जिसे कक्षा में किया जा सकता है। यह एक सामान्य शब्द प्रोग्रामिंग में प्रयोग किया जाता है।

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

उदाहरण के लिए, मान लीजिए कि आप एक बिल्ली का वर्णन करना चाहते हैं और आप चाहते हैं कि वह चिल्ला सके। आप एक यॉट विधि के साथ एक बिल्ली वर्ग बनायेंगे, जो किसी भी वापसी मूल्य के बिना एक समारोह होगा।


मेरे लिए: एक विधि और एक समारोह का कार्य वही है यदि मैं सहमत हूं कि:

  • एक फ़ंक्शन एक मान वापस कर सकता है
  • पैरामीटर की उम्मीद कर सकते हैं

कोड के किसी भी हिस्से की तरह ही आपके पास ऑब्जेक्ट हो सकते हैं और आपके पास एक ऑब्जेक्ट हो सकता है जो परिणामस्वरूप आता है। ऐसा करने के दौरान वे किसी ऑब्जेक्ट की स्थिति बदल सकते हैं लेकिन इससे मेरे लिए बुनियादी कार्य नहीं बदलेगा।

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

new Employer().calculateSum( 8, 8 );

ऐसा करने से मैं नियोक्ता के लिए गणना करने के लिए ज़िम्मेदार होने पर भरोसा कर सकता हूं। यदि वह अधिक पैसा चाहता है तो मैं उसे मुक्त करता हूं और अप्रयुक्त कर्मचारियों को निपटाने के लिए कचरा कलेक्टर का कार्य बाकी करता हूं और एक नया कर्मचारी प्राप्त करता है।

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


यदि आप यहां पढ़ना पसंद करते हैं तो "ओओ विधियों के लिए मेरा परिचय"

ऑब्जेक्ट ओरिएंटेड प्रतिमान के पीछे विचार यह है कि सॉफ़्टवेयर "खतरे" से बना है .. अच्छी तरह से "ऑब्जेक्ट्स"। वास्तविक दुनिया में वस्तुओं में गुण होते हैं, उदाहरण के लिए यदि आपके पास कर्मचारी है, तो कर्मचारी का नाम, एक कर्मचारी आईडी, एक स्थिति है, वह एक विभाग आदि से संबंधित है।

ऑब्जेक्ट यह भी जानता है कि इसके गुणों से कैसे निपटें और उन पर कुछ संचालन करें। मान लें कि अगर हम जानना चाहते हैं कि कोई कर्मचारी अभी क्या कर रहा है तो हम उससे पूछेंगे।

employe whatAreYouDoing.

वह "whatAreYouDoing" ऑब्जेक्ट को भेजा गया एक "संदेश" है। ऑब्जेक्ट जानता है कि उन सवालों के जवाब कैसे दें, ऐसा कहा जाता है कि इस प्रश्न को हल करने के लिए "विधि" है।

इसलिए, वस्तुओं को अपने व्यवहार का पर्दाफाश करने के तरीके को विधियों कहा जाता है। इस तरह के तरीके आर्टिफैक्ट ऑब्जेक्ट को कुछ करना "करना" है।

अन्य संभव तरीके हैं

employee whatIsYourName
employee whatIsYourDepartmentsName

आदि।

दूसरी तरफ फ़ंक्शन एक प्रोग्रामिंग भाषा को कुछ डेटा की गणना करने के तरीके हैं, उदाहरण के लिए आपके पास फ़ंक्शन ऐडवैल्यूज़ (8, 8) हो सकता है जो 16 लौटाता है

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

चूंकि पहली लोकप्रिय प्रोग्रामिंग भाषाओं (जैसे फोर्ट्रान, सी, पास्कल) ने ओओ प्रतिमान को कवर नहीं किया है, इसलिए वे केवल इन कलाकृतियों को "कार्यों" कहते हैं।

उदाहरण के लिए सी में पिछले समारोह होगा:

int addValues( int x, int y ) 
{
   return x + y;
}

यह कहने के लिए "प्राकृतिक" नहीं है कि किसी ऑब्जेक्ट में कुछ कार्य करने के लिए "फ़ंक्शन" होता है, क्योंकि फ़ंक्शंस गणितीय सामान से अधिक संबंधित होते हैं जबकि कर्मचारी के पास थोड़ा गणित होता है, लेकिन आपके पास ऐसी विधियां हो सकती हैं जो फ़ंक्शंस के समान ही हों, उदाहरण के लिए जावा में यह बराबर addValues ​​फ़ंक्शन होगा।

public static int addValues( int x, int y ) {
    return x + y;
}

जाना पहचाना? ऐसा इसलिए है क्योंकि जावा पर इसकी जड़ें सी ++ और सी ++ पर हैं।

अंत में केवल एक अवधारणा है, कार्यान्वयन में वे समान दिख सकते हैं, लेकिन ओओ दस्तावेज में इन्हें विधि कहा जाता है।

जावा में पहले कर्मचारी ऑब्जेक्ट का उदाहरण यहां दिया गया है।

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

फिर अंतर, "डोमेन" पर है जहां इसे लागू किया जाता है।

ऐप्पलस्क्रिप्ट में "प्राकृतिक भाषा" मैफोर का विचार है, कि किसी बिंदु पर ओओ था। उदाहरण के लिए स्मॉलटॉक। मुझे उम्मीद है कि इसे पढ़ने के बाद वस्तुओं में विधियों को समझना आपके लिए उचित हो सकता है।

नोट: कोड को संकलित नहीं किया जाना चाहिए, बस उदाहरण के रूप में कार्य करने के लिए। पोस्ट को संशोधित करने और पायथन उदाहरण जोड़ने के लिए स्वतंत्र महसूस करें।


याद रखने का सरल तरीका:

  • एफ एकीकरण → एफ री (नि: शुल्क साधन किसी वस्तु या वर्ग से संबंधित नहीं है)
  • एम विधि → एम एम्बर (किसी ऑब्जेक्ट या क्लास का सदस्य)

सी ++ में, कभी-कभी, किसी वर्ग के सदस्य फ़ंक्शन की धारणा को दर्शाने के लिए विधि का उपयोग किया जाता है। हालांकि, हाल ही में मुझे पुस्तक 586 "व्युत्पन्न कक्षाओं" पर पुस्तक «द सी ++ प्रोग्रामिंग भाषा चौथा संस्करण» में एक बयान मिला है।

कभी-कभी एक वर्चुअल फ़ंक्शन को विधि कहा जाता है।

यह थोड़ा उलझन में है, लेकिन उसने कभी-कभी कहा, इसलिए यह लगभग समझ में आता है, सी ++ निर्माता विधियों को देखता है क्योंकि वस्तुओं पर कार्यों को बुलाया जा सकता है और पॉलिमॉर्फिक व्यवहार कर सकता है।


'विधि' 'फ़ंक्शन' के लिए ऑब्जेक्ट उन्मुख शब्द है। यह सब कुछ है (यानी, कोई वास्तविक अंतर नहीं)।

दुर्भाग्यवश, मुझे लगता है कि यहां बहुत से उत्तरों इस विचार को कायम रख रहे हैं या आगे बढ़ रहे हैं कि कुछ जटिल, सार्थक अंतर है।

वास्तव में - इसके लिए इतना कुछ नहीं है, एक ही चीज़ के लिए सिर्फ अलग शब्द।

[देर से जोड़ा]

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





terminology