2009-02-13 10 views
25

ऐसा लगता है कि कई ओओ चर्चाएं उदाहरण के रूप में जावा या सी # का उपयोग करती हैं (जैसे हेड फर्स्ट डिज़ाइन पैटर्न)।क्या ओओ डिजाइन सिद्धांत पायथन पर लागू होते हैं?

क्या ये पैटर्न पायथन के लिए समान रूप से लागू होते हैं? या अगर मैं डिजाइन पैटर्न का पालन करता हूं, तो क्या मैं सिर्फ पायथन में जावा लिखना समाप्त कर दूंगा (जो जाहिर है कि एक बहुत बुरी चीज है)?

+3

'स्पष्ट रूप से' नहीं: भाषा ए में लिखना एक बुरी बात है जैसे कि यह भाषा बी थी। स्वतंत्र रूप से कौन सा है। पर्ल में पायथन लिखना उतना ही बुरा हो सकता है। –

+3

डिजाइन पैटर्न स्वयं भाषा अज्ञेयवादी होने के लिए हैं - कुछ ग्रंथ कार्यान्वयन पर चर्चा करने के लिए एक विशिष्ट भाषा का उपयोग कर सकते हैं, हालांकि पैटर्न अमूर्तता के एक अलग स्तर पर होने के लिए हैं। – Geoglyph

+0

देखें http://stackoverflow.com/questions/127377/programming-भाषा-and-design-patterns –

उत्तर

36

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

4

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

+0

सिंगलटन का मान वैसे भी बहस योग्य है। विषय पर: डिज़ाइन पैटर्न भाषा की कमियों को ठीक करने के लिए नलिका-टेप से थोड़ा अधिक हैं। – Dan

12

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

उदाहरण के लिए, प्रथम श्रेणी के प्रकार के साथ कुछ भी कारखाना हो सकता है। कारखाने के प्रकार की कोई ज़रूरत नहीं है, आप सीधे इच्छित वस्तु का निर्माण करने के लिए कक्षा का उपयोग कर सकते हैं।

असल में, पायथन के पास अपने स्वयं के डिज़ाइन मुहावरे हैं जो काफी हद तक अलग हैं क्योंकि यह बहुत गतिशील है और अविश्वसनीय आत्मनिरीक्षण क्षमताएं हैं।

उदाहरण:

x = list 
my_list = x(range(0,5)) #creates a new list by invoking list's constructor 

एक प्रतिदेय वस्तु आप अनिवार्य रूप से अपने कोड में किसी भी 'कारखाना' प्रकार निकाल सकते हैं करने के लिए वर्ग प्रकार आवंटित करके। आपको केवल कॉलबेल के साथ ही छोड़ा जाता है जो वस्तुओं को उत्पन्न करता है जो कुछ दिए गए सम्मेलनों के अनुरूप होना चाहिए।

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

1

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

0

जावा या सी # का उपयोग शायद भाषा की मुख्यधारा की लोकप्रियता के कारण है।

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

1

हाँ, निश्चित रूप से वे लागू होते हैं। लेकिन जैसा ऊपर बताया गया है, भाषा में कई पैटर्न बनाए गए हैं, या भाषा की उच्च स्तर की विशेषताओं से अप्रासंगिक बनाते हैं।

4

डिज़ाइन पैटर्न भाषा की कमियों को ठीक करने के लिए नलिका-टेप से थोड़ा अधिक हैं।

+0

वास्तव में? कोई उदाहरण? –

+0

मैं अपने विचारों को स्पष्ट करने की कोशिश की थी, लेकिन यह बहुत था लंबे समय तक के लिए यथोचित फिट अंदर टिप्पणियों, इसलिए बजाय: http://c2.com/cgi/wiki?AreDesignPatternsMissingLanguageFeatures – Dan

+0

"DesignPatterns की एक सूची और एक भाषा विशेषता यह है कि (मोटे तौर पर) उन्हें बदल देता है "। दो कॉलम डिजाइन पैटर्न की दोनों सूचियां हैं। बाईं ओर चार पैटर्न की गिरोह हैं। दाईं तरफ के लोग अन्य पैटर्न हैं जो गोफ बुक में नहीं होते हैं। अभी भी नहीं देखते हैं कि पैटर्न नलिका टेप हैं। –

3

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

इटरेटर पैटर्न का उपयोग पायथन में भी किया जाता है, यद्यपि थोड़ा अलग रूप में।

डंकन बूथ ने an article on patterns in python लिखा है।

4

संक्षिप्त उत्तर: हां; पायथन एक ओओ भाषा है।

थोड़ा लंबा जवाब: हां; आप ओओ सिद्धांतों का उपयोग करके डिज़ाइन और किसी भी भाषा (यहां तक ​​कि असेंबलर) में लागू कर सकते हैं।

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

लांग, वर्बोज़, बोरिंग जवाब: (प्रोग्रामिंग भाषाओं के विकास नहीं एक सरल रेखीय प्रगति है, लेकिन मुझे oversimplify जाने और एक अवलोकन है कि लगभग 40 साल के के spans बनाने के लिए है कि इस तथ्य की अनदेखी प्रोग्रामिंग अनुभव।)

हमेशा भाषा सुविधाओं बनाम डिजाइन सिद्धांतों और पैटर्न के लिए एक भूमिका होने जा रहा है। हर स्तर पर, चौकस चिकित्सकों देखा है:

  • "। यहाँ एक समस्या हम अपने वर्तमान भाषा (ओं) में हाथ से सुलझाने रखना है"

  • "यहां एक बग है जिसे हम अपनी वर्तमान भाषा में लिखते रहते हैं।"

  • "यहां कुछ अच्छे अभ्यास हैं जो हम अपने सर्वोत्तम कार्यक्रमों में देख रहे हैं।"

और इसलिए भाषा (ओं) मनाया अच्छे व्यवहार के लिए सहायता प्रदान करते हैं, अवधारणाओं को शामिल करने की है ताकि वे सम्मेलन/समझौते के द्वारा किया जाता करने के लिए (या गलती से टूट ही द्वारा) की जरूरत नहीं है करते हैं की अगली पीढ़ी , और प्रथाओं को लागू करें जो आसानी से बचने योग्य त्रुटियों को रोकें।

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

0

हाँ, आप अजगर में डिजाइन पैटर्न के बहुत सारे उपयोग कर सकते हैं। एक डिजाइन पैटर्न एक उच्च स्तरीय कार्य का एक दोहराने योग्य कार्यान्वयन है। पाइथन & डिज़ाइन पैटर्न अन्य भाषाओं के समान काम नहीं करते हैं क्योंकि पाइथन में निर्मित अधिकांश बुनियादी पैटर्न शामिल हैं। इसका मतलब है कि पाइथन में उभरने वाले पैटर्न पुरुषों के कार्यों के बजाय उच्च स्तर के डिज़ाइन पैटर्न होने की संभावना है आमतौर पर कौन से पैटर्न की आवश्यकता होती है।

संबंधित मुद्दे