क्या कार्यात्मक अपघटन वास्तव में एक एंटीपैटर्न है?


9

जब मैं पढ़ रहा था कि आपके द्वारा सबसे खराब विरोधी पैटर्न , मैं इस पोस्ट के लिंक पर क्लिक करके एंटी-पैटर्न के बारे में वेब साइट पर उतर गया।

और http://sourcemaking.com/antipatterns/functional-decomposition पेज मुझे आश्चर्यचकित कर गया।

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

और यह एक सवाल है, क्या मैं OOP + कार्यात्मक शैली से चिपके हुए गलत कर रहा हूं, या यह उद्योग में आम है और वास्तव में यह उतना बुरा नहीं है।

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

इसलिए, भले ही मैंने इन विषयों के बारे में अपने सहकर्मी के साथ चर्चा की, मैं इस निष्कर्ष पर पहुंचा कि कोई भी तरीका वास्तव में सही नहीं है। और मेरे पास अभी भी अनुत्तरित प्रश्न है।

OOP समस्या को भी उसी थ्रेड में किसी अन्य पोस्ट के लिंक द्वारा प्रबलित किया गया था । लिंक जावा शैली OOP http://chaosinmotion.com/blog/?p=622 पर दिखता है

तो OOP के साथ कार्यात्मक प्रोग्रामिंग को मिलाने के लिए सामान्य रवैया क्या है? और क्या संतुलन एक डेवलपर को प्राप्त करने का प्रयास करना चाहिए?


1
आपका शीर्षक और प्रश्न निकाय कई संबंधित प्रश्न पूछ रहा है, लेकिन पूरी तरह से अलग प्रश्न हैं, जिनमें से कुछ ध्वनि-संबंधी हैं। मुझे यह पता लगाने में कठिनाई हो रही है कि आप यहाँ क्या पूछ रहे हैं।
ब्लूबेरीफिल्ड

क्षमा करें, मैं एक देशी वक्ता नहीं हूं, और मैं एक बेहतर शीर्षक के बारे में सोचकर कठिन समय बिता रहा हूं। सुधारों का स्वागत है।
कोडर

1
प्रश्न स्पष्ट है। ब्लूबेरी फ़ील्ड्स को न सुनें।
जोजो

5
जाहिर है, OOP के लिए OOP की पहुंच से परे कुछ भी "एंटीपैटर्न" है। वास्तव में, सबसे खराब संभव एंटीपैटर्न ओओपी का एक भारी उपयोग है।
एसके-लॉजिक

जवाबों:


8

सबसे पहले, कार्यात्मक प्रोग्रामिंग वर्तमान में सभी शांत बच्चे क्या कर रहे हैं। एंटी-पैटर्न वास्तव में प्रक्रियात्मक प्रोग्रामिंग के बारे में बात कर रहा था (यह स्पष्ट होगा कि तकनीक को "प्रक्रियात्मक अपघटन" कहा जाता है लेकिन यह नहीं है), और मुझे लगता है कि आप भी थे।

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

व्यवहार में, मैंने ऑब्जेक्ट ओरिएंटेड कोड में इंजीनियरिंग की तुलना में थोड़ा कम इंजीनियरिंग और थोड़ा अधिक इंजीनियरिंग की तुलना में थोड़ा अधिक इंजीनियरिंग देखा है।

आपके मामले में, यह बारीकियों पर निर्भर करेगा, और मुझे यकीन नहीं है कि आप वास्तव में एक प्रक्रियात्मक शैली में क्या करते हैं। क्या यह सही, स्पष्ट, परीक्षण योग्य, संशोधित करना आसान है, आदि? कोड को निर्धारित करने के लिए मानदंड ऐसी व्यावहारिक चिंताओं पर आधारित होना चाहिए, न कि किसी विशेष शैली की शुद्धता पर। ऐसा लगता है कि आपके मामले में उचित और जानकार लोग उन चिंताओं के बारे में असहमत (और कर सकते हैं), और यदि ऐसा है तो मामले की सच्चाई को निर्धारित करने का कोई उद्देश्य नहीं है।


2
आपके उत्तर की शुरुआत अच्छी रही, लेकिन तब आप अस्पष्ट और गैर-कमिटेड हो गए। मैंने लेख पढ़ा कि ओपी कार्यात्मक अपघटन से जुड़ा हुआ है, और यह एक भयानक एंटीपैटर्न है, जो प्रक्रियात्मक डेवलपर्स द्वारा अभ्यास किया जाता है, जो उनकी प्रोग्रामिंग शैली को ऑब्जेक्ट-ओरिएंटेड प्रतिमान में ढालने की कोशिश कर रहा है। तो नहीं, यह बारीकियों पर निर्भर नहीं करता है।
रॉबर्ट हार्वे

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

4
इस तरह से भी - प्रक्रियात्मक अपघटन एक वैध तकनीक है, और इसे यह कहते हुए खारिज कर देना कि OOP के साथ अधिक संगत एक शुद्ध कट्टरता नहीं है। सारे फूल खिलने दो। यदि बुद्धिमानी से उपयोग किया जाता है तो सभी तकनीकें मान्य हैं। एक विशेष कार्यप्रणाली से चिपके रहना समझदारी नहीं है।
तर्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.