1. परिचय

आम्हाला आजचा धडा एन्कॅप्युलेशनसाठी समर्पित करायचा आहे . सामान्य शब्दात काय आहे हे तुम्हाला आधीच माहित आहे.

एन्कॅप्सुलेशन

encapsulation चे फायदे काय आहेत? त्यापैकी बरेच काही आहेत, परंतु मी चार निवडू शकतो जे माझ्या मते, मुख्य आहेत:


2. वैध अंतर्गत स्थिती

प्रोग्राममध्ये, जेव्हा एखादी वस्तू इतर अनेक वर्गांशी संवाद साधते तेव्हा परिस्थिती उद्भवते. ऑब्जेक्टसह हे परस्परसंवाद ऑब्जेक्टमधील डेटा दूषित करू शकतात, ज्यामुळे ऑब्जेक्टला अपेक्षेप्रमाणे कार्य करणे अशक्य होते.

परिणामी, ऑब्जेक्टला त्याच्या अंतर्गत डेटामधील कोणत्याही बदलांचा मागोवा ठेवणे आवश्यक आहे किंवा अजून चांगले, बदल स्वतःच करणे आवश्यक आहे.

जर आम्हाला काही व्हेरिएबल इतर वर्गांद्वारे बदलायचे नसतील तर आम्ही ते खाजगी घोषित करतो. एकदा आम्ही ते केले की, फक्त त्याच्या स्वतःच्या वर्गाच्या पद्धतीच त्यात प्रवेश करू शकतात. जर आपल्याला व्हेरिएबल्स फक्त वाचण्यासाठी हवे असतील तर आपल्याला public getterसंबंधित व्हेरिएबल्ससाठी एक जोडणे आवश्यक आहे.

उदाहरणार्थ, समजा, प्रत्येकाला आमच्या संग्रहातील घटकांची संख्या जाणून घेता यावी अशी आमची इच्छा आहे, परंतु आमच्या परवानगीशिवाय त्यांनी संग्रह बदलू नये अशी आमची इच्छा आहे. मग आपण private int countव्हेरिएबल आणि public getCount()पद्धत घोषित करतो.

एनकॅप्सुलेशनचा योग्य वापर हे सुनिश्चित करतो की कोणताही वर्ग आमच्या वर्गाच्या अंतर्गत डेटामध्ये थेट प्रवेश करू शकत नाही, ज्यामुळे आमच्या नियंत्रणाबाहेरील कोणत्याही बदलांना प्रतिबंध होतो. हे बदल केवळ त्याच वर्गाच्या पद्धतींना कॉल करून शक्य आहेत ज्यात व्हेरिएबल्स बदलले जात आहेत.

असे गृहीत धरणे उत्तम आहे की इतर प्रोग्रामर नेहमी तुमचे वर्ग त्यांच्यासाठी सर्वात सोयीस्कर पद्धतीने वापरतील, तुमच्यासाठी (तुमच्या वर्गासाठी) सर्वात सुरक्षित मार्ग नाही. हे वर्तन दोन्ही दोषांचे स्त्रोत आहे तसेच त्यांना प्रतिबंधित करण्याचा प्रयत्न आहे.


3. पद्धत वितर्क प्रमाणित करणे

काहीवेळा आम्हाला आमच्या पद्धतींमध्ये दिलेले युक्तिवाद प्रमाणित करणे आवश्यक आहे. उदाहरणार्थ, आमच्याकडे एक वर्ग आहे जो एखाद्या व्यक्तीचे प्रतिनिधित्व करतो आणि तुम्हाला जन्मतारीख सेट करू देतो. प्रोग्रामचे तर्क आणि आमच्या वर्गाच्या तर्कानुसार ते अर्थपूर्ण आहे याची खात्री करण्यासाठी आम्ही सर्व इनपुट डेटा तपासला पाहिजे. उदाहरणार्थ, 13व्या महिन्यात किंवा 30 फेब्रुवारी रोजी जन्मतारीख नाकारणे इ.

कोणीतरी त्यांच्या जन्मतारीखासाठी 30 फेब्रुवारी का सूचित करेल? प्रथम, डेटा प्रविष्ट करताना ही एक वापरकर्ता त्रुटी असू शकते. दुसरे म्हणजे, एखादा प्रोग्राम घड्याळाच्या काट्याप्रमाणे चालू होण्यापूर्वी त्यात अनेक त्रुटी असू शकतात. उदाहरणार्थ, खालील परिस्थिती शक्य आहे.

