मैंने इस विषय पर ध्यान दिया, लेकिन विकिपीडिया के अलावा मुझे कोई और उपयोगी दस्तावेज या लेख नहीं मिला।
क्या कोई मुझे सरल शब्दों में समझा सकता है कि इसका क्या अर्थ है या मुझे कुछ अच्छे और आसान दस्तावेज़ों को समझने के लिए संदर्भित करें?
मैंने इस विषय पर ध्यान दिया, लेकिन विकिपीडिया के अलावा मुझे कोई और उपयोगी दस्तावेज या लेख नहीं मिला।
क्या कोई मुझे सरल शब्दों में समझा सकता है कि इसका क्या अर्थ है या मुझे कुछ अच्छे और आसान दस्तावेज़ों को समझने के लिए संदर्भित करें?
जवाबों:
यह विशेष रूप से जावा के संदर्भ में कुछ भी मतलब नहीं है।
एक वर्ग अयोग्य बस एक संपत्ति है जो एक वर्ग के सभी उदाहरणों के लिए है, हमेशा, कोई फर्क नहीं पड़ता कि अन्य कोड क्या करता है।
उदाहरण के लिए,
class X {
final Y y = new Y();
}
एक्स के पास वर्ग अयोग्य है कि एक y
संपत्ति है और यह कभी नहीं है null
और इसका प्रकार का मूल्य है Y
।
class Counter {
private int x;
public int count() { return x++; }
}
दो महत्वपूर्ण आक्रमणकारियों को बनाए रखने में विफल रहता है
count
संभावित बहाव के कारण इसका नकारात्मक मान कभी नहीं लौटता है।count
पुख्ता तौर पर नीरस वृद्धि करने वाली कॉल हैं।संशोधित वर्ग उन दो आक्रमणकारियों को संरक्षित करता है।
class Counter {
private int x;
public synchronized int count() {
if (x == Integer.MAX_VALUE) { throw new IllegalStateException(); }
return x++;
}
}
लेकिन अपरिवर्तनीय को संरक्षित करने में विफल रहता है जो count
सामान्य रूप से हमेशा सफल होने के लिए कहता है (अनुपस्थित टीसीबी-उल्लंघन ) the क्योंकि count
एक अपवाद फेंक सकता है या यह ब्लॉक हो सकता है यदि कोई डेडलॉक धागा काउंटर के मॉनिटर का मालिक है।
कक्षाओं के साथ प्रत्येक भाषा कुछ वर्ग के आक्रमणकारियों को बनाए रखना आसान बनाती है, लेकिन दूसरों को नहीं। जावा कोई अपवाद नहीं है:
private
क्षेत्रों की रक्षा कर सकती हैं, इसलिए निजी डेटा पर भरोसा करने वाले आक्रमणकारियों को बनाए रखना आसान है।null
कई मायनों में मूल्यों को छलनी करने की अनुमति देता है, इसलिए इसे बनाए रखने के लिए कठिन है "एक वास्तविक मूल्य" अपरिवर्तनीय है।† - एक बाह्यता या TCB उल्लंघन एक घटना है जो एक सिस्टम डिजाइनर आशावादी मान लिया गया है नहीं होगा है।
आमतौर पर हम सिर्फ इस बात पर भरोसा करते हैं कि मूल हार्डवेयर विज्ञापन के रूप में काम करता है जब उन पर निर्मित उच्च-स्तरीय भाषाओं के गुणों के बारे में बात की जाती है, और हमारे तर्क जो आक्रमण करते हैं, वे इसकी संभावना को ध्यान में नहीं रखते हैं:
setAccessible
को संशोधित करने के लिए प्रतिबिंब का उपयोग नहीं करते हैं private
।कुछ प्रणालियों के लिए हमारे TCB में सिस्टम के कुछ भाग शामिल हो सकते हैं, इसलिए हम ऐसा नहीं मान सकते
लेकिन हम यह मान सकते हैं
एक उच्च-स्तरीय प्रणाली, आमतौर पर इसका टीसीबी जितना बड़ा होता है, लेकिन जितनी अधिक अविश्वसनीय चीजें आप अपने टीसीबी से बाहर निकल सकते हैं, उतनी ही संभावना है कि आपके आक्रमणकारियों को पकड़ना होगा, और आपका सिस्टम लंबे समय में अधिक विश्वसनीय होगा।
count
दो बार एक ही मूल्य नहीं देता है" वास्तव में एक वर्ग अयोग्य माना जाता है?
Invariant का अर्थ है कि जो कुछ भी परिवर्तन या जो भी इसका उपयोग करता है / बदल देता है, उसे अपनी शर्तों से चिपके रहना चाहिए। यह कहना है, एक वर्ग की संपत्ति हमेशा सार्वजनिक विधियों का उपयोग करके परिवर्तनों से गुजरने के बाद भी कुछ शर्त को पूरा या संतुष्ट करती है। तो, इस वर्ग के ग्राहक या उपयोगकर्ता को वर्ग और उसकी संपत्ति के बारे में सुनिश्चित किया जाता है।
उदाहरण के लिए,
वे ऐसे तथ्य हैं जो एक उदाहरण वर्ग के बारे में सही होने चाहिए। उदाहरण के लिए यदि किसी वर्ग की संपत्ति X है और अपरिवर्तनीय X हो सकती है तो X अधिक होना चाहिए। 0. मेरी जानकारी में, हमलावरों को बनाए रखने के लिए कोई बिल्ट-इन विधि नहीं है, आपको संपत्ति को निजी बनाना चाहिए और सुनिश्चित करना चाहिए कि आपके गेटर्स और बसने वाले लोगों की संपत्ति को लागू करें।
एनोटेशन उपलब्ध हैं जो प्रतिबिंब और इंटरसेप्टर का उपयोग करके गुणों की जांच कर सकते हैं। http://docs.oracle.com/javaee/7/api/javax/validation/constraints/package-summary.html