आपको सॉफ्टवेयर वर्ल्ड के बाहर के लोगों को डिज़ाइन पैटर्न कैसे समझाए जाने चाहिए


10

मैं अपनी भतीजी को डिजाइन पैटर्न समझाना चाहता हूं, लेकिन ऐसा करने में हमेशा संघर्ष करता हूं। यह काफी हद तक मेरे डिजाइन पैटर्न की स्पष्ट समझ की कमी के कारण है। आप एमवीसी, सिंगलटन, फैक्ट्री, रिपॉजिटरी आदि जैसे पैटर्न को ऐसे सरल शब्दों में कैसे समझा सकते हैं, जिसे 10 साल के बच्चे भी समझ सकते हैं।

मैं उन उदाहरणों की तलाश कर रहा हूं, जो पैटर्न को समझने में मदद कर सकते हैं। खिलौने, सिनेमा, संगीत आदि के उदाहरण।


2
डिजाइन पैटर्न सॉफ्टवेयर डेवलपमेंट के लिए होता है कि गणित के लिए कौन सी श्रेणी का सिद्धांत है। । । कम से कम यह है कि मैं इसे एक गणितज्ञ को कैसे समझाऊं।
एरिक विल्सन

यह पहेली पुस्तकों के उत्तर अनुभागों को पढ़ने जैसा है। आपको हर पहेली का उत्तर नहीं पता होगा, लेकिन आप सबसे अधिक करेंगे और आपको पता चल जाएगा कि आपको पहेली के लिए कहां से शुरू करना है।
स्टुपरयूज़र

जवाबों:


7

मुझे लगता है कि विकिपीडिया लेख की शुरुआत शायद एक अच्छी शुरुआत है:

A design pattern is a general reusable solution to a commonly occurring problem.

या क्या आप उन विशिष्ट पैटर्नों की बारीकियों को समझाना चाहते हैं?


बारीकियों की तलाश में
gizgok

1
वहाँ भी सरल विकिपीडिया है, Secure.wikimedia.org/wikipedia/simple/wiki/Design_pattern
जेफ वेलिंग

2
@ गिग्गोक: "विशेष"? क्या बकवास है। निर्दिष्ट करें - विस्तार से - आप संभवतः और क्या चाहते हैं। "बारीकियों" को चाहना अस्पष्ट है।
S.Lott

5

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

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


1
coz 10 साल के बच्चे हैकर बनना चाहते हैं
gizgok

2

डिज़ाइन पैटर्न मौजूद हैं क्योंकि कुछ लोगों ने महसूस किया कि एक साथ अच्छी तरह से काम करने के लिए बिट्स सॉफ़्टवेयर प्राप्त करने के तरीके थे, और अपनी अंतर्दृष्टि साझा करना चाहते थे।

आप उसी तरह से डिजाइन पैटर्न के बारे में सोच सकते हैं जैसे आप लोगों के समूहों के बारे में सोचते हैं। उदाहरण के लिए, कभी-कभी हमारे पास एक व्यक्ति होता है जो हमारी सभी बैठकों को सुविधाजनक बनाता है। यह एक नियंत्रक पैटर्न की तरह है, जो वस्तुओं के बीच परस्पर क्रिया को सुगम बनाता है।

या दर्शकों की कल्पना करें, जहां कमरे के सामने वाला कोई व्यक्ति अपने हाथों को ऊपर रखने वाले लोगों के लिए देखता है, फिर सवाल दोहराता है ताकि बाकी सभी लोग सुन सकें, या शायद इसका जवाब देकर प्रतिक्रिया करें। यह एक Subject / Observer पैटर्न के समान होगा।

ऐसे पैटर्न हैं जो ट्रांसलेटर (एडेप्टर पैटर्न), सिक्योरिटी गार्ड (प्रोक्सी) की तरह व्यवहार करते हैं, जैसे किसी क्षेत्र (सिंगलेट्स) के विशेषज्ञ, या आपकी कार की जांच करने वाले लोगों की तरह (वैलिडेटर्स)।

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


1

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


1

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


1
अधिकांश डिज़ाइन पैटर्न एक विशेष समस्या को हल करने के लिए उचित सार का उपयोग करने के निर्देश हैं। वास्तव में कहने के अनुसार ऑब्जेक्ट-ओरिएंटेड डिज़ाइन का हिस्सा नहीं हैं।
पेमदास

