CodeGym /Java Blog /यादृच्छिक /जावा मध्ये एन्कॅप्सुलेशन
John Squirrels
पातळी 41
San Francisco

जावा मध्ये एन्कॅप्सुलेशन

यादृच्छिक या ग्रुपमध्ये प्रकाशित केले
हाय! आम्ही आजचा धडा Java मधील Encapsulation ला देऊ आणि गेटच्या बाहेर उदाहरणांसह सुरुवात करू:) येथे तुमच्याकडे एक सामान्य सोडा डिस्पेंसिंग मशीन आहे . मला तुमच्यासाठी एक प्रश्न आहे: ते कसे कार्य करते? तपशीलवार उत्तर देण्याचा प्रयत्न करा: सोडा कुठून येतो? अंतर्गत तापमान कसे राखले जाते? बर्फ कुठे साठवला जातो? कोणते सरबत घालायचे हे मशीनला कसे कळते? या प्रश्नांची उत्तरे कदाचित तुमच्याकडे नसतील. ठीक आहे, कदाचित प्रत्येकजण ही मशीन वापरत नाही. ते सध्या इतके लोकप्रिय नाहीत. आणखी एक उदाहरण करून पाहू. एखादी गोष्ट जी तुम्ही दररोज अनेकदा वापरता. अरे, मला एक कल्पना आहे! गुगल सर्च इंजिनएन्कॅप्सुलेशनची तत्त्वे - 2 कसे आहे ते सांगाकार्य करते तुम्ही एंटर केलेल्या शब्दांची माहिती नक्की कशी शोधते? हे परिणाम शीर्षस्थानी का आहेत आणि इतर नाहीत? तुम्ही जरी रोज गुगल वापरत असलो तरी तुम्हाला कदाचित माहीत नसेल. पण काही फरक पडत नाही. शेवटी, हे आपल्याला माहित असणे आवश्यक नाही. ते नेमके कसे कार्य करते याचा विचार न करता तुम्ही शोध इंजिन वापरू शकता. तुम्ही मशीनमधून सोडा कसा बनवला आहे हे जाणून घेतल्याशिवाय खरेदी करू शकता. अंतर्गत ज्वलन इंजिन कसे कार्य करते याचा शोध न घेता आणि हायस्कूल भौतिकशास्त्राची माहिती न घेता तुम्ही कार चालवू शकता. ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंगच्या मुख्य तत्त्वांपैकी हे सर्व शक्य आहे: एन्कॅप्सुलेशन. या विषयावरील विविध लेख वाचताना, तुम्हाला दोन व्यापक प्रोग्रामिंग संकल्पना आल्या असतील: एन्कॅप्सुलेशन आणि माहिती लपवणे. जसे घडते, वेगवेगळ्या लोकांना हा शब्द समजतो. encapsulation' म्हणजे भिन्न गोष्टी. आम्ही दोन्ही शब्दांचा उलगडा करू जेणेकरून तुम्हाला पूर्ण समज असेल. प्रोग्रामिंग मध्ये, मूळ अर्थencapsulation एका पॅकेजमध्ये ("कॅप्सूल") डेटासह कार्य करण्यासाठी डेटा आणि पद्धती एकत्र करत होते. Java मध्ये, encapsulating package हा वर्ग आहे . वर्गामध्ये डेटा (फील्ड) आणि त्या डेटासह कार्य करण्याच्या पद्धती दोन्ही असतात. एन्कॅप्सुलेशनची तत्त्वे - 3हे तुम्हाला स्पष्ट वाटू शकते, परंतु इतर प्रोग्रामिंग पॅराडाइम्समध्ये सर्वकाही वेगळ्या पद्धतीने मांडले जाते. उदाहरणार्थ, फंक्शनल प्रोग्रामिंगमध्ये, डेटाला डेटा ऑपरेशन्सपासून काटेकोरपणे वेगळे केले जाते. ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) मध्ये, प्रोग्राममध्ये कॅप्सूल (वर्ग) असतात ज्यात डेटा आणि डेटासह कार्य करण्यासाठी कार्ये दोन्ही असतात.

आता माहिती लपविण्याबद्दल बोलूया

ते कसे तयार केले जातात किंवा ते कसे कार्य करतात हे समजून घेतल्याशिवाय आम्ही सर्व प्रकारच्या जटिल यंत्रणा कशा वापरतो? हे सोपे आहे: त्यांच्या निर्मात्यांनी साधे आणि सोयीस्कर इंटरफेस प्रदान केले आहेत. सोडा मशीनवर, इंटरफेस म्हणजे समोरच्या पॅनेलवरील बटणे. एक बटण तुम्हाला कप आकार निवडू देते. तुम्ही दुसऱ्या बटणाने सिरप निवडा. एक तृतीयांश बर्फ जोडण्यासाठी जबाबदार आहे. आणि तुम्हाला एवढेच करायचे आहे. मशीन आत कसे दिसते हे महत्त्वाचे नाही. महत्त्वाची गोष्ट अशी आहे की हे डिझाइन केले आहे जेणेकरून वापरकर्त्याला तीन बटणे दाबून सोडा मिळेल. हीच गोष्ट कारला लागू होते. आत काय चालले आहे हे महत्त्वाचे नाही. महत्त्वाची गोष्ट म्हणजे जेव्हा तुम्ही उजवे पेडल दाबता तेव्हा कार पुढे सरकते आणि जेव्हा तुम्ही डावे पेडल दाबता तेव्हा कारचा वेग कमी होतो. माहिती लपवण्याचे हे सार आहे. सर्व कार्यक्रम' s 'innards' वापरकर्त्यापासून लपलेले आहेत. अशी माहिती वापरकर्त्यासाठी अनावश्यक किंवा अनावश्यक आहे. वापरकर्त्याला अंतिम परिणाम आवश्यक आहे, अंतर्गत प्रक्रिया नाही. उदाहरणार्थ, एक नजर टाकूयावाहन वर्ग:

