... और शायद उन लेखों में से एक है जो ओओपी पर आधारित थे।
वास्तव में नहीं, लेकिन इसने चर्चा को जोड़ा, विशेष रूप से चिकित्सकों को, जो उस समय, कागज में वर्णित पहले मानदंडों का उपयोग करते हुए सिस्टम को विघटित करने के लिए प्रशिक्षित थे।
पहले मैं जानना चाहता हूं कि क्या मेरा आकलन सही है। क्या एफपी प्रतिमान और यह लेख दार्शनिक रूप से असहमत है?
इसके अलावा, मेरी नजर में, एफपी कार्यक्रम जैसा दिखता है, आपका वर्णन प्रक्रियाओं या कार्यों का उपयोग करने वाले किसी भी अन्य से अलग नहीं है:
डेटा फंक्शन से फंक्शन में पास हो जाता है, प्रत्येक फंक्शन डेटा के बारे में पूरी तरह से अवगत होता है और रास्ते में "इसे बदल रहा है"।
... "अंतरंगता" भाग को छोड़कर , चूंकि आप कर सकते हैं (और अक्सर करते हैं) अमूर्त डेटा पर कार्य करते हैं, ठीक अंतरंगता से बचने के लिए। इस प्रकार, आपके पास उस "अंतरंगता" पर कुछ नियंत्रण होता है और आप जिसे छुपाना चाहते हैं उसके लिए रिक्त स्थान (यानी फ़ंक्शंस) सेट करके आप इसे पसंद कर सकते हैं।
इसलिए, मुझे कोई कारण नहीं दिखाई देता है कि हम कार्यात्मक प्रोग्रामिंग का उपयोग करते हुए सूचना के पारनस मानदंड का पालन करने में सक्षम नहीं होंगे और एक केडब्ल्यूआईसी इंडेक्स के कार्यान्वयन के साथ ही उसके दूसरे कार्यान्वयन के रूप में इसी तरह के लाभ के साथ अंत होगा।
मान लें कि वे सहमत हैं, मैं जानना चाहूंगा कि डेटा छिपाने का FPs कार्यान्वयन क्या है। OOP में यह देखना स्पष्ट है। आपके पास एक निजी क्षेत्र हो सकता है जो वर्ग के बाहर कोई भी नहीं पहुंच सकता है। एफपी में मेरे लिए इसका कोई स्पष्ट सादृश्य नहीं है।
जहाँ तक डेटा चिंता का विषय है, आप FP का उपयोग करके डेटा सार और डेटा प्रकार सार को विस्तृत कर सकते हैं। इनमें से कोई भी ठोस संरचनाओं को छुपाता है और इन ठोस संरचनाओं के जोड़-तोड़ को अमूर्त के रूप में कार्य करता है।
संपादित करें
यहां यह कहते हुए कि "डेटा छुपाना" एफपी के संदर्भ में बहुत उपयोगी है (या OOP-ish (?)) बताते हुए यहां जोर की संख्या बढ़ रही है। इसलिए, मुझे SICP से एक बहुत ही सरल और स्पष्ट उदाहरण पर मुहर लगाने दें:
मान लीजिए कि आपके सिस्टम को तर्कसंगत संख्याओं के साथ काम करने की आवश्यकता है। एक तरीका जिसे आप उनका प्रतिनिधित्व करना चाहते हैं वह एक जोड़ी या दो पूर्णांकों की सूची के रूप में है: अंश और हर। इस प्रकार:
(define my-rat (cons 1 2)) ; here is my 1/2
यदि आप डेटा अमूर्तता को अनदेखा करते हैं, तो सबसे अधिक संभावना है कि आप अंश और हर का उपयोग करके प्राप्त करेंगे car
और cdr
:
(... (car my-rat)) ; do something with the numerator
इस दृष्टिकोण के बाद, तर्कसंगत संख्याओं में हेरफेर करने वाले सिस्टम के सभी हिस्सों को पता चल जाएगा कि एक तर्कसंगत संख्या एक है cons
- वे cons
तर्कसंगत बनाने के लिए और सूची ऑपरेटरों का उपयोग करके उन्हें निकालने के लिए संख्या होगी ।
एक समस्या जिसका आपको सामना करना पड़ सकता है, जब आपको तर्कसंगत संख्याओं के कम रूप की आवश्यकता होती है - पूरे सिस्टम में परिवर्तन की आवश्यकता होगी। यदि आप सृजन के समय को कम करने का निर्णय लेते हैं, तो आप बाद में यह पा सकते हैं कि तर्कसंगत शब्दों में से किसी एक का उपयोग करते समय कम करना बेहतर है, एक और पूर्ण पैमाने पर बदलाव ला सकता है।
एक अन्य समस्या यह है कि, यदि काल्पनिक रूप से, उनके लिए एक वैकल्पिक प्रतिनिधित्व पसंद किया जाता है और आप cons
प्रतिनिधित्व को छोड़ने का फैसला करते हैं - फिर से पूर्ण पैमाने पर परिवर्तन।
इन स्थितियों से निपटने में किसी भी तरह का प्रयास संभवतः इंटरफेस के पीछे तर्क का प्रतिनिधित्व छिपाने के लिए शुरू होगा। अंत में, आप कुछ इस तरह से समाप्त कर सकते हैं:
(make-rat <n> <d>)
वह परिमेय संख्या लौटाता है जिसका अंश पूर्णांक है <n>
और जिसका भाजक पूर्णांक है <d>
।
(numer <x>)
परिमेय संख्या के अंश को लौटाता है <x>
।
(denom <x>)
परिमेय संख्या के हर को लौटाता है <x>
।
और सिस्टम अब नहीं जानता (और अब नहीं होना चाहिए) कि क्या तर्कसंगत बनाये जाते हैं। इसका कारण यह है cons
, car
और cdr
तर्कसंगत के लिए आंतरिक नहीं हैं, लेकिन make-rat
, numer
और denom
हैं । बेशक, यह आसानी से एक एफपी प्रणाली हो सकती है। तो, "डेटा छिपाना" (इस मामले में, बेहतर डेटा अमूर्त के रूप में जाना जाता है, या अभ्यावेदन और ठोस संरचनाओं को घेरने का प्रयास) एक प्रासंगिक अवधारणा और व्यापक रूप से इस्तेमाल की जाने वाली तकनीक के रूप में आता है, चाहे वह ओओ, कार्यात्मक उपकरणों के संदर्भ में हो। जो कुछ।
और बिंदु यह है ... हालांकि कोई भी "किस तरह का छिपाना" या इनकैप्सुलेशन के बीच अंतर करने की कोशिश कर सकता है (वे एक डिजाइन निर्णय, या डेटा संरचनाओं या एल्गोरिदम को छिपा रहे हैं - प्रक्रियात्मक अमूर्तता के मामले में) उन सभी के पास एक ही विषय है: वे एक या एक से अधिक बिंदुओं से प्रेरित हैं जो पारनस ने स्पष्ट किए हैं। अर्थात्:
- परिवर्तनशीलता: क्या आवश्यक परिवर्तन स्थानीय स्तर पर किए जा सकते हैं या सिस्टम के माध्यम से फैले हुए हैं।
- स्वतंत्र विकास: किस प्रणाली में दो भागों को समानांतर में विकसित किया जा सकता है।
- व्यापकता: इसके एक हिस्से को समझने के लिए सिस्टम की कितनी आवश्यकता है।
उपरोक्त उदाहरण SICP पुस्तक से लिया गया था, इसलिए पुस्तक में इस अवधारणाओं की पूरी चर्चा और प्रस्तुति के लिए, मैं अध्याय 2 की जाँच करने की अत्यधिक सलाह देता हूँ । मैं एफपी के संदर्भ में सार डेटा प्रकारों से परिचित होने की भी सिफारिश करता हूं, जो अन्य मुद्दों को तालिका में लाता है।