FP और OO ऑर्थोगोनल?


13

मैंने इस समय को बार-बार सुना है और मैं इस विचार को समझने और मान्य करने की कोशिश कर रहा हूं कि एफपी और ओओ ओर्थोगोनल हैं।

सबसे पहले, 2 अवधारणाओं के लिए रूढ़िवादी होने का क्या मतलब है?

एफपी यथासंभव अपरिवर्तनीयता और शुद्धता को प्रोत्साहित करता है। और OO कुछ ऐसा लगता है जो राज्य और उत्परिवर्तन (अनिवार्य प्रोग्रामिंग का थोड़ा संगठित संस्करण?) के लिए बनाया गया है। और मुझे एहसास है कि वस्तुएं अपरिवर्तनीय हो सकती हैं। लेकिन OO मेरे लिए राज्य / परिवर्तन का अर्थ लगता है।

वे विपरीत दिखते हैं। क्या इसका मतलब है कि वे ऑर्थोगोनल हैं?

स्काला जैसी भाषा ओओ और एफपी दोनों को करना आसान बनाती है, क्या इससे 2 विधियों की रूढ़िवादिता प्रभावित होती है?


5
ऑब्जेक्ट-ओरिएंटेशन के लिए वस्तुओं को अपने राज्य में हेरफेर करने की आवश्यकता नहीं होती है। परिणाम के रूप में तरीके नई वस्तुओं को वापस कर सकते हैं। तथ्य यह है कि एक कर सकते हैं, और अक्सर करता है, एक वस्तु की स्थिति को संशोधित करने का मतलब यह नहीं है कि उनके पास यह है या यह एक अच्छा विचार है। OO और FP विपरीत नहीं हैं।
बृहस्पतिवार

4
स्टैकओवरफ्लो पर डुप्लिकेट: एफपी और ओओ ओथोगोनल?
17

जवाबों:


22

शब्द "ऑर्थोगोनल" गणित से आता है, जहां इसका एक पर्याय है: "लंबवत"। इस संदर्भ में, आप इसे समझ सकते हैं कि "दोनों चीजों का एक-दूसरे से कोई लेना-देना नहीं है।"

जब लोग FP और OO की तुलना करते हैं तो वे अक्सर दो अलग-अलग अक्षों को भ्रमित करते हैं।

एक ओर आपके पास कार्यात्मक प्रोग्रामिंग बनाम अनिवार्य प्रोग्रामिंग है। जोनास दोनों की अच्छी तुलना करता है। एक-वाक्य संस्करण कहता है कि "डेटा प्रवाह बनाम नियंत्रण प्रवाह"।

अन्य अक्ष डेटा अमूर्तता है। हास्केल जैसी भाषाएँ सार डेटा प्रकारों का उपयोग करती हैं, अच्छी तरह से, सार डेटा। स्मॉलटाक ऑब्जेक्ट का उपयोग करता है, जो उस डेटा पर डेटा और संचालन को एक इकाई में फ्यूज करता है। विलियम कुक ने अपने पेपर ऑन अंडरस्टैंडिंग डेटा एब्सट्रैक्शन, रिविसिटेड से बेहतर समझा

यह पूरी तरह से समझ में आता है कि ज्यादातर लोग यह सोचकर समाप्त होते हैं कि एफपी और ओओ विपरीत हैं: अधिकांश ओओ भाषाएं अत्यावश्यक हैं, इसलिए यदि आप हास्केल और जावा की तुलना करते हैं, तो आपके पास डेटा प्रवाह + एडीटी बनाम नियंत्रण प्रवाह + ऑब्जेक्ट है। लेकिन अन्य संभावनाएं हैं! मैथियस फेलिसन बताते हैं कि एफपी और ओओ को अपनी बात कार्यात्मक वस्तुओं में खुशी से कैसे शादी करना है ।


+1, बढ़िया जवाब। आपका जवाब हालांकि हास्केल टाइपकास्ट पर याद करता है।
लापताफैक्टर

पक्का। मैं केवल गया है सिर्फ वास्तव में हास्केल सीखने शुरू कर दिया।
फ्रैंक शीयर

मुझे आश्चर्य है कि अगर उस फंक्शनल ऑब्जेक्ट्स प्रस्तुति की कोई रिकॉर्डिंग है ... मुझे वास्तव में दिलचस्पी है, लेकिन अकेले स्लाइड्स वास्तव में न्याय नहीं करते हैं।
री मियासाका

9

सबसे पहले, 2 अवधारणाओं के लिए रूढ़िवादी होने का क्या मतलब है?

इसका अर्थ है कि दो अवधारणाओं में विपरीत विचार नहीं हैं या एक दूसरे के साथ असंगत नहीं हैं।

