oop - what - ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग क्या है




जब ओओएफ़ बेहतर होता है तो? (11)

कुछ जगह जहां ओ ओ बहुत अच्छा नहीं है, जहां आप एसक्यूएल जैसे डेटा के "समूह" से निपटते हैं। ओ को सेट आधारित संचालन को और अधिक कठिन बनाना पड़ता है क्योंकि यह वास्तव में दो सेटों या दो सेटों के सुपरसेट को बेहतर ढंग से लेने के लिए डिज़ाइन नहीं किया गया है

इसके अलावा, ऐसे समय होते हैं जब एक कार्यात्मक दृष्टिकोण अधिक समझ में आता है जैसे एमएसडीएन से लिया गया उदाहरण:

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

चूंकि मैंने ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का अध्ययन करना शुरू कर दिया है, मैं अक्सर लेख / ब्लॉग्स पढ़ता हूं, जो कहता है कि फ़ंक्शन बेहतर हैं या सभी समस्याओं को ऑब्जेक्ट के रूप में मॉडलिंग नहीं किया जाना चाहिए। अपने व्यक्तिगत प्रोग्रामिंग एडवेंचर्स से, आपको कब लगता है कि समस्या का बेहतर समाधान OOP द्वारा किया जाता है?


मुझे ओओपी को बेच दिया गया है

किसी भी समय आप एक समस्या के लिए एक अवधारणा को परिभाषित कर सकते हैं, यह संभवतः एक वस्तु में लिपटे जा सकता है।

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

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


मुझे लगता है कि यह 'चीज़ें' के संदर्भ में किसी समस्या के बारे में सोचने में मदद करता है

यदि समस्या को एक या एक से अधिक 'चीजें' के रूप में माना जा सकता है, जहां प्रत्येक 'वस्तु' की कई विशेषताओं या जानकारी के टुकड़े हैं जो कि इसकी स्थिति को दर्शाती है, और उस पर किए जा सकने वाले कई आपरेशनों - तो ओओपी शायद जाने का रास्ता है!


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

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


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


यह समस्या पर निर्भर करता है: ओओपी प्रतिमान डिस्ट्रीब्यूटेड सिस्टम या फ्रेमवर्क को डिजाइन करने में उपयोगी होता है, जो उपयोगकर्ता के कार्यों (उदाहरण: वेब एप्लिकेशन) के दौरान बहुत सी संस्था रहती है।

लेकिन यदि आपके पास गणित की समस्या है तो आप एक कार्यात्मक भाषा (एलआईसीपी) पसंद करेंगे; एक प्रदर्शन-महत्वपूर्ण सिस्टम के लिए आप एडीए या सी आदि आदि का उपयोग करेंगे।

भाषा OOP उपयोगी है क्योंकि यह भी कार्यक्रम चलाने के लिए कचरा कलेक्टर (मेमोरी का स्वत: उपयोग) का प्रयोग करता है: आप सी में प्रोग्राम बहुत समय से आपको डिबग करना होगा और मैन्युअल रूप से मेमोरी की समस्या को ठीक करना होगा।


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


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

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

आपका कोड डेटा पर कार्य नहीं है (यानी डेटाबेस आधारित या गणित / विश्लेषण आधारित)। डाटाबेस आधारित कोड अक्सर प्रक्रियात्मक शैली के माध्यम से अधिक आसानी से प्रदर्शित होता है। एक कार्यात्मक शैली में विश्लेषण आधारित कोड अक्सर आसान दिखता है

आपका मॉडल कुछ का अनुकरण है (ओओ सिमुलेशन पर श्रेष्ठता)

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

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


निजी तौर पर, मुझे लगता है कि ओओपी व्यावहारिक रूप से किसी बड़े आवेदन के लिए एक आवश्यकता है। ओ ओपी का उपयोग किए बिना मैं 100k लाइनों पर एक प्रोग्राम की कल्पना कर सकता हूं, यह एक रखरखाव और डिजाइन दुःस्वप्न होगा


मैं आपको बताता हूँ कि जब ओओपी खराब है

जब वास्तुकार वास्तव में जटिल, गैर-दस्तावेज OOP कोड लिखता है। परियोजना के माध्यम से आधा रास्ता छोड़ देता है और उन्होंने अपने विभिन्न कॉमन कोड टुकड़ों में विभिन्न प्रोजेक्ट में इस्तेमाल किया है, जिसमें कोड गायब है। .NET रिफ्लेक्टर के लिए भगवान का शुक्र है।

और संगठन दृश्य स्रोत सुरक्षित या सबवर्जन नहीं चल रहा था

और मैं माफी चाहता हूं। लॉग इन करने के लिए कोड के 2 पेज बल्कि हास्यास्पद है, भले ही यह कथित रूप से ओओपीड हो ....


प्रोग्रामिंग के लिए OOP का उपयोग क्यों किया जाता है:

  1. इसकी लचीलापन - ओओपी प्रयोग के कार्यान्वयन के मामले में वास्तव में लचीला है
  2. यह आपके स्रोत कोड को 99.9% से भी ज्यादा कम कर सकता है - ऐसा लग सकता है कि मैं अतिरंजना कर रहा हूं, लेकिन यह सच है।
  3. सुरक्षा को कार्यान्वित करने में यह बहुत आसान है - हम सभी जानते हैं कि जब यह वेब डेवलपमेंट की बात आती है तो सुरक्षा एक महत्वपूर्ण आवश्यकता है। ओओपी का इस्तेमाल करना आपके वेब प्रोजेक्ट्स में सुरक्षा कार्यान्वयन को कम कर सकता है।
  4. यह कोडन को अधिक संगठित बनाता है - हम सभी जानते हैं कि क्लीन प्रोग्राम एक स्वच्छ कोडिंग है। प्रक्रियात्मक होने के बजाय ओओपी का प्रयोग करना बातें अधिक संगठित और व्यवस्थित बनाता है (जाहिर है)
  5. यह आपकी टीम को एक-दूसरे के साथ आसानी से काम करने में मदद करता है - मुझे पता है कि आप में से कुछ टीम प्रोजेक्ट्स अनुभव करते थे और आप में से कुछ लोग जानते हैं कि इसी विधि, कार्यान्वयन, एल्गोरिथ्म इत्यादि आदि के लिए महत्वपूर्ण है





oop