2010-01-31 15 views
9

चूंकि हमारे पास जावा में इतने सारे डिज़ाइन पैटर्न हैं, जैसे बुद्धिमान हमारे पास सी ++ में कोई है या हम सी ++ में समान प्रकार के पैटर्न का उपयोग कर सकते हैं।क्या हमारे पास जावा में सी ++ में डिज़ाइन पैटर्न हैं?

+9

मैं जावा स्कूलों – Eric

+0

अजीब है कि इस सवाल का upvoted हो जाता है के खतरों पर Spolsky मिलता है। सी ++ में हमारे पास डिज़ाइन पैटर्न क्यों नहीं होंगे? – Frank

+1

@ डेहमान - क्योंकि उन्हें लगता है कि डिज़ाइन पैटर्न जावा * फीचर * हैं। – n002213f

उत्तर

28

डिजाइन पैटर्न पर मूल पुस्तक (डिज़ाइन पैटर्न: पुन: प्रयोज्य ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर के तत्व गैंग ऑफ चार द्वारा) जावा की भविष्यवाणी करता है। सी ++ और स्मॉलटॉक में उदाहरण हैं।

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

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

+0

(ग) 1995 IIRC, सीडी संस्करण (ग) 1997 –

+0

जावा एक तथ्य के लिए कई इंटरफेस विरासत का समर्थन करता है GOF किताब है। वसंत की तरह पूरे प्रसिद्ध ढांचे भी हैं, जो केवल इंटरफेस का उपयोग करके सब कुछ मॉडल करते हैं। क्या आप एक एकल डिज़ाइन पैटर्न का नाम दे सकते हैं जो एकाधिक कार्यान्वयन विरासत के साथ काम करेगा और इसे एकाधिक इंटरफ़ेस विरासत का उपयोग करके पुन: उत्पन्न नहीं किया जा सकता है? – SyntaxT3rr0r

+3

@just: "पुस्तक 1995 कॉपीराइट के साथ अक्टूबर 21, 1994 था के मूल प्रकाशन तिथि, और अप्रैल 2007 के रूप में, पुस्तक अपने 36 वें मुद्रण में था।" -http: //en.wikipedia.org/wiki/ Design_Patterns - जावा 1 99 5 में दिखाई दिया। – Joey

16

डिजाइन पैटर्न वैचारिक हैं, इसका मतलब है कि यह लैंगुग से बंधे नहीं है।

आप सी ++ पर एक ही विचार का उपयोग कर सकते हैं।

0

कई जावा पैटर्न सीधे सी ++ और लगभग हर भाषा पर लागू होते हैं। बेशक, ऐसे पैटर्न हैं जो एक भाषा में लिखने के लिए सुरुचिपूर्ण हैं, लेकिन दूसरे में नहीं हैं।

3

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

इस बीच, सी ++ समृद्ध (और मुड़कर, कुछ कह सकते हैं!) टेम्पलेटिंग सिस्टम मानकों के पैटर्न के बहुत ही रोचक कार्यान्वयन के लिए अनुमति देता है, उदाहरण के लिए अलेक्जेंड्रेस्कू से आधुनिक सी ++ डिज़ाइन और इसकी बहुत ही रोचक नीति-आधारित डिज़ाइन देखें।

1

डिज़ाइन पैटर्न आमतौर पर सामान्य सॉफ़्टवेयर समस्याओं के समाधान के लिए उपयोग किए जाते हैं। जबकि कुछ भाषाएं या ढांचे दूसरों के मुकाबले अलग-अलग पैटर्न में खुद को उधार देते हैं, पैटर्न स्वयं भाषा पसंद के लिए तर्कसंगत हैं, इसलिए आपको सी ++ के लिए पैटर्न कार्यान्वयन की संभावना है।

0

बूस्ट लाइब्रेरी दस्तावेज़ों का संदर्भ लें, वहां उन्होंने जावा जैसे कई डिज़ाइन पैटर्न लागू किए हैं।

7

डिजाइन पैटर्न भाषा अज्ञेयवादी हैं। भाषा विशिष्ट पैटर्न को idioms कहा जाता है - ये एक निश्चित भाषा में पुनरावर्ती समस्याओं के समाधान हैं।

सी ++ के लिए Effective C++ जैसी अच्छी किताबें हैं, जो आपको मूलभूत लोगों से परिचय देती हैं। विकीबूक More C++ idioms भी एक लुक के लायक है।

2

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

2

जैसा कि बताया गया है, डिजाइन पैटर्न के बारे में मूल पुस्तक कोड नमूने के लिए सी ++ और कुछ स्मॉलटाक का उपयोग करती है। ऐसा कहकर, उस पुस्तक में इस्तेमाल किया जाने वाला कोड आज अच्छा सी ++ नहीं माना जाता है, इसलिए मैं सी ++ में "क्लासिक" डिज़ाइन पैटर्न को लागू करने के बारे में सावधान रहूंगा।

1

मैं कहूँगा कि एक पैटर्न आम तौर पर एक या कुछ प्रोग्रामिंग मानदंड के भीतर फिट, तो यह एक ही भाषा के लिए विवश नहीं कर रहा है। कुछ कहते हैं कि पैटर्न प्रतिमान/भाषा में गायब सुविधाओं का एक संकेत है, या भाषा/प्रतिमान की समस्याओं को रोकने के लिए एक तरीका है।

3

यह प्रश्न काफी मनोरंजक है क्योंकि डिजाइन पैटर्न सी ++ में उत्पन्न हुआ है। GOF पुस्तक (गामा, जॉनसन, पतवार, Vlissides) परिचय में:

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

और फिर में क्या एक डिजाइन पैटर्न है:

डिजाइन पैटर्न वस्तु उन्मुख डिजाइन का वर्णन है, वे व्यावहारिक समाधान इस तरह मुख्यधारा ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषाओं में लागू किया गया है पर आधारित होते हैं प्रक्रियात्मक भाषाओं (पास्कल, सी, एडीए) या अधिक गतिशील ऑब्जेक्ट उन्मुख भाषाओं (CLOS, Dylan, Self) की बजाय Smalltalk और C++। हमने व्यावहारिक कारणों के लिए स्मॉलटाक और सी ++ चुना है: इन भाषाओं में हमारे दैनिक अनुभव रहे हैं, और वे तेजी से लोकप्रिय हैं।

इसके अलावा, डिजाइन पैटर्न की आलोचना इस आधार पर की गई है कि वे केवल मुहावरे हैं, इस तथ्य को छिपाने के लिए गौरवशाली हैं। आलोचकों (क्षमा करें, कोई स्रोत नहीं) कहते हैं कि डीपी सिर्फ प्रत्यक्ष भाषा समर्थन की कमी के लिए तैयार हैं। कैसे स्काला के लिए सिंगलटन में निर्मित समर्थन public static getInstance() अनावश्यक, या याद करते हैं कि Visitor बस डबल प्रेषण simulates देख: यह सही कम से कम एक निश्चित सीमा तक निश्चित रूप से है।

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

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