public class Vehicle {

   public void gas() {

       /* Some complicated things happen inside a car.
       As a result, it moves forward */
   }

   public void brake() {

       /* Some complicated things happen inside a car.
       As a result, it slows down */
   }

   public static void main(String[] args) {

       Vehicle vehicle = new Vehicle();

       // How everything looks to the user

       // Press one pedal, the car moves
       vehicle.gas();

       // Press the other pedal, the car brakes
       vehicle.brake();
   }
}
अशा प्रकारे Java प्रोग्राममध्ये अंमलबजावणी लपविली जाते. वास्तविक जीवनाप्रमाणेच: वापरकर्त्यास इंटरफेस (पद्धती) प्रदान केला जातो. एखाद्या प्रोग्राममध्ये, तुम्हाला एखादी कृती करण्यासाठी कारची आवश्यकता असल्यास, तुम्ही फक्त इच्छित पद्धत कॉल करा. या पद्धतींमध्ये काय होते ते अनावश्यक आहे. महत्त्वाचे म्हणजे सर्वकाही जसे पाहिजे तसे कार्य करते. येथे आम्ही अंमलबजावणी लपविण्याबद्दल बोलत आहोत. Java मध्ये डेटा लपविण्याची सुविधा देखील आहे. आम्ही गेटर्स आणि सेटर बद्दलच्या धड्यात याबद्दल लिहिले , परंतु स्मरणपत्र दुखावणार नाही. उदाहरणार्थ, आमच्याकडे मांजर वर्ग आहे:

public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }


}
कदाचित तुम्हाला मागील धड्यातून आठवत असेल की या वर्गात काय समस्या आहे? नसेल तर आठवूया. समस्या अशी आहे की त्याचा डेटा (फील्ड) प्रत्येकासाठी खुला आहे. दुसरा प्रोग्रामर 0 आणि -1000 वर्षे वयाची एक निनावी मांजर सहजपणे तयार करू शकतो:

public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
या परिस्थितीत, तुमचा एखादा सहकारी अवैध अवस्थेसह वस्तू तयार करत आहे की नाही याचा तुम्ही काळजीपूर्वक मागोवा घेऊ शकता, परंतु या अवैध वस्तू तयार करण्याची शक्यता देखील दूर करणे अधिक चांगले होईल. एन्कॅप्सुलेशनची तत्त्वे - 4आम्ही याच्या मदतीने डेटा लपवणे साध्य करतो:
  1. ऍक्सेस मॉडिफायर्स ( खाजगी, संरक्षित, पॅकेज डीफॉल्ट );
  2. गेटर्स आणि सेटर्स.
कोणीतरी मांजरीला नकारात्मक वय देण्याचा प्रयत्न करत आहे का हे तपासण्यासाठी आम्ही त्यांचा वापर करतो. आम्ही आधी म्हटल्याप्रमाणे, encapsulation वरील विविध लेखांचे लेखक प्रत्यक्षात encapsulation (डेटा आणि पद्धती एकत्र करणे) किंवा माहिती लपवणे किंवा दोन्हीचा संदर्भ देत आहेत. Java मध्ये दोन्ही यंत्रणा आहेत (इतर OOP भाषांमध्ये हे आवश्यक नाही), त्यामुळे शेवटचा पर्याय सर्वात योग्य आहे.

Encapsulation आम्हाला अनेक महत्वाचे फायदे देते:

  1. ऑब्जेक्टच्या योग्य स्थितीचे निरीक्षण करणे. आम्ही वरील उदाहरणे दिली आहेत: सेटर आणि खाजगी सुधारकांना धन्यवाद, आम्ही आमचा कार्यक्रम मांजरींविरूद्ध 0 च्या वजनासह सुरक्षित केला आहे.

  2. वापरकर्ता अनुकूल इंटरफेस. आम्ही वापरकर्त्याच्या समोर फक्त पद्धती सोडतो. परिणाम मिळविण्यासाठी वापरकर्त्याने त्यांना फक्त कॉल करणे आवश्यक आहे. आणि ते कसे कार्य करतात याचा तपशील शोधण्याची काहीही गरज नाही.

  3. कोड बदल वापरकर्त्यांना प्रभावित करत नाहीत. आम्ही पद्धतींमध्ये सर्व बदल करतो. याचा वापरकर्त्यांवर परिणाम होत नाही: त्यांनी गॅस लागू करण्यासाठी vehicle.gas() लिहिले आणि तेच ते करत राहतील. आम्ही गॅस() पद्धतीमध्ये काहीतरी बदलले हे तथ्य अदृश्य राहते: पूर्वीप्रमाणे, त्यांना फक्त आवश्यक परिणाम मिळतात.
टिप्पण्या
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION