oop - programming - ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ऑफ़र करता है:

  1. Encapsulation, करने के लिए
    • आंतरिक राज्य के उत्परिवर्तन पर नियंत्रण
    • आंतरिक प्रतिनिधित्व के लिए युग्मन सीमित करें
  2. सबटाइपिंग, अनुमति:
    • संगत प्रकारों का प्रतिस्थापन (बहुरूपता)
    • कक्षाओं (कार्यान्वयन विरासत) के बीच कार्यान्वयन साझा करने का एक कच्चा माध्यम

हास्केल में या यहां तक ​​कि स्कैला में कार्यात्मक प्रोग्रामिंग, प्रकार कक्षाओं के अधिक सामान्य तंत्र के माध्यम से प्रतिस्थापन की अनुमति दे सकता है। उत्परिवर्तनीय आंतरिक राज्य या तो निराश या प्रतिबंधित है। आंतरिक प्रतिनिधित्व के encapsulation भी हासिल किया जा सकता है। अच्छी तुलना के लिए हास्केल बनाम ओओपी देखें।

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

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





paradigms