सबसे पहले, ध्यान दें कि मैं एक सी ++ और पायथन हूं, जावा नहीं, इसलिए यह कुछ पूरी तरह से लागू नहीं हो सकता है। कृपया मुझे सही करें अगर मैं जावा में कक्षाएं कैसे काम करता हूं, इसके बारे में कुछ गलत धारणाएं हैं।
कक्षाएं मुख्य रूप से तब उपयोगी होती हैं जब वे त्वरित होती हैं। एक वर्ग जिसका कोई उदाहरण नहीं है वास्तव में वास्तव में एक महिमामंडित नामस्थान है। यदि आप अपनी सभी कक्षाओं का उपयोग इस तरह से करते हैं, तो वास्तव में, नामस्थान से नामस्थान पर चीजों को स्थानांतरित करने के लाभ महत्वहीन लग सकते हैं - कम से कम, आप प्रत्येक में कुछ निजी डेटा होने से जीतेंगे और इस तरह से चीजों को थोड़ा छोटा कर देंगे।
हालाँकि, यह वह जगह नहीं है जहाँ कक्षाएं चमकती हैं। String
कक्षा पर विचार करें : आपके पास char
सरणियों और कुछ स्थिर कार्यों का उपयोग करके सभी समान विशेषताएं हो सकती हैं । इस बिंदु पर, फ़ंक्शन आपको थोड़ी अतिरिक्त सुरक्षा और सिंटैक्टिक चीनी देते हैं। आप string.length()
इसके बजाय लिख सकते हैं length(char_array)
; यह बहुत बड़ी बात नहीं है, लेकिन बहुत से लोग अभी भी इसे पसंद करते हैं। इसके अलावा, आप जानते हैं कि अगर किसी ने आपको एक दिया String
, तो यह String
निर्माणकर्ता के साथ बनाया गया था और यह length
फ़ंक्शन के साथ काम करना चाहिए - यदि सरणी संस्करण कुछ वर्ण को संभाल नहीं सकता है, तो आपको इसे वहां डालने से रोकने का कोई तरीका नहीं है। ।
हालांकि यह अभी भी नहीं है। मुख्य बिंदु यह है कि कक्षाएं डेटा और फ़ंक्शंस को बंडल करती हैं जो उस पर काम करती हैं और दोनों को दूर करती हैं। जब आपके पास एक विधि होती है void f(Builder b)
जिसे आप जानते हैं कि आप एक हो रहे हैं Builder
, और आप उम्मीद कर सकते हैं कि यह कुछ व्यवहार का समर्थन करेगा। हालाँकि, आप डेटा या निष्पादित किए जा रहे कार्यों के बारे में कुछ नहीं जानते हैं - वास्तव में, दोनों के लिए परिभाषाएँ अभी तक नहीं लिखी जा सकती हैं क्योंकि आप लिखते हैं और संकलन करते हैं f
।
इस तरह समझने का पहला बिंदु यह है कि कक्षाएं यह सुनिश्चित करती हैं कि डेटा के आसपास से गुजरना सुविधाजनक हो, जबकि यह सुनिश्चित हो कि यह टूटा हुआ नहीं है। दूसरा बिंदु यह है कि किसी वस्तु का क्या डेटा और क्या कार्य (कार्यान्वयन) दोनों वस्तु के बारे में कुछ है, न कि कुछ जिसे आप केवल उसके प्रकार के बारे में बता सकते हैं।