2011-04-28 9 views
6

क्या यह कार्यात्मक शैली में ऑब्जेक्ट मॉडल को लागू करने के लिए व्यावहारिक है?ऑब्जेक्ट मॉडल?

ओओपी एक समस्या है जो ऑब्जेक्ट मॉडल का वर्णन कर रही है।

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

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

यदि आप एमवीवीएम के माध्यम से मॉडल पेश कर रहे हैं तो कहानी का यूआई पक्ष थोड़ा सा हो सकता है, लेकिन आप अभी भी आंतरिक रूप से राज्य के साथ लगातार कुश्ती कर रहे हैं।

मैं इस परियोजना के लिए एफ # में काम कर रहा हूं, इसलिए मैं आसानी से ओओपी का सहारा ले सकता हूं, लेकिन मुझे उत्सुकता है कि यह अव्यवहारिक होने से पहले इसे कितनी दूर धक्का दे सकता है। क्या डिजाइन पैटर्न या कुछ भी हो सकता है?

+0

ओकैमल, एफ #, सीएलओएस, क्लोजर, हास्केल, और स्कैला - साथ ही अन्य ऑब्जेक्ट उन्मुख मुहावरे Erlang जैसे अन्य भाषाओं में ...हाँ, मैं कहूंगा कि यह उनके लिए बहुत अच्छा काम करता है। ओओपी को राज्य में हेरफेर करने की ज़रूरत नहीं है, यह मुख्य रूप से (मेरे दिमाग में) संगठन और डीआरवाई के लिए है। –

+0

मैंने इसे लेस्काह के साथ किया है, और मैंने कोड को देखा लेकिन दुर्भाग्य से यह अभी मेरे बाहर है। मुझे वास्तव में यह महसूस नहीं होता है कि आप DRY को छोड़ दिए बिना, कठिन-से-बनाए रखने वाले कोड के साथ समाप्त हो सकते हैं और/या तृतीय-पक्ष प्लगइन/स्क्रिप्ट लेखकों को पागल कर सकते हैं। –

+4

एफओ में ओओ की तुलना में कार्यात्मक भाषाओं में डीआरवाई आसान है क्योंकि पैरामीटर लेने वाले फ़ंक्शन में किसी भी दोहराए गए कोड को दोबारा दोहराया जाना मुश्किल है। ओओ (या बल्कि प्रक्रिया प्रोग्रामिंग) में बार-बार कोड प्रीम्बल और पोस्टम्बल है जो बीच में थोड़ा सा होता है, अलग-अलग आप बेस क्लास या इंटरफेस के बारे में सोचना शुरू कर देते हैं, एफपी में आप बीच में थोड़ा सा नहीं बनते एक पैरामीटर के रूप में एक समारोह। टॉमस की पुस्तक में इस के महान उदाहरण हैं: http://www.manning.com/petricek/ – Robert

उत्तर

5

यह एक "दार्शनिक" उत्तर देने के लिए थोड़ा सा दार्शनिक है लेकिन ठीक है, मैं काट दूंगा।

मेरी राय में समस्या आती है क्योंकि आप एफपी और ओओ को जुटापोज़ मानते हैं, वे नहीं हैं। एफपी और अनिवार्य प्रोग्रामिंग जुड़ा हुआ है, यानी बयानों का उपयोग कर बनाम अभिव्यक्तियों का उपयोग करना।

समस्या का एक हिस्सा यह है कि ओओ की स्पष्ट परिभाषा की कमी है, वैसे भी मेरी राय में। इसका समर्थन करने के लिए मैं एलन के को इंगित करता हूं, जिन्होंने कहा, "असल में मैंने" वस्तु-उन्मुख "शब्द बनाया है, और मैं आपको बता सकता हूं कि मेरे पास सी ++ दिमाग में नहीं है।", फिर भी अधिकांश भाषा जिसे हम ओओ यानी जावा/सी # छोटे से छोटे से सी ++ के बाद अधिक ले लो।

