oop programming कार्यात्मक प्रोग्रामिंग बनाम ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग




ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा (4)

मैं मुख्य रूप से अब तक ओओ प्रोग्रामिंग के संपर्क में हूं और एक कार्यात्मक भाषा सीखने की उम्मीद कर रहा हूं। मेरे प्रश्न हैं:

  • ऑब्जेक्ट उन्मुख पर आप कार्यात्मक प्रोग्रामिंग कब चुनते हैं?
  • सामान्य समस्या परिभाषाएं क्या हैं जहां कार्यात्मक प्रोग्रामिंग बेहतर विकल्प है?

  1. यदि आप एक भारी समवर्ती वातावरण में हैं, तो शुद्ध कार्यात्मक प्रोग्रामिंग उपयोगी है। उत्परिवर्तनीय राज्य की कमी लगभग तुच्छ समेकन बनाती है। Erlang देखें।

  2. मल्टीपाडाडिग्म भाषा में, आप कुछ चीजों को कार्यात्मक रूप से मॉडल करना चाह सकते हैं यदि उत्परिवर्तनीय स्थिति का अस्तित्व कार्यान्वयन विवरण होना चाहिए, और इस प्रकार एफपी समस्या डोमेन के लिए एक अच्छा मॉडल है। उदाहरण के लिए, डी प्रोग्रामिंग भाषा में पायथन या std.range में सूची std.range । ये कार्यात्मक प्रोग्रामिंग से प्रेरित हैं।


ऑब्जेक्ट उन्मुख पर आप कार्यात्मक प्रोग्रामिंग कब चुनते हैं?

जब आप एक अलग तरह के सॉफ्टवेयर विकास की उम्मीद करते हैं:

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

  • कार्यात्मक भाषाएं अच्छी होती हैं जब आपके पास निश्चित चीजों का सेट होता है , और जैसे ही आपका कोड विकसित होता है, आप मुख्य रूप से मौजूदा चीज़ों पर नए ऑपरेशन जोड़ते हैं। यह नए कार्यों को जोड़कर पूरा किया जा सकता है जो मौजूदा डेटा प्रकारों के साथ गणना करते हैं, और मौजूदा कार्यों को अकेला छोड़ दिया जाता है।

जब विकास गलत तरीके से जाता है, तो आपको समस्याएं होती हैं:

  • एक ऑब्जेक्ट उन्मुख प्रोग्राम में एक नया ऑपरेशन जोड़ने के लिए एक नई विधि जोड़ने के लिए कई कक्षा परिभाषाओं को संपादित करने की आवश्यकता हो सकती है।

  • एक कार्यात्मक कार्यक्रम में एक नई तरह की चीज जोड़ने के लिए एक नया मामला जोड़ने के लिए कई फ़ंक्शन परिभाषाओं को संपादित करने की आवश्यकता हो सकती है।

यह समस्या कई सालों से अच्छी तरह से जानी जाती है; 1 99 8 में, फिल वाडलर ने इसे "अभिव्यक्ति समस्या" कहा । हालांकि कुछ शोधकर्ताओं का मानना ​​है कि अभिव्यक्ति की समस्या को इस तरह की भाषा सुविधाओं के साथ मिश्रित के रूप में संबोधित किया जा सकता है, एक व्यापक स्वीकार्य समाधान ने अभी तक मुख्यधारा को हिट नहीं किया है।

सामान्य समस्या परिभाषाएं क्या हैं जहां कार्यात्मक प्रोग्रामिंग बेहतर विकल्प है?

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


आपको जरूरी नहीं है कि वे दो प्रतिमानों के बीच चयन करें। आप कई कार्यात्मक अवधारणाओं का उपयोग कर ओओ आर्किटेक्चर के साथ सॉफ्टवेयर लिख सकते हैं। एफपी और ओओपी प्रकृति में ऑर्थोगोनल हैं

उदाहरण के लिए सी # ले लो। आप कह सकते हैं कि यह ज्यादातर ओओपी है, लेकिन कई एफपी अवधारणाएं और संरचनाएं हैं। यदि आप लिंक पर विचार करते हैं, तो सबसे महत्वपूर्ण संरचनाएं जो लिंक को मौजूद होने की अनुमति देती हैं वे प्रकृति में कार्यात्मक हैं: लैम्ब्डा अभिव्यक्तियां

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

कई आधुनिक भाषाएं बहु-प्रतिमान हैं।

अनुशंसित रीडिंग्स

जैसा कि मैं एक ही नाव में हूं (ओओपी पृष्ठभूमि, एफपी सीखना), मैं आपको कुछ रीडिंग्स का सुझाव दूंगा जो मैंने वास्तव में सराहना की है:


ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (ओओपी) "ऑब्जेक्ट्स" की अवधारणा के आधार पर एक प्रोग्रामिंग प्रतिमान है, जो डेटा संरचनाएं हैं जिनमें फ़ील्ड के रूप में डेटा होता है, जिन्हें अक्सर गुण के रूप में जाना जाता है; और कोड, प्रक्रियाओं के रूप में, अक्सर विधियों के रूप में जाना जाता है।

कार्यात्मक प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है, जो कि संरचनाओं और कंप्यूटर प्रोग्राम के तत्वों का निर्माण करने की शैली है, जो गणितीय कार्यों के मूल्यांकन के रूप में गणना का व्यवहार करती है और बदलते-राज्य और परिवर्तनीय डेटा से बचाती है।

ओओपी का कहना है कि एक ही स्थान पर डेटा और उसके व्यवहार को एक साथ लाने से यह समझना आसान हो जाता है कि कोई प्रोग्राम कैसे काम करता है। एफपी का कहना है कि डेटा और व्यवहार अलग-अलग चीजें हैं और स्पष्टता के लिए अलग रखा जाना चाहिए।

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





paradigms