इंटरफेस
यह एक उपकरण के उद्देश्य को समझना मुश्किल है जो एक समस्या को हल करता है जो आपने कभी नहीं किया है। मैंने प्रोग्रामिंग शुरू करने के बाद कुछ समय के लिए इंटरफेस को नहीं समझा। हम समझ गए कि उन्होंने क्या किया है, लेकिन मुझे नहीं पता था कि आप एक का उपयोग क्यों करना चाहते हैं।
यहाँ समस्या है - आप जानते हैं कि आप क्या करना चाहते हैं, लेकिन आपके पास इसे करने के कई तरीके हैं, या आप इसे बाद में कैसे कर सकते हैं, इसे बदल सकते हैं। यह अच्छा होगा यदि आप क्लूलेस मैनेजर की भूमिका निभा सकते हैं - कुछ आदेशों की छाल दें और आपके द्वारा किए गए परिणामों की परवाह किए बिना यह करना है कि यह कैसे किया जाता है।
कहते हैं कि आपके पास एक छोटी सी वेबसाइट है, और आप अपने सभी उपयोगकर्ताओं की जानकारी को एक सीएसवी फ़ाइल में सहेजते हैं। सबसे परिष्कृत समाधान नहीं है, लेकिन यह आपकी माँ के उपयोगकर्ता विवरणों को संग्रहीत करने के लिए पर्याप्त रूप से काम करता है। बाद में, आपकी साइट बंद हो जाती है और आपके पास 10,000 उपयोगकर्ता हैं। शायद यह उचित डेटाबेस का उपयोग करने का समय है।
यदि आप पहली बार में चतुर थे, तो आपने इसे देखा होगा और सीधे csv को बचाने के लिए कॉल नहीं किए। इसके बजाय आप सोचेंगे कि इसे करने के लिए आपको क्या करना चाहिए, कोई फर्क नहीं पड़ता कि इसे कैसे लागू किया गया था। आइए कहते हैं store()
और retrieve()
। आप एक बनाने Persister
के लिए सार तरीकों के साथ इंटरफेस store()
और retrieve()
और एक बनाने के CsvPersister
उपवर्ग है कि वास्तव में उन तरीकों लागू करता है।
बाद में, आप DbPersister
डेटा का वास्तविक संग्रहण और पुनर्प्राप्ति पूरी तरह से अलग तरीके से बना सकते हैं कि आपके सीएसवी वर्ग ने यह कैसे किया।
बड़ी बात यह है कि अब आपको बस इतना करना है कि बदलाव हो
Persister* prst = new CsvPersister();
सेवा
Persister* prst = new DbPersister();
और फिर आप कर रहे हैं। आपके कॉल prst.store()
और prst.retrieve()
सभी अभी भी काम करेंगे, वे "पर्दे के पीछे" अलग तरह से संभाले हुए हैं।
अब, आपको अभी भी cvs और db कार्यान्वयन बनाने थे, इसलिए आपने अभी तक बॉस होने की विलासिता का अनुभव नहीं किया है। जब आप किसी और द्वारा बनाए गए इंटरफेस का उपयोग कर रहे हैं तो वास्तविक लाभ स्पष्ट हैं। यदि कोई व्यक्ति पहले CsvPersister()
और DbPersister()
पहले से ही बनाने के लिए पर्याप्त था , तो आपको बस एक को चुनना होगा और आवश्यक तरीकों को कॉल करना होगा। यदि आप बाद में या किसी अन्य प्रोजेक्ट में अन्य का उपयोग करने का निर्णय लेते हैं, तो आप पहले से ही जानते हैं कि यह कैसे काम करता है।
मैं वास्तव में अपने सी ++ पर जंग खा रहा हूं, इसलिए मैं बस कुछ सामान्य प्रोग्रामिंग उदाहरणों का उपयोग करूंगा। कंटेनर इस बात का एक बड़ा उदाहरण हैं कि कैसे इंटरफेस आपके जीवन को आसान बनाते हैं।
आप हो सकता है Array
, LinkedList
, BinaryTree
, आदि सभी उपवर्गों Container
जो तरह के तरीकों है insert()
, find()
, delete()
।
अब किसी लिंक की गई सूची के बीच में कुछ जोड़ने पर, आपको यह भी जानने की जरूरत नहीं है कि लिंक की गई सूची क्या है। आप बस कॉल करते हैं myLinkedList->insert(4)
और यह जादुई रूप से सूची के माध्यम से पुनरावृत्ति करता है और इसे वहां चिपका देता है। यहां तक कि अगर आप जानते हैं कि एक लिंक की गई सूची कैसे काम करती है (जो आपको वास्तव में चाहिए), तो आपको इसके विशिष्ट कार्यों को देखने की जरूरत नहीं है, क्योंकि आप शायद पहले से ही जानते हैं कि वे एक अलग Container
पहले का उपयोग करने से क्या हैं ।
सार वर्ग
सार कक्षाएं सुंदर इंटरफेस के समान हैं (अच्छी तरह से तकनीकी रूप से इंटरफेस हैं अमूर्त वर्ग मैं मतलब आधार वर्ग है कि उनके तरीकों के कुछ बाहर fleshed है, लेकिन यहाँ।
कहते हैं कि आप एक खेल बना रहे हैं, और आपको यह पता लगाने की आवश्यकता है कि दुश्मन खिलाड़ी की हड़ताली दूरी के भीतर हैं। आप एक बेस क्लास बना सकते हैं Enemy
जिसमें एक विधि हो inRange()
। यद्यपि दुश्मनों के बारे में कई बातें हैं जो अलग-अलग हैं, उनकी सीमा की जांच करने के लिए उपयोग की जाने वाली विधि सुसंगत है। इसलिए आपकी Enemy
कक्षा में जाँच सीमा के लिए एक फ्लेशेड विधि होगी, लेकिन अन्य चीजों के लिए शुद्ध आभासी विधियाँ जो दुश्मन प्रकारों के बीच कोई समानता साझा नहीं करती हैं।
इसके बारे में अच्छी बात यह है कि यदि आप रेंज डिटेक्शन कोड को गड़बड़ करते हैं या इसे ट्विक करना चाहते हैं, तो आपको इसे केवल एक जगह बदलना होगा।
बेशक इंटरफेस और अमूर्त आधार वर्गों के कई अन्य कारण हैं, लेकिन वे कुछ कारण हैं जिनके कारण आप उनका उपयोग कर सकते हैं।
एकमात्र
मैं कभी-कभी उनका उपयोग करता हूं, और मैं उनके द्वारा कभी नहीं जलाया गया। यह कहने के लिए नहीं है कि वे अन्य लोगों के अनुभवों के आधार पर मेरे जीवन को बर्बाद नहीं करेंगे।
यहाँ कुछ अधिक अनुभवी और सावधान लोगों से वैश्विक राज्य पर एक अच्छी चर्चा है:
ग्लोबल स्टेट इतना ईविल क्यों है?