पैटर्न और सिद्धांत के बीच अंतर


20

ऑब्जेक्ट ओरिएंटेड डिज़ाइन पैटर्न और सिद्धांत के बीच अंतर क्या है? क्या वे अलग चीजें हैं? जहाँ तक मैंने समझा कि दोनों कुछ सामान्य लक्ष्य (ई, जी। लचीलापन) हासिल करने की कोशिश करते हैं। तो क्या मैं कह सकता हूं कि एक पैटर्न एक सिद्धांत है और इसके विपरीत?

डिजाइन सिद्धांत = ठोस (यानी निर्भरता उलटा सिद्धांत)

डिजाइन पैटर्न = Gof (यानी सार फैक्टरी पैटर्न)

जवाबों:


24

नहीं, वे समान नहीं हैं।

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

जैसा कि आंद्रे बताते हैं, हर प्रतिमान में पैटर्न आम हैं। मैं अपने पिछले बयान को दोहराऊंगा: मैं कार्यात्मक या घोषणात्मक प्रोग्रामिंग के लिए किसी भी समान पुस्तकों से अवगत नहीं हूं , लेकिन आंद्रे ने नीचे दिए गए लिंक के साथ मेरी अज्ञानता को दूर किया है। (धन्यवाद, आंद्रे।)

सिद्धांत विशेष भाषाओं या प्रतिमानों के बारे में कम हैं, अधिक सामान्य हैं। "खुद को दोहराएं नहीं" - DRY सिद्धांत - सभी प्रोग्रामिंग के लिए सच है।


4
प्रतिमान में प्रतिमान विद्यमान होते हैं। जेरेमी गिबन्स एक किताब लिख रहा है कहा जाता है कार्यात्मक प्रोग्रामिंग में पैटर्न (और इसके बारे में ब्लॉगिंग यहाँ )। पैटर्न वही हैं जो नाम कहता है - आवर्ती डिजाइन, जो समान समस्याओं को हल करते हैं। वे हर जगह हैं, 'हालांकि आप हमेशा उन्हें पहचान नहीं सकते।
आंद्रे परमेस

@ AndréParamés एक त्वरित स्किम के माध्यम से मुझे विश्वास है कि जेरेमी गिबन्स भाषा के मुहावरों के बारे में बात कर रहे हैं , न कि डिज़ाइन पैटर्न।
इज़्काता

@ इज़काटा नॉन-
रॉय मार्टी

19

ये अवधारणाएँ समान नहीं हैं:

* डिजाइन सिद्धांत: * सॉफ्टवेयर डिजाइन सिद्धांत दिशानिर्देशों के एक समूह का प्रतिनिधित्व करते हैं जो हमें खराब डिजाइन से बचने में मदद करते हैं। जैसे: ओपन प्रिंसिपल

* डिजाइन पैटर्न: * एक डिजाइन पैटर्न सॉफ्टवेयर डिजाइन में दिए गए संदर्भ के भीतर आमतौर पर होने वाली समस्या का एक सामान्य पुन: प्रयोज्य समाधान है। जैसे: सिंगलटन


7

पैटर्न सिद्धांतों के हैं, पैटर्न के लिए क्या कार्यान्वयन हैं।

एक सिद्धांत "अप्रत्यक्ष" होगा, जिसे एक "कारखाना" पैटर्न द्वारा पूरा किया जा सकता है, जो अंत में कारखाने के तरीकों के साथ एक वर्ग के रूप में लागू होता है।


3

खैर, सिद्धांत नियम हैं जबकि पैटर्न उनके ठोस उदाहरण हैं।


1
क्या आप कुछ उदाहरण दे सकते हैं?

कृपया हमें वह सिद्धांत बताएं जो फैक्टरी या चेन ऑफ रिस्पॉन्सिबिलिटी या फ्लाईवेट के लिए कहता है।
duffymo

2
उदाहरण के लिए @duffymo खैर फैक्टरी निर्भरता उलटा सिद्धांत (इंजेक्शन नहीं) इस प्रकार है; क्लाइंट और इंस्टेंस दोनों एब्स्ट्रैक्शन पर निर्भर करते हैं - इंटरफ़ेस। उत्तरदायित्व की श्रृंखला ढीले युग्मन और नियंत्रण के पृथक्करण के सिद्धांतों पर आधारित है। फ्लाईवेट मेरा मानना ​​है कि केवल प्रदर्शन लाभ है।
m3th0dman

3

सिद्धांतों की तुलना में पैटर्न अधिक उच्च-स्तरीय चीजें हैं। पैटर्न विशिष्ट मुद्दों को हल करते हैं। संदर्भों की परवाह किए बिना सिद्धांतों को कहीं भी लागू किया जा सकता था। वास्तव में सिद्धांत (SRP, DRY, आदि) पर आधारित पैटर्न

