गैर-ओओपी डिजाइन पैटर्न? [बन्द है]


70

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

मैं ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के दायरे से बाहर डिजाइन पैटर्न के कुछ उदाहरण देखना चाहूंगा । क्या तुम्हारे पास कुछ है? क्या ऐसा भी मौजूद है (कोई पुस्तक, जैसे कि GoF पुस्तक, जरूरी नहीं कि लिखी गई हो, उन्हें बस इस्तेमाल किया जाना चाहिए; यह पर्याप्त है)

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


8
मुझे लगता है कि सबसे लोकप्रिय डिजाइन पैटर्न की किताबों में घुलने-मिलने वाले लोगों का एक पूरा समूह बना था, जिनका मानना ​​था कि पैटर्न केवल ऑब्जेक्ट ओरिएंटेड भाषाओं पर लागू होते हैं। सृजनात्मक प्रतिमान वाद-विवाद योग्य हैं, लेकिन अन्य सभी में बहुत अधिक हैं और हर समय किसी भी वस्तु उन्मुख भाषा में लागू नहीं किए जा सकते हैं। मुझे यकीन है कि यह साइड इफेक्ट लेखक का इरादा नहीं था, यह साइड इफेक्ट कम नहीं है।
पेमदास

14
खैर, ऑब्जेक्ट गैर-ओओ भाषाओं में एक डिज़ाइन पैटर्न हैं :)
बैक

1
इससे भी बदतर, पैटर्न की किताबों ने उन लोगों के एक पूरे वर्ग का निर्माण किया जो मानते हैं कि किसी भी और हर समस्या को एक विशिष्ट पैटर्न लागू करके हल किया जाना चाहिए (आमतौर पर आखिरी बार उन्हें कुछ स्कूल शिक्षक द्वारा सिखाया गया था जो खुद भी ऐसा ही मानते हैं)।
jwenting

जवाबों:


25

वे हालांकि वस्तु-उन्मुख दृष्टिकोण का उपयोग कर रहे हैं।
कैस

12

वास्तव में यह विरोधाभास है - सबसे लोकप्रिय गैर-ओओ पैटर्न में से एक है ... "क्लास"।

क्योंकि OO का अविष्कार गैर-OO भाषाओं में किया गया था, डेवलपर्स को इसका अनुकरण करना था (और वे इसे अभी भी कर रहे हैं) - इसलिए पैटर्न का जन्म हुआ। LISP और C इसके उदाहरण हैं।

लेकिन मेरी सलाह ले लो: सामान्य गलती मत करो - केवल पैटर्न का उपयोग न करें क्योंकि यह शांत है , आपको पैटर्न के उपयोग (कम से कम ओओ वाले) को सही ठहराने के लिए गंभीर कारणों की आवश्यकता है।

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


11

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

इसका मतलब है कि आप हर जगह डिजाइन पैटर्न पा सकते हैं। वास्तव में प्रत्येक "सर्वश्रेष्ठ अभ्यास" को एक डिजाइन पैटर्न का एक सरल रूप माना जा सकता है।


9
माना! से पॉल ग्राहम : पैटर्न "" उदाहरण के लिए, OO दुनिया में आप के बारे में एक अच्छा सौदा सुन "[...] जब मैं अपने कार्यक्रमों में पैटर्न देखना, मैं यह मुसीबत का एक संकेत पर विचार के लिए एक कार्यक्रम के आकार को प्रतिबिंबित करना चाहिए।। केवल इस समस्या को हल करने की आवश्यकता है। कोड में कोई अन्य नियमितता एक संकेत है, मेरे लिए कम से कम, कि मैं अमूर्तता का उपयोग कर रहा हूं जो पर्याप्त शक्तिशाली नहीं हैं - अक्सर जो मैं कुछ मैक्रो के विस्तार से हाथ से उत्पन्न कर रहा हूं। मुझे लिखने की ज़रूरत है। ”
एंड्रेस एफ।

7
मैं एक डिज़ाइन पैटर्न के साथ असहमत हूं। दो विपरीत हैं। वर्कअराउंड एक अल्पकालिक पैच है जो एक विशिष्ट बाधा को बायपास करने के लिए एक साथ रखा जाता है। डिजाइन पैटर्न दीर्घकालिक पुन: प्रयोज्य समाधान हैं। डेकोरेटर पैटर्न का उद्देश्य वर्ग को संशोधित किए बिना कार्यात्मक रूप से जोड़ना है। आप वस्तु के बारे में जाने बिना किसी वस्तु पर विभिन्न सज्जाकार लगा सकते हैं।
डेस्परर्ट

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

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

2
Iterator पैटर्न को आधुनिक भाषाओं में किसी भी नई भाषा सुविधा द्वारा प्रतिस्थापित नहीं किया गया है। यह सिर्फ आम संग्रह के लिए एक डिफ़ॉल्ट कार्यान्वयन के साथ आता है। सिर्फ इसलिए कि यह एक डिफ़ॉल्ट कार्यान्वयन है इसका मतलब यह नहीं है कि पैटर्न का उपयोग नहीं किया जा रहा है। यदि आप अपना स्वयं का संग्रह लिखते हैं तो आपको इसे स्वयं लागू करना होगा।
डेस्परर्ट

10

LtU में उल्लेख है कि जेरेमी गिबन्स कार्यात्मक प्रोग्रामिंग में पैटर्न पर एक किताब लिख रहे हैं। कुछ टीज़र के लिए कार्यात्मक प्रोग्रामिंग ब्लॉग में श्री गिब्बन के पैटर्न देखें । ध्यान दें कि वह अपने पदों को सबसे पुराने से नवीनतम पढ़ने की सलाह देता है।

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



7

नॉन-ओओ डिज़ाइन पैटर्न का नामकरण करने के बजाय मैं आपको उन पुस्तकों के कुछ उदाहरण देना चाहूंगा जिनके कई डिज़ाइन पैटर्न हैं (उनमें कुछ पैटर्न अभी भी OO विशिष्ट होंगे):

उम्मीद है की यह मदद करेगा


ये वही हैं जिनकी मैं भी सिफारिश करूंगा, साथ ही होप और वुल्फ के एंटरप्राइज इंटीग्रेशन पैटर्न
टीएमएन

फाउलर के पैटर्न अत्यधिक ऊ :) :)
डेविड कोनडे

@ डेविड कॉनडे :) उनमें से अधिकांश शुद्ध OO हैं, उन सभी को एक OO तरीके से नीचे लिखा गया है, लेकिन उनमें से कुछ भी गैर OO पर लागू होते हैं: "वेब प्रस्तुति पैटर्न", "सत्र राज्य पैटर्न", "वितरण पैटर्न देखें ”
किस्डिजक

2

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


1

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


JS & "शुद्ध C" में प्रयुक्त: en.wikipedia.org/wiki/Module_pattern
umlcat

1

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


0

मुझे पैटर्न के रूप में डेटा स्ट्रच्यूट्रेस जैसे क्यूज़, लिंक्ड लिस्ट, ट्रीज़, ग्राफ़ आदि के बारे में सोचना पसंद है। वे डेटा को संग्रहीत करने और उन्हें संसाधित करने के लिए कुछ पैटर्न निर्धारित करते हैं। वे गैंग ऑफ़ फोर के अधिक उच्च अंत पेटेंट की तुलना में आदिम लग सकते हैं लेकिन वे फिर भी पैटर्न हैं। मेरा मतलब है, अगर किसी ने एक LIFO के बजाय एक FIFO के रूप में एक स्टैक लागू किया और एक कतार के लिए इसके विपरीत और उन्हें नाम दिया तो क्या होगा?

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