पुस्तकालयों में दृश्यता को संभालने का सामान्य तरीका क्या है?


12

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

स्वीकृत उत्तर साइस:

अंगूठे का एक अच्छा नियम है: जितना संभव हो सब कुछ निजी बनाएं।

और दूसरा:

  1. जब तक आपको उन्हें तुरंत अपने अधीन करने की आवश्यकता न हो, तब तक सभी कक्षाओं को अंतिम रूप दें।
  2. सभी विधियों को तब तक अंतिम रूप दें, जब तक आपको उन्हें उपखंड करने और उन्हें तुरंत ओवरराइड करने की आवश्यकता न हो।
  3. जब तक आपको विधि के शरीर के भीतर उन्हें बदलने की आवश्यकता न हो, तब तक सभी विधि पैरामीटर को अंतिम बनाएं, जो कि वैसे भी अधिकांश समय थोड़े अजीब होते हैं।

यह बहुत सीधा और स्पष्ट है, लेकिन क्या होगा अगर मैं अनुप्रयोगों के बजाय ज्यादातर पुस्तकालयों (गिटहब पर खुला स्रोत) लिख रहा हूं?

मैं बहुत सारे पुस्तकालयों और स्थितियों का नाम रख सकता हूं, जहां

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

और मैंने वास्तव में इनका नामकरण तब तक शुरू कर दिया जब तक कि प्रश्न बहुत लंबा नहीं हो गया और मैंने उन्हें हटाने का फैसला किया।

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

चूंकि बड़े खुले स्रोत पुस्तकालय एक नई चीज नहीं हैं, इसलिए वस्तु-उन्मुख भाषाओं के साथ ऐसी परियोजनाओं में दृश्यता को संभालने का सबसे आम तरीका क्या है?



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

2
मेरी बात इस बारे में नहीं है लेकिन खुले स्रोत के बारे में आपके संदर्भ में इस संदर्भ में कोई मतलब नहीं है। मैं सोच सकता हूं कि कुछ मामलों में सख्त सिद्धांतों से विचलन की जरूरत कैसे विचलन को सही ठहरा सकती है (जिसे तकनीकी-ऋण के रूप में भी जाना जाता है ) लेकिन इस परिप्रेक्ष्य से यह कोई फर्क नहीं पड़ता कि कोड बंद हुआ या खुला स्रोत। या अधिक सटीक रूप से यह आपके द्वारा यहां कल्पना की गई विपरीत दिशा में मायने रखता है क्योंकि कोड खुला स्रोत होने के कारण ये जरूरतें बंद होने की तुलना में कम दबाव बना सकती हैं क्योंकि यह इनको संबोधित करने के लिए अतिरिक्त विकल्प प्रदान करता है
gnat

1
@piegames: मैं पूरी तरह से यहाँ gnat करने के लिए सहमत हूं, आपके द्वारा छीनी गई समस्याएं बंद स्रोत के कामों में होने की अधिक संभावना है - यदि यह एक अनुमेय लाइसेंस के साथ एक ओएस है, यदि अनुचर किसी परिवर्तन के अनुरोध को अनदेखा करते हैं, तो एक व्यक्ति के लिए यूबीबी का उपयोग कर सकता है और यदि आवश्यक हो, तो दृश्यता को अपने आप से बदल दें।
डॉक ब्राउन

1
@ डुप्सूएम: मैं आपके सवाल को नहीं समझता। "जावा" एक भाषा है, एक परिवाद नहीं। और अगर "आपके छोटे खुले स्रोत पुस्तकालय" में बहुत सख्त दृश्यता है, तो बाद में दृश्यता का विस्तार सामान्य रूप से पीछे की संगतता को नहीं तोड़ता है। केवल दूसरा रास्ता गोल।
डॉक्टर ब्राउन

जवाबों:


15

दुर्भाग्यपूर्ण सच्चाई यह है कि कई पुस्तकालय लिखे गए हैं , डिज़ाइन नहीं किए गए हैं । यह दुखद है, क्योंकि पहले से थोड़ा सोचा सड़क से नीचे की समस्याओं को रोक सकता है।

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

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

यह वह जगह है जहां खुले-बंद सिद्धांत आता है: स्रोत कोड को संशोधित किए बिना पुस्तकालय को विस्तार के लिए खुला होना चाहिए। जो स्वाभाविक रूप से नहीं आता है। यह एक जानबूझकर डिजाइन लक्ष्य होना चाहिए। ऐसी तकनीकों का खजाना है जो यहां मदद कर सकती हैं, क्लासिक ओओपी डिज़ाइन पैटर्न उनमें से कुछ हैं। सामान्य तौर पर, हम उन हुक को निर्दिष्ट करते हैं जहां उपयोगकर्ता कोड सुरक्षित रूप से पुस्तकालय में प्लग कर सकते हैं और कार्यक्षमता जोड़ सकते हैं।

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

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

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


