एल्गोरिदम से बताएं कि कंप्यूटर क्या करना चाहिए। संरचना का वर्णन है कि एल्गोरिथ्म कैसे रखा गया है [स्रोत कोड में]। OOP प्रोग्रामिंग की एक शैली है जो कुछ "ऑब्जेक्ट ओरिएंटेड" संरचनाओं का लाभ उठाती है।
एल्गोरिथ्म किताबें अक्सर OOP त्याग क्योंकि वे एल्गोरिथ्म, नहीं संरचना पर ध्यान केंद्रित कर रहे हैं। कोड के टुकड़े जो बहुत संरचना पर भरोसा करते हैं, एल्गोरिथम पुस्तक में डालने के लिए खराब उदाहरण हैं। इसी तरह, OOP किताबें अक्सर एल्गोरिदम से बच जाती हैं क्योंकि वे कहानी को अव्यवस्थित कर देती हैं। OOP का विक्रय बिंदु इसकी तरलता है, और इसे एक एल्गोरिथ्म में शामिल करने से यह अधिक कठोर दिखाई देता है। यह पुस्तक के फ़ोकस के अलावा और कुछ भी नहीं है।
वास्तविक जीवन कोड में, आप दोनों तरफ का उपयोग करेंगे। आप एल्गोरिदम के बिना कंप्यूटर की समस्याओं को हल नहीं कर सकते हैं, परिभाषा के अनुसार, और आपको इसकी संरचना (OOP या अन्यथा) के बिना अच्छे एल्गोरिदम लिखने में मुश्किल होगी।
जहां वे धुंधला करते हैं, उसके उदाहरण के रूप में डायनामिक प्रोग्रामिंग लेते हैं। एक एल्गोरिथ्म पुस्तक में, आप वर्णन करेंगे कि एक समरूप में एक समरूप डेटासेट कैसे लें और एक समाधान पर पहुंचने के लिए डायनेमिक प्रोग्रामिंग का उपयोग करें। एक OOP पुस्तक में, आप विज़िटर के रूप में एक संरचना में आ सकते हैं, जो विषम वस्तुओं के समूह में मनमाने ढंग से एल्गोरिदम करने का एक तरीका है। डीपी पुस्तक का उदाहरण आमतौर पर नीचे-ऊपर क्रम में वस्तुओं पर काम करने वाले एक बहुत ही साधारण आगंतुक के रूप में सोचा जा सकता है। विज़िटर पैटर्न को डीपी समस्या के कंकाल के रूप में सोचा जा सकता है, लेकिन मांस और आलू को गायब कर सकते हैं। वास्तव में, आप पाएंगे कि आपको अक्सर एक साथ दोनों की आवश्यकता होती है: आप अपने डेटासेट (उस पर डीपी खराब है) में विषमता से निपटने के लिए विज़िटर पैटर्न का उपयोग करते हैं, और आप रनटाइम को कम करने के लिए अपने एल्गोरिथ्म को व्यवस्थित करने के लिए विज़िटर की संरचना के भीतर डीपी का उपयोग करते हैं (विज़िटर) नहीं करता है '
हम एल्गोरिदम को डिजाइन पैटर्न के शीर्ष पर भी देखते हैं। इसके कठिन शब्द करने के लिए एक छोटी सी जगह में उदाहरण है, लेकिन उस संरचना में हेरफेर करने के लिए इच्छुक एक बार आप संरचना है, तो आप शुरू करते हैं, और आप यह करने के लिए एल्गोरिदम का उपयोग।
क्या कुछ समस्याएं हैं जो केवल OOP द्वारा प्रस्तुत और हल की जा सकती हैं?
यह आपके द्वारा सोचने के बजाय उत्तर देने के लिए अधिक कठिन प्रश्न है। पहले आदेश तक, कोई भी कम्प्यूटेशनल कारण नहीं है कि आपको किसी समस्या को हल करने के लिए ओओपी की आवश्यकता क्यों है। सरल प्रमाण यह है कि प्रत्येक ओओपी कार्यक्रम विधानसभा के लिए संकलित हो जाता है, जो एक निश्चित रूप से गैर-ओओपी भाषा है।
हालांकि, चीजों की अधिक से अधिक योजना में, उत्तर हां की ओर शर्म करना शुरू कर देता है। आप शायद ही कभी कंप्यूटिंग के तरीके से बस सीमित हैं। ज्यादातर समय व्यापार की जरूरतों और डेवलपर कौशल जैसी चीजें होती हैं जो समीकरण में कारक होती हैं। आज कई एप्लिकेशन ओओपी के बिना नहीं लिखे जा सकते हैं, इसलिए नहीं कि ओओपी किसी तरह से कार्य के लिए मौलिक है, लेकिन क्योंकि ओओपी द्वारा प्रदान की गई संरचना परियोजना को ट्रैक और बजट पर रखने के लिए आवश्यक थी।
यह यह नहीं कहता है कि हम भविष्य में कुछ मज़ेदार नए ढांचे के लिए ओओपी का परित्याग नहीं करेंगे। यह केवल कहता है कि यह हमारे टूलबॉक्स में सबसे प्रभावी उपकरणों में से एक है जो आज आश्चर्यजनक रूप से बड़े पैमाने पर प्रोग्रामिंग कार्यों के लिए है। भविष्य की समस्याएं हमें विभिन्न संरचनाओं का उपयोग करके विकास का दृष्टिकोण करने का कारण बन सकती हैं। एक के लिए, मुझे उम्मीद है कि तंत्रिका जाल को बहुत अलग विकास दृष्टिकोण की आवश्यकता होती है, जो "ऑब्जेक्ट ओरिएंटेड" हो सकता है या नहीं।
एल्गोरिथ्म डिजाइनरों के सोचने के तरीके से मुझे निकट भविष्य में ओओपी का प्रसार नहीं दिखता है। आज तक, सामान्य पैटर्न यह है कि कोई व्यक्ति एक एल्गोरिथ्म डिज़ाइन करता है जो OOP का लाभ नहीं उठाता है। OOP समुदाय को पता चलता है कि एल्गोरिथ्म वास्तव में OOP संरचना में फिट नहीं है, और वास्तव में इसकी आवश्यकता नहीं है, इसलिए वे पूरे एल्गोरिथ्म को OOP संरचना में लपेटते हैं और इसका उपयोग करना शुरू करते हैं। विचार करें boost::shared_ptr
। रेफरेंस काउंटिंग एल्गोरिदम जो अंदर आराम करते shared_ptr
हैं वे बहुत ओओपी फ्रेंडली नहीं हैं। हालाँकि, यह पैटर्न तब तक लोकप्रिय नहीं हुआ जब तक shared_ptr
कि इसके चारों ओर एक OOP आवरण नहीं बना जो एक OOP संरचित प्रारूप में एल्गोरिदम की क्षमताओं को उजागर करता। अब, यह इतना लोकप्रिय है कि इसने इसे C ++, C ++ 11 के लिए नवीनतम युक्ति बना दिया।
यह इतना सफल क्यों है? एल्गोरिदम समस्याओं को हल करने में महान हैं, लेकिन उन्हें अक्सर यह समझने के लिए एक प्रारंभिक प्रारंभिक निवेश की आवश्यकता होती है कि उन्हें कैसे उपयोग किया जाए। ऑब्जेक्ट ओरिएंटेड विकास ऐसे एल्गोरिदम को लपेटने और एक इंटरफ़ेस प्रदान करने में बहुत प्रभावी है जिसे सीखने के लिए कम प्रारंभिक निवेश की आवश्यकता होती है।