एक प्रोग्रामर एक प्रोग्राम लिहितो जो परवा ज्यांचा वाढदिवस आहे अशा लोकांना ओळखतो. उदाहरणार्थ, आज 3 मार्च आहे असे म्हणू या. प्रोग्राम महिन्याच्या वर्तमान दिवशी 2 क्रमांक जोडतो आणि 5 मार्च रोजी जन्मलेल्या प्रत्येकाला शोधतो. असे दिसते की सर्वकाही बरोबर आहे.

पण जेव्हा 30 मार्च येतो, तेव्हा प्रोग्राम कोणालाही सापडणार नाही, कारण कॅलेंडरमध्ये 32 मार्च नाही. जर आपण पद्धतींमध्ये दिलेला डेटा तपासला तर प्रोग्राममध्ये कमी त्रुटी आहेत.

लक्षात ठेवा जेव्हा आम्ही ArrayListत्याच्या कोडचा अभ्यास केला आणि त्याचे विश्लेषण केले? आम्ही पाहिले की आणि पद्धतींनी शून्यापेक्षा मोठे किंवा समान getआणि अॅरेच्या लांबीपेक्षा कमी आहे setकी नाही हे तपासले . index इतकेच काय, जर अनुक्रमणिका अॅरेच्या मर्यादेबाहेर पडली तर या पद्धती अपवाद करतात. हे इनपुट प्रमाणीकरणाचे उत्कृष्ट उदाहरण आहे.


4. कोड बदलताना त्रुटी कमी करणे

समजा, जेव्हा आपण एका मोठ्या प्रकल्पात सहभागी होतो तेव्हा आपण एक अतिशय उपयुक्त वर्ग लिहिला. प्रत्येकाला ते इतके आवडले की इतर प्रोग्रामर त्यांच्या कोडमध्ये शेकडो ठिकाणी ते वापरू लागले.

वर्ग इतका उपयुक्त होता की तुम्ही त्यात काही सुधारणा करण्याचे ठरवले. परंतु आपण वर्गातून कोणत्याही पद्धती काढून टाकल्यास, डझनभर लोकांचे कोड संकलित करणे थांबेल. त्यांना सर्वकाही पुन्हा लिहावे लागेल. आणि तुम्ही जितके जास्त बदल कराल, तितक्या जास्त चुका निर्माण कराल. तुम्ही अनेक असेंब्ली मोडाल आणि तुमचा द्वेष केला जाईल.

परंतु जेव्हा आम्ही खाजगी म्हणून घोषित केलेल्या पद्धती बदलतो, तेव्हा आम्हाला माहित आहे की या पद्धतींना कॉल करू शकणारा दुसरा वर्ग कुठेही नाही. आम्ही त्यांना पुन्हा लिहू शकतो, पॅरामीटर्सची संख्या आणि त्यांचे प्रकार बदलू शकतो आणि कोणताही आश्रित बाह्य कोड कार्य करत राहील. बरं, किमान ते संकलित करेल.


5. आपली वस्तू बाह्य वस्तूंशी कशी संवाद साधते हे आपण ठरवतो

आम्ही आमच्या ऑब्जेक्टसह केल्या जाऊ शकणार्‍या काही क्रिया प्रतिबंधित करू शकतो. उदाहरणार्थ, समजा एखादी वस्तू फक्त एकदाच इन्स्टंटेशन करायची आहे. जरी ते प्रकल्पात अनेक ठिकाणी तयार केले जाऊ शकते. आणि आपण हे एन्कॅप्सुलेशनमुळे करू शकतो.

एन्कॅप्सुलेशन 2

Encapsulation आम्हाला अतिरिक्त निर्बंध जोडू देते , जे अतिरिक्त फायद्यांमध्ये बदलले जाऊ शकते . उदाहरणार्थ, वर्ग एक अपरिवर्तनीयString ऑब्जेक्ट म्हणून लागू केला जातो . वर्गाची एखादी वस्तू त्याच्या निर्मितीच्या क्षणापासून त्याच्या मृत्यूच्या क्षणापर्यंत अपरिवर्तनीय असते. वर्गाच्या सर्व पद्धती ( , , ...), ज्या ऑब्जेक्टवर त्यांना कॉल केला जातो त्यामध्ये कोणतेही बदल न करता नवीन स्ट्रिंग परत करतात.StringStringremovesubstring

Encapsulation एक अतिशय मनोरंजक गोष्ट आहे.