इसलिए मुझे एक्सटेंशन के लिए हुक जोड़ने की जरूरत है क्योंकि इसे सार्वजनिक करने के लिए / पर्याप्त नहीं है। और मुझे यह भी सोचने की ज़रूरत है कि बैकवर्ड संगतता के कारण परिवर्तन / नई एपीआई कब जारी करें। लेकिन विशेष में तरीकों की दृश्यता के बारे में क्या?
पाईगूम्स

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

8

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

OSS और बंद स्रोत के बीच अंतर यह है कि अधिकांश लोग कोड के चारों ओर एक समुदाय बनाने और विकसित करने की कोशिश कर रहे हैं ताकि यह पुस्तकालय को बनाए रखने वाले एक से अधिक लोगों के साथ हो। कहा कि, प्रबंधन उपकरण उपलब्ध हैं:

  • मेलिंग सूचियों में उपयोगकर्ता की जरूरतों और चीजों को लागू करने के तरीके पर चर्चा की गई है
  • ट्रैकिंग सिस्टम (JIRA या Git समस्याएँ, आदि) बग और सुविधा अनुरोध ट्रैक करते हैं
  • संस्करण नियंत्रण स्रोत कोड का प्रबंधन करता है।

परिपक्व परियोजनाओं में, आप जो देखेंगे, वह इन पंक्तियों के साथ है:

  1. कोई व्यक्ति पुस्तकालय के साथ कुछ करना चाहता है जिसे मूल रूप से करने के लिए डिज़ाइन नहीं किया गया था
  2. वे मुद्दे पर नज़र रखने के लिए एक टिकट जोड़ते हैं
  3. टीम मेलिंग सूची में या टिप्पणियों में समस्या पर चर्चा कर सकती है, और चर्चा में शामिल होने के लिए हमेशा अनुरोधकर्ता को आमंत्रित किया जाता है
  4. एपीआई परिवर्तन किसी कारण से स्वीकार या प्राथमिकता या अस्वीकार कर दिया जाता है

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

कोई एपीआई स्थिर नहीं है। हालाँकि यह विकास किसी न किसी रूप में होना ही है। तब तक सब कुछ बंद रखने के लिए जब तक चीजों को खोलने की एक प्रदर्शन की आवश्यकता नहीं होती है, आप एक छोटी गाड़ी या अस्थिर पुस्तकालय की प्रतिष्ठा प्राप्त करने से बचते हैं।


1
पूरी तरह से सहमत हैं, और मैंने तृतीय पक्ष के बंद-स्रोत कार्यों के साथ-साथ ओपन-सोर्स कामों के लिए आपके द्वारा अनुरोधित परिवर्तन अनुरोध प्रक्रिया का सफलतापूर्वक अभ्यास किया है।
डॉक ब्राउन

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

यह हमेशा बहुत काम आता है। लगभग हर परियोजना जो मैंने योगदान की है, उसके समान एक प्रक्रिया है। अपने अपाचे दिनों में हम कुछ दिनों के लिए चर्चा कर सकते हैं क्योंकि हम जो कुछ भी बनाते हैं उसके बारे में भावुक थे। हमें पता था कि बहुत सारे लोग पुस्तकालयों का उपयोग करने जा रहे हैं, इसलिए हमें उन चीजों पर चर्चा करनी चाहिए जैसे कि प्रस्तावित परिवर्तन एपीआई को तोड़ने जा रहा है, क्या प्रस्तावित विशेषता इसके लायक है, हमें कब करना चाहिए? आदि
बेरिन लोरिट्श

0

मैं अपनी प्रतिक्रिया फिर से दूंगा क्योंकि ऐसा लगता है कि यह कुछ लोगों के साथ एक तंत्रिका है।

क्लास प्रॉपर्टी / मेथड विजिबिलिटी का न तो सुरक्षा से कोई लेना-देना है और न ही स्रोत का खुलापन।

दृश्यता क्यों मौजूद है इसका कारण यह है कि वस्तुएं 4 विशिष्ट समस्याओं के लिए नाजुक हैं:

  1. संगामिति

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

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

  1. इंटरफ़ेस के पैर / स्ट्रीमलाइन उपयोग में स्वयं को शूट करने से रोकने में उपयोगकर्ताओं की सहायता करें। संक्षेप में, यह वस्तु के अपरिवर्तकों को नियंत्रित करने में आपकी मदद करता है।

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

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

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

  1. स्कोप प्रदूषण