ईजी लेट्स स्ट्रैटेजी पैटर्न पर नजर डालते हैं। यह एल्गोरिदम के एक परिवार को परिभाषित करता है, प्रत्येक को एनकैप्सुलेट करता है, और उन्हें विनिमेय बनाता है। तो, आपके पास एल्गोरिथम की उच्च-स्तरीय अवधारणा है। राज्य पैटर्न के साथ आपके पास राज्य की उच्च-स्तरीय अवधारणा है। सिद्धांतों के साथ आपके पास कोई उच्च-स्तरीय अवधारणा नहीं है। सिद्धांत ब्लॉक का निर्माण कर रहे हैं, जो लक्ष्य को प्राप्त करने के लिए पेटेंट द्वारा उपयोग किया जाता है। जब आप रणनीति पैटर्न लागू करते हैं, तो आप SOLID का उपयोग करते हैं:

  • SRP - आप कोड को परिभाषित करते हैं, जो एल्गोरिथ्म के लिए जिम्मेदार है और इसे दूसरे कोड से निकालता है।
  • OCP - आप अमूर्त को परिभाषित करते हैं, जो सभी अलग-अलग एल्गोरिदम का प्रतिनिधित्व करता है और इसका उपयोग करता है
  • एलएसपी - आप क्लाइंट कोड में ठोस एल्गोरिथम कक्षाओं का उपयोग नहीं करते हैं, केवल अमूर्तता है

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

@ जारको मेरा उदाहरण देखें। जब मैंने स्तर के बारे में बात की, तो मेरा मतलब था कि पैटर्न सिद्धांतों पर आधारित हैं, इसके विपरीत नहीं। निर्माण की तुलना में ईंट अधिक उच्च-स्तरीय चीज नहीं है।

4
मैं देख सकता हूं कि आपका क्या मतलब है और इस मामले पर आपकी सोच को समझें। हालांकि, यह सॉफ़्टवेयर के संदर्भ में "उच्च स्तर" और "निम्न स्तर" की अवधारणाओं के सामान्य अर्थ के विपरीत है। (किसी कारण से मैं @ -टाग यू नहीं कर सकता।)

1
"पैटर्न सिद्धांतों से अधिक उच्च स्तरीय चीजें हैं"। मैं अलग होना चाहता हूं ==> एक पैटर्न साकार करने के करीब है (यानी निम्न स्तर), जबकि एक सिद्धांत उच्च स्तर का नियम है।
राऊल

2

पैटर्न जहां मूल रूप से वास्तुकला के लिए प्रलेखित हैं। वास्तुकला में, एक कमरे के दरवाजे के स्थान से लेकर गांव के लेआउट तक की चीजों पर लागू होता है।

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

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

विचार करें

  • आपसे अनुरोध किया गया है कि किसी प्रोग्राम को विकसित करने के लिए केवल एप्रोच फैक्ट्री पैटर्न जैसे पैटर्न का उपयोग किया जाए। क्या यह उचित होगा? नहीं, तो यह एक पैटर्न की संभावना अधिक है।
  • आपसे सभी घटकों को DRY लागू करने का अनुरोध किया गया है? क्या यह उचित होगा? हां, तो यह एक सिद्धांत होने की अधिक संभावना है।

1

ऊ डिजाइन सिद्धांत-

OO सिद्धांत दिशानिर्देशों का एक समूह है जो OOP अवधारणा को सुनिश्चित करता है। ओओपी अवधारणा के आधार पर, यह बेहतर तरीके से डिजाइन करने के तरीके, एक बेहतर डिजाइन को परिभाषित करता है। मूल OO डिजाइन सिद्धांत SOLID है।

एक डिज़ाइन पैटर्न एक डिज़ाइन समस्या के लिए एक सामान्य समाधान प्रदान करता है। कृपया ध्यान दें कि "डिज़ाइन पैटर्न" को दोपहर ऑब्जेक्ट ओरिएंटेड शब्द पर भी लागू किया जा सकता है। तो एक OO डिज़ाइन पैटर्न (OODPs) वे हैं जो ऑब्जेक्ट ओरिएंटेड डिज़ाइन पर आधारित OO सिद्धांत को एक सामान्य समाधान प्रदान करते हैं। डिज़ाइन पैटर्न खोजे जाते हैं, आविष्कार नहीं। OODPs को परिभाषित करने के कई तरीके हैं और सबसे प्रसिद्ध है BSC [व्यवहारिक संरचनात्मक रचना]।

निम्नलिखित विस्तृत विवरण के लिए लिंक है। http://techythought.wordpress.com/2013/01/21/design-principle-vs-ds-design-pattern-describing-oop-elements/

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