@ पेमदास: उदाहरण के लिए फैक्टरी लें। ओओपी के बाहर इसका क्या अर्थ है?
वार्तेक

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

डिज़ाइन पैटर्न का OOP से कोई लेना-देना नहीं है। डिज़ाइन पैटर्न उन समस्याओं के बारे में है जो बार-बार सामने आती हैं, और समस्याओं को संभालने के लिए विकसित की गई रणनीतियाँ। यदि एक रणनीति को बार-बार विकसित किया जाता है तो आपके पास एक पैटर्न है। यदि कोई रणनीति बार-बार काम करती है तो आप इसे एक डिज़ाइन पैटर्न कहते हैं, यदि यह बार-बार विफल होता है तो आप इसे एक एंटी-पैटर्न कहते हैं। डिज़ाइन पैटर्न के बारे में सीखने का मतलब है कि ऐसी रणनीतियों को सीखना, जो अतीत में बार-बार काम करती हैं। देखें कि कैसे मैंने बिल्कुल भी प्रोग्रामिंग का उल्लेख नहीं किया, बहुत कम ओओपी?
gnasher729 15

0

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

कमरे के आसपास चलती चीजों पर चर्चा करें। दरवाजे के सामने एक कुर्सी रखो। क्या यह विंडोज़ या दरवाजे को कहीं और स्थानांतरित करने के लिए समझ में आएगा। क्यों या क्यों नहीं?

मेज पर एक जगह स्थापित करने की तरह कुछ प्रयास करें। अपने से दूर जाकर आकार द्वारा चीजों को व्यवस्थित करने का प्रयास करें। सामान्य पैटर्न नहीं है और इसके साथ काम करना मुश्किल है। इसे सामान्य रूप से सेट करें। यह रस के एक त्वरित गिलास के लिए एक उपयुक्त लेआउट है? पैटर्न हमेशा उपयुक्त नहीं होते हैं।

हम हर समय पैटर्न के साथ रहते हैं। तीन या चार किताबें लें और उनके माध्यम से पेजिंग शुरू करें। लेआउट में एक स्पष्ट पैटर्न है; शीर्षक पृष्ठ, सामग्री की तालिका, सामग्री और सूचकांक। सभी घटकों की आवश्यकता नहीं होती है, लेकिन उन्हें जगह से बाहर देखना भ्रामक होगा।


0

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

ध्यान दें, कि आपको कट बनाने के लिए जिग की जरूरत नहीं है , यह कुछ परिस्थितियों में आसान है।


0

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

एकाकी वस्तु

इस पैटर्न का उपयोग तब किया जाता है जब हम इस बात की गारंटी देना चाहते हैं कि किसी एक चीज की ही जरूरत है। दूसरों को हमारी वस्तु बनाने से रोककर पैटर्न को पूरा किया जाता है।

विकिपीडिया

MVC

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

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

विकिपीडिया

फ़ैक्टरी

यहाँ सावधान रहना होगा क्योंकि फैक्ट्री नामक कई समान पैटर्न हैं ... मैं एब्सट्रैक्ट फ़ैक्टरी के बारे में बात करूँगा , लेकिन आपको पता होना चाहिए कि फ़ैक्टरी विधि पैटर्न भी है।

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


0

एक 10 साल की उम्र में जो हैकर बनना चाहता है - मैं कहूंगा।

सोचिए अगर आपके पास दुनिया के कुछ सबसे अच्छे हैकर हो सकते हैं जब आप दूर हैकिंग कर रहे थे .. और हर अब और फिर वे कहेंगे .. "आप जानते हैं कि क्या आप ऐसा करते हैं ... [सम्मिलित करें पैटर्न] ... तो आप कोड होगा [तेज / सुरक्षित / अधिक बनाए रखने योग्य / आदि] "कितना अच्छा होगा।

अब जब मुझे लगता है कि वह इस विचार के लिए उत्सुक है - मैं अपना समय बर्बाद नहीं करूँगा प्रत्येक पैटर्न की व्याख्या करूँगा जिसे मैं "हैकिंग कार्य" सेट करूँगा .. और फिर एक डिज़ाइन पैटर्न लागू करूंगा और मूल्य समझाऊंगा ... तो बस उसे कुछ इंगित करें अच्छे संसाधन और देखें कि यह कहाँ जाता है।

लेकिन ज्यादातर वह उन्हें सलाह के माध्यम से सीखने की जरूरत होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.