कई वर्गों में बहुत अधिक राज्य और विधियां हैं और उनके माध्यम से स्क्रॉल करने के लिए अभिभूत होना आसान है; इनमें से कई विधियां सिर्फ दृश्य शोर हैं जैसे सहायक कार्य, स्थिति। चर और तरीकों को निजी बनाने से गुंजाइश प्रदूषण को कम करने में मदद मिलती है और उपयोगकर्ता के लिए उन सेवाओं को ढूंढना आसान हो जाता है जिनकी वे तलाश कर रहे हैं।

संक्षेप में, यह आपको कक्षा के बाहर के बजाय कक्षा के अंदर सहायक कार्यों से दूर होने देता है; बिना सेवाओं के एक समूह के साथ उपयोगकर्ता को विचलित किए बिना दृश्यता नियंत्रण के बिना, जिसे उपयोगकर्ता को कभी भी उपयोग नहीं करना चाहिए, इसलिए आप सहायक विधियों के एक समूह में विधियों को तोड़ने के साथ दूर हो सकते हैं (हालांकि यह अभी भी आपके दायरे को प्रदूषित करेगा, लेकिन उपयोगकर्ता नहीं)।

  1. निर्भरता से बंधा हुआ

एक अच्छी तरह से तैयार किया गया इंटरफ़ेस इसे आंतरिक डेटाबेस / विंडोज़ / इमेजिंग को छिपा सकता है जो कि इसके कार्य को करने के लिए निर्भर करता है, और यदि आप किसी अन्य डेटाबेस / अन्य विंडोिंग सिस्टम / अन्य इमेजिंग लाइब्रेरी में बदलना चाहते हैं, तो आप इंटरफ़ेस को समान और उपयोगकर्ताओं को रख सकते हैं ध्यान नहीं देंगे।

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


1
"कुछ भी छिपाने का कोई मतलब नहीं" - तो फिर भी एनकैप्सुलेशन के बारे में क्यों सोचते हैं? कई संदर्भों में प्रतिबिंब को विशेष विशेषाधिकार की आवश्यकता होती है।
फ्रैंक हिलमैन

आप एनकैप्सुलेशन के बारे में सोचते हैं क्योंकि यह आपके मॉड्यूल को विकसित करते समय आपको सांस लेने की जगह देता है, और दुरुपयोग की संभावना को कम करता है। उदाहरण के लिए, यदि आपके पास सीधे किसी वर्ग की आंतरिक स्थिति को संशोधित करने वाले 4 सूत्र हैं, तो यह आसानी से समस्या पैदा करेगा, जबकि चर को निजी बनाते हुए, उपयोगकर्ता को विश्व राज्य में हेरफेर करने के लिए सार्वजनिक तरीकों का उपयोग करने के लिए प्रोत्साहित करता है, जो मुद्दों को रोकने के लिए मॉनिटर / लॉक का उपयोग कर सकता है। । यह एनकैप्सुलेशन का एकमात्र वास्तविक लाभ है।
दिमित्री

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

ठीक है जो अधिक समझ में आता है, हालांकि सुरक्षा का उपयोग अभिगम नियंत्रण के माध्यम से किया जा सकता है यदि पर्यावरण इसका समर्थन करता है, और यह ओडिशा भाषा डिजाइन में मूल लक्ष्यों में से एक था। इसके अलावा, आप एनकैप्सुलेशन को बढ़ावा दे रहे हैं और कह रहे हैं कि एक ही समय में इसका उपयोग न करें; थोड़ा भ्रमित।
फ्रैंक हिलमैन

मेरा मतलब कभी इसका उपयोग नहीं करना था; मेरा मतलब था कि सुरक्षा के लिए इसका इस्तेमाल न करें; अपने उपयोगकर्ताओं के अनुभव को बेहतर बनाने और अपने आप को एक चिकनी विकास वातावरण देने के लिए इसे रणनीतिक रूप से उपयोग करें। मेरा कहना है कि इसका न तो सुरक्षा से कोई लेना-देना है और न ही स्रोत का खुलापन। ग्राहक पक्ष की वस्तुएं आत्मनिरीक्षण के लिए कमजोर होती हैं, और उन्हें उपयोगकर्ता प्रक्रिया स्थान से बाहर ले जाने से अनकैप्सुलेटेड चीजें समान रूप से अस्वीकार्य हो जाती हैं जितना कि समझाया जाता है।
दिमित्री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.