एफपी यथासंभव अपरिवर्तनीयता और शुद्धता को प्रोत्साहित करता है। और OO कुछ ऐसा लगता है जो राज्य और उत्परिवर्तन (अनिवार्य प्रोग्रामिंग का थोड़ा संगठित संस्करण?) के लिए बनाया गया है। और मुझे एहसास है कि वस्तुएं अपरिवर्तनीय हो सकती हैं। लेकिन OO मेरे लिए राज्य / परिवर्तन का अर्थ लगता है।

वे विपरीत दिखते हैं। यह उनकी ऑर्थोगोनलिटी को कैसे प्रभावित करता है?

स्काला जैसी भाषा ओओ और एफपी दोनों को करना आसान बनाती है, क्या इससे 2 विधियों की रूढ़िवादिता प्रभावित होती है?

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

गूगल पर अपने स्काला एक्सपेरिमेंट वार्ता में, मार्टिन ओडस्की ने यह अच्छी तरह से बताया कि वह दो अवधारणाओं को कैसे मानते हैं - OO और FP - एक-दूसरे के लिए रूढ़िवादी हैं और कैसे स्काला ने दो प्रतिमानों को सुरुचिपूर्ण ढंग से और निर्बाध रूप से एक नए प्रतिमान में प्रचलित किया, जिसे स्काला समुदाय में लोकप्रिय रूप से जाना जाता है। वस्तु-कार्यात्मक प्रतिमान। आपके लिए बात करते देखना चाहिए। :-)


ऑब्जेक्ट-फंक्शनल भाषाओं के अन्य उदाहरण: ओमेक्एल , एफ # , नेमेर्ले


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

@ समय: यह मेरा [शायद विफल] कार्यकाल को परिभाषित करने का प्रयास था। मैं कोई अंग्रेजी गुरु नहीं हूं जो आप देख रहे हैं। : - |
लापताफैक्टर

7

ऑर्थोगोनल मोटे तौर पर "स्वतंत्र" का अर्थ है।

इसलिए यदि FP और OO ऑर्थोगोनल हैं, तो इसका मतलब है कि आप अपरिवर्तनीयता का उपयोग कर सकते हैं चाहे आप वस्तुओं का उपयोग करें या नहीं, और आप वस्तुओं का उपयोग कर सकते हैं कि वे अपरिवर्तनीय हैं या नहीं।


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

@TimGoodman: मुझे वास्तव में आपके द्वारा बनाए गए ग्राफ उपमा पर x, y अक्ष पसंद है। क्या यह अंतिम परिणाम प्राप्त करने के लिए मैप किया जा सकता है जब एक दिशा में एक कदम दूसरे बनाम (मेरा मतलब है कि दोनों प्रोग्रामिंग प्रतिमान लक्ष्य को आसान और बनाए रखने योग्य कोड है, है न?)
rahulaga_dev

0

* मैंने इस समय को बार-बार सुना है और मैं इस विचार को समझने और मान्य करने की कोशिश कर रहा हूं कि एफपी और ओओ ऑर्थोगोनल हैं। *

सबसे पहले, 2 अवधारणाओं के लिए रूढ़िवादी होने का क्या मतलब है?

विकिपीडिया उद्धरण: "ऑर्थोगोनलिटी गारंटी देता है कि सिस्टम के एक घटक द्वारा उत्पादित तकनीकी प्रभाव को संशोधित करना न तो सिस्टम के अन्य घटकों के लिए साइड इफेक्ट्स बनाता है और न ही प्रचारित करता है।"

बस, इसका मतलब यह है कि एक प्रणाली में परिवर्तन नहीं होता है, और दूसरी प्रणाली में परिवर्तन को प्रभावित नहीं कर सकता है।

उदाहरण के लिए, एक कार में ऑर्थोगोनल घटक और नियंत्रण होते हैं (जैसे वाहन को तेज करना कुछ और प्रभावित नहीं करता है लेकिन विशेष रूप से त्वरण फ़ंक्शन के साथ शामिल घटक हैं। यह उदाहरण के लिए रेडियो को प्रभावित नहीं करता है (हालांकि मुझे यकीन नहीं है कि यह सीडी के खेल को प्रभावित करता है) चूंकि खान कभी-कभी छोड़ देता है))।

एफपी यथासंभव अपरिवर्तनीयता और शुद्धता को प्रोत्साहित करता है। और OO कुछ ऐसा लगता है जो राज्य और उत्परिवर्तन (अनिवार्य प्रोग्रामिंग का थोड़ा संगठित संस्करण?) के लिए बनाया गया है। और मुझे एहसास है कि वस्तुएं अपरिवर्तनीय हो सकती हैं। लेकिन OO मेरे लिए राज्य / परिवर्तन का अर्थ लगता है।

वे विपरीत दिखते हैं। क्या इसका मतलब है कि वे ऑर्थोगोनल हैं?

किंडा। समस्या यह है कि इन अवधारणाओं में से कोई भी वास्तव में रॉक हार्ड परिभाषित नहीं है। लेकिन हां, आपको इसका फायदा मिल गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.