क्या ओओ सी ++/जावा/सी # शैली हमें मॉडल में हमारे कोड को व्यवस्थित करने का एक अच्छा तरीका प्रदान करती है, डेटा बनाने में उन्हें गुण जोड़ते हैं आदि। इनमें से कोई भी व्यावहारिक रूप से गैर-कार्यात्मक नहीं है और कार्यात्मक के साथ अच्छा उपयोग किया जा सकता है प्रोग्रामिंग।

जैसा कि आप बहुत सी सी ++/जावा/सी # को इंगित करते हैं, लेकिन उन्हें यह नहीं होना चाहिए कि जावा और सी # दोनों में मूलभूत प्रकार हैं जैसे कि उनके स्ट्रिंग क्लासेस अपरिवर्तनीय हैं। यह सच जावा और सी # अपरिवर्तनीय वर्ग बनाने में आसान नहीं है लेकिन थोड़ा सा प्रयास करके आप इसे कर सकते हैं।

जो हमें अपरिवर्तनीय विनियमित कहां लाता है? मेरे डिज़ाइन में आम तौर पर सबकुछ अपरिवर्तनीय बनाकर शुरू होता है, क्योंकि इससे चीज़ें आसान हो जाती हैं, और यदि मैं इसे प्रदर्शन समस्याओं का कारण बनता हूं तो मैं महत्वपूर्ण पथों पर कुछ परिवर्तनशीलता जोड़ना शुरू करता हूं। एक जगह अपरिवर्तनीयता कभी भी काम नहीं करेगी जीयूआई नियंत्रण है, जिसमें आम तौर पर अपरिवर्तनीय होने के लिए बहुत अधिक राज्य होता है। ऐसा कहा जाता है कि आप एक अपरिवर्तनीय "संयोजक" दृष्टिकोण का उपयोग करके जीयूआई का निर्माण करने में काफी लंबा रास्ता प्राप्त कर सकते हैं, फिर इसे परिवर्तनीय गुई नियंत्रणों द्वारा व्याख्या किया जाता है। यह वेबशेपर लड़का क्या करता है: http://www.intellifactory.com/products/wsp/Home.aspx

एफपी/ओओ बहस के लिए एक और महान संसाधन मस्तिष्क का "कार्यात्मक प्रोग्रामिंग आपके कोड की संरचना को कैसे प्रभावित करता है?" (जिसने एफपी/ओओ के बारे में मेरी सोच को बहुत प्रभावित किया): http://lorgonblog.wordpress.com/2008/09/22/how-does-functional-programming-affect-the-structure-of-your-code/

+0

धन्यवाद, संयोजक दृष्टिकोण जो मैं खोज रहा हूं वह हो सकता है। ओओपी के दूसरे छोर पर मैंने एफपी डालने का कारण यह है क्योंकि राफे ने बताया कि ओओपी कई संगठनात्मक विशेषताओं की पेशकश करता है जो एफपी (मेरे लिए, वैसे भी - मैं पूछता हूं) में सीधा नहीं है। साथ ही, जब मैं लेखकों को प्लगइन करने के लिए ऑब्जेक्ट मॉडल का पर्दाफाश करता हूं, तो मैं यह सुनिश्चित करना चाहता हूं कि उपभोक्ता मॉडल को अमान्य स्थिति में नहीं रखे - जो मुझे यकीन नहीं है कि गैर-ओओ शैलियों में सुनिश्चित करना आसान है, जिसमें एफपी । मैंने अतीत में ब्रायन की पोस्ट भी पढ़ी है, लेकिन कारण मैं फिर से पूछता हूं क्योंकि ब्रायन अभी भी ओओ को "बड़े पैमाने पर प्रोत्साहित कर रहा है"। –

+0

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

+0

हम्म अच्छी तरह से मैंने कभी बहस करने का इरादा नहीं किया, लेकिन हाँ - उदाहरण के लिए, मैं अपरिवर्तनीय वस्तुओं के लिए बाध्यकारी डेटा करने का एक स्पष्ट तरीका नहीं सोच सकता। –