में डेटा encapsulation मैंने पूरे Swift book पढ़ा है, और सभी WWDC videos (जिसमें से मैं दिल से अनुशंसा करता हूं) देखता हूं। एक चीज जिसे मैं चिंतित करता हूं वह डेटा encapsulation है।स्विफ्ट
class Stack<T>
{
var items : T[] = []
func push(newItem: T) {
items.insert(newItem, atIndex: 0)
}
func pop() -> T? {
if items.count == 0 {
return nil;
}
return items.removeAtIndex(0);
}
}
इस वर्ग के एक ढेर को लागू करता है, और किसी सरणी का उपयोग कर इसे लागू करता है:
निम्नलिखित (पूरी तरह से काल्पनिक) उदाहरण पर विचार करें। समस्या यह है कि items
(स्विफ्ट में सभी गुणों की तरह) सार्वजनिक है, इसलिए किसी को भी सार्वजनिक एपीआई से अलग पहुंचने (या यहां तक कि उत्परिवर्तन) से किसी को भी रोक नहीं रहा है। एक curmudgeonly पुराने सी ++ लड़के के रूप में, यह मुझे बहुत अजीब बनाता है।
मैं लोगों को एक्सेस संशोधक की कमी को लेकर चिंतित हूं, और जब मैं मानता हूं कि वे सीधे इस मुद्दे को संबोधित करेंगे (और मुझे अफवाहें सुनाई देती हैं कि उन्हें जल्द ही लागू किया जा सकता है), मुझे आश्चर्य है कि डेटा छिपाने के लिए कुछ रणनीतियां क्या होंगी उनकी अनुपस्थिति में।
क्या मुझे कुछ याद आया है, या क्या यह भाषा में बस एक चूक है?
संभावित डुप्लिकेट: - प्रोटोकॉल http://stackoverflow.com/q/24003918/1639670 – nathan
एक वास्तविक आधे रास्ते डेटा hidding के कुछ प्रकार करने के लिए नहीं है। बस अपनी कक्षा को अपने प्रोटोकॉल के अनुरूप सभी कार्यों और सामानों के अनुरूप बनाएं जिन्हें आप बाहरी दुनिया में दिखाना चाहते हैं और कक्षा के बजाय इसे पास करना चाहते हैं। जैसा कि मैंने कहा कि यह प्रतिस्थापन नहीं है, लेकिन दृश्यता संशोधक तक बाहर काम करेगा। यह भी एक अच्छा डिजाइन पैटर्न है - निर्भरता इंजेक्शन –
"इसलिए किसी को भी सार्वजनिक एपीआई से अलग पहुंचने (या यहां तक कि उत्परिवर्तन) से कुछ भी नहीं रोक रहा है" - एक "curmudgeonly पुराना सी ++ लड़का" होने के अलावा :-) आप क्या नुकसान पहुंचाते हैं ऐसा लगता है कि अगर आप जबरन लोगों को अपने कोड का उपयोग करने से जरूरी नहीं रोकते हैं तो वे क्या करेंगे? उदाहरण के लिए, पाइथन ने कहा है, "हम यहां सभी वयस्क हैं।" सार्वजनिक/निजी दस्तावेज और सम्मेलन पर आधारित है। अगर कोई कक्षा में आंतरिक, कैविट एम्प्टर के साथ कुछ बेकार करना चाहता है। कोई भी नाटक करता है कि वे अनंत काल के लिए जान सकते हैं कि किसी भी व्यक्ति के पास आंतरिक वस्तु तक पहुंचने का कोई अच्छा कारण नहीं होगा। – alcalde