क्लास (वस्तु-उन्मुख प्रोग्रामिङ)
वस्तु-उन्मुख प्रोग्रामिङ (OOP) ले डाटा र त्यो डाटासँग सम्बन्धित कार्यहरूलाई वस्तु (object) भनिने एकाइमा जोड्छ। तपाईंले वास्तविक संसारका कुराहरू — मान्छे, पुस्तक, बैंक खाता — जसरी प्रोग्राम गर्न सक्नुहुन्छ।
१. OOP के हो?
सोच्नुहोस्, तपाईंको प्रोग्राममा एउटा बैंक खाता चलाउनु पर्छ भने। बैंक खातामा हुन्छ: सङ्ख्या, नाम, सन्तुलन (डाटा)। र यससँग गर्न सकिने काम: पैसा जम्मा गर्ने, निकाल्ने, सन्तुलन हेर्ने (व्यवहार)।
OOP मा हामी डाटा र व्यवहारलाई एउटै वस्तु मा जोड्छौं — छुट्टै-छुट्टै भ्यारिएबल र कार्यहरूमा राखेर "जोड्नै बिर्सने" वा गल्ती गर्ने अवसर हुँदैन।
खाता_सङ्ख्या, नाम, सन्तुलनजम्मा(), निकाल(), जाँच()२. क्लास र वस्तु
क्लास भनेको नक्सा/ब्लूप्रिन्ट हो; वस्तु भनेको त्यही नक्साबाट बनेको वास्तविक चीज। एउटै क्लासबाट कति पनि वस्तु बनाउन सकिन्छ, हरेकको आफ्नै डाटा हुन्छ।
क्लास प्रकार कीवर्डले घोषणा हुन्छ र अन्त्य ले समाप्त:
प्रकार मानिस
पाठ नाम
पूर्णाङ्क उमेर
अन्त्य
वस्तु नयाँ ले बनाइन्छ:
राख राम = नयाँ मानिस
राख सीता = नयाँ मानिस # एउटै क्लास, फरक-फरक वस्तु
३. फिल्डहरू (गुण/अवस्था)
फिल्ड भनेको वस्तुभित्रको चर हो — क्लासको सुरुमा प्रकारसहित घोषणा गरिन्छ। हरेक वस्तुको आफ्नै फिल्ड मान हुन्छ:
प्रकार मानिस
पाठ नाम
पूर्णाङ्क उमेर
अन्त्य
राख राम = नयाँ मानिस
राम.नाम = "राम" # फिल्डमा मान राख्ने
राम.उमेर = २५
लेख राम.नाम # राम
लेख राम.उमेर # २५
फिल्डमा सीधै पढ्न र लेख्न सकिन्छ:
राख सीता = नयाँ मानिस
सीता.नाम = "सीता"
सीता.उमेर = २२
राम.उमेर = २६ # रामको मात्र परिवर्तन
लेख राम.उमेर # २६ — सीता अपरिवर्तित
४. कन्स्ट्रक्टर (निर्माण)
वस्तु बनाउनेबित्तिकै फिल्डहरू सुरु गर्न निर्माण(...) कन्स्ट्रक्टर प्रयोग गरिन्छ — नयाँ ले बनाउँदा स्वचालित रूपमा चल्छ:
प्रकार मानिस
पाठ नाम
पूर्णाङ्क उमेर
निर्माण(पाठ नाम, पूर्णाङ्क उमेर)
यो.नाम = नाम
यो.उमेर = उमेर
अन्त्य
अन्त्य
राख राम = नयाँ मानिस("राम", २५) # निर्माण स्वचालित
लेख राम.नाम # राम
कन्स्ट्रक्टरमा सीधै प्रशोधन पनि गर्न सकिन्छ:
प्रकार खाता
पाठ नाम
दशमलव सन्तुलन
निर्माण(पाठ नाम, दशमलव प्रारम्भिक)
यो.नाम = नाम
यो.सन्तुलन = प्रारम्भिक
लेख "खाता खुल्यो: " + नाम
अन्त्य
अन्त्य
राख ख = नयाँ खाता("राम", १०००.०)
# आउटपुट: खाता खुल्यो: राम
५. मेथडहरू (व्यवहार)
मेथड भनेको क्लासभित्रको कार्य हो — वस्तुको डाटासँग काम गर्छ। फिल्डमा यो. ले पहुँच गरिन्छ:
प्रकार मानिस
पाठ नाम
पूर्णाङ्क उमेर
निर्माण(पाठ नाम, पूर्णाङ्क उमेर)
यो.नाम = नाम
यो.उमेर = उमेर
अन्त्य
कार्य परिचय()
लेख "मेरो नाम " + यो.नाम + " हो र म " + यो.उमेर + " वर्षको हुँ"
अन्त्य
कार्य जन्मदिन() -> पूर्णाङ्क
यो.उमेर = यो.उमेर + १
फर्काऊ यो.उमेर
अन्त्य
अन्त्य
राख राम = नयाँ मानिस("राम", २५)
राम.परिचय() # मेरो नाम राम हो र म २५ वर्षको हुँ
लेख राम.जन्मदिन() # २६
मेथडले फिल्ड बदल्न सक्छ (माथिको जन्मदिन), गणना गर्न सक्छ, र अन्य मेथड कल गर्न सक्छ। मेथडको सन्दर्भ यो. बिना पनि चल्छ, तर स्पष्टताका लागि यो. प्रयोग गर्नुहोस्।
६. यो (this)
यो ले वर्तमान वस्तु जनाउँछ। प्यारामिटर र फिल्डको नाम उस्तै भएको बेला फरक गर्न अपरिहार्य हुन्छ:
निर्माण(पाठ नाम, पूर्णाङ्क उमेर)
यो.नाम = नाम # यो.नाम = फिल्ड; नाम = प्यारामिटर
यो.उमेर = उमेर
अन्त्य
यो. ले अर्को मेथदमा पनि पहुँच गर्न सकिन्छ:
कार्य संक्षिप्त() -> पाठ
फर्काऊ यो.नाम + " (" + यो.उमेर + ")"
अन्त्य
७. साझा कार्य (static मेथड)
सबै मेथडहरू वस्तुसँग चल्ने हुँदैनन् — केही काम वस्तु बनाउनु नपर्ने हुन्छ। साझा कार्य ले क्लासबाटै कल गर्न सकिने मेथड बनाउँछ, उदाहरण/वस्तु चाहिँदैन:
प्रकार उपकरण
साझा कार्य क्षेत्रफल(अर्धव्यास)
फर्काऊ ३.१४१५९ * अर्धव्यास * अर्धव्यास
अन्त्य
साझा कार्य मद्दत()
लेख "अर्धव्यास दिनुहोस् र क्षेत्रफल पाउनुहोस्"
अन्त्य
अन्त्य
उपकरण.मद्दत() # क्लासबाटै कल
लेख उपकरण.क्षेत्रफल(२) # १२.५६६३६
साझा कार्य मा यो. प्रयोग गर्न मिल्दैन — किनभने त्यहाँ कुनै वस्तु छैन। यस्ता मेथडहरू सामान्य उपयोगी कार्य (helper) का लागि हो।
८. पहुँच नियन्त्रण (Encapsulation)
पहुँच नियन्त्रणले कसले के देख्न/फेर्न पाउँछ नियन्त्रण गर्छ। यसलाई encapsulation पनि भनिन्छ — वस्तुको भित्री डाटा लुकाएर मेथडबाट मात्र फेर्न दिने। नेपालीमा चार मोडिफायर छन्:
| मोडिफायर | English | पहुँच |
|---|---|---|
सार्वजनिक | public | जतासुकैबाट |
निजी | private | क्लासभित्र मात्र |
सुरक्षित | protected | क्लासभित्र र उत्तराधिकारीहरूमा |
आन्तरिक | internal | क्लासभित्र र सोही मोड्युलभित्र |
उदाहरण — डाटालाई निजी राखेर नियन्त्रित मेथडबाट मात्र फेर्ने:
प्रकार खाता
निजी दशमलव सन्तुलन
निर्माण(दशमलव प्रारम्भिक)
यो.सन्तुलन = प्रारम्भिक
अन्त्य
कार्य जम्मा(दशमलव रकम)
यो.सन्तुलन = यो.सन्तुलन + रकम
अन्त्य
कार्य जाँच() -> दशमलव
फर्काऊ यो.सन्तुलन
अन्त्य
अन्त्य
राख ख = नयाँ खाता(१०००.०)
ख.जम्मा(५००.०)
लेख ख.जाँच() # १५००.०
# ख.सन्तुलन = ० # त्रुटि — निजी फिल्ड बाहिरबाट फेर्न मिल्दैन
मोडिफायर नलेखेको फिल्ड/मेथड — डिफल्ट रूपमा सार्वजनिक जस्तै व्यवहार हुन्छ। सार्वजनिक लेख्नु स्पष्टता बढाउने तरिका हो।
९. इनहेरिटेन्स र कम्पोजिसन
इनहेरिटेन्स (उत्तराधिकार) — अर्को क्लासका गुण लिने। पार्सरले प्रकार बाल : आमा रूप स्वीकार गर्छ, तर उत्तराधिकार हाल लागू भइसकेको छैन:
प्रकार बाल : आमा पार्सरले पार्स गर्छ तर हाल आमा क्लासका गुणहरू बालमा आउँदैनन्। इनहेरिटेन्स योजना (planned) हो।
त्यसबेलासम्म कम्पोजिसन प्रयोग गर्नुहोस् — अर्को क्लासको वस्तुलाई फिल्डको रूपमा राख्ने। प्रायः कम्पोजिसन उत्तिकै शक्तिशाली र सरल हुन्छ:
प्रकार ठेगाना
पाठ शहर
पाठ जिल्ला
निर्माण(पाठ शहर, पाठ जिल्ला)
यो.शहर = शहर
यो.जिल्ला = जिल्ला
अन्त्य
अन्त्य
प्रकार मानिस
पाठ नाम
ठेगाना वास # कम्पोजिसन — अर्को क्लासको वस्तु
निर्माण(पाठ नाम, पाठ शहर, पाठ जिल्ला)
यो.नाम = नाम
यो.वास = नयाँ ठेगाना(शहर, जिल्ला)
अन्त्य
कार्य ठेगाना_लेख()
लेख यो.नाम + " बस्छ: " + यो.वास.शहर + ", " + यो.वास.जिल्ला
अन्त्य
अन्त्य
राख राम = नयाँ मानिस("राम", "काठमाडौं", "काठमाडौं")
राम.ठेगाना_लेख() # राम बस्छ: काठमाडौं, काठमाडौं
१०. OOP का चार सिद्धान्त
OOP चार मुख्य सिद्धान्तमा उभिएको छ। नेपालीमा अहिलेसम्मको समर्थन यसप्रकार छ:
निजी जस्ता मोडिफायरले पहुँच नियन्त्रण। ✅ समर्थित+ सङ्ख्या र पाठ दुवैमा)। आंशिक रूपमा भाषाले नै ह्यान्डल गर्छ।साझा कार्य, मानक पुस्तकालय। ✅ अभ्यासद्वारा समर्थितअहिले नेपालीमा encapsulation पूर्ण रूपमा प्रयोग गर्न सकिन्छ; inheritance आउँदा संस्करणका लागि योजनामा छ। त्यसबेलासम्म कम्पोजिसनले धेरै उद्देश्य पूरा गर्छ।
११. पूरा उदाहरण
यहाँ OOP का धेरै तत्व एकै ठाउँमा — क्लास, कन्स्ट्रक्टर, मेथड, यो, साझा कार्य, कम्पोजिसन र सूचीको लुप:
प्रकार पुस्तक
पाठ शीर्षक
पाठ लेखक
दशमलव मूल्य
निर्माण(पाठ शीर्षक, पाठ लेखक, दशमलव मूल्य)
यो.शीर्षक = शीर्षक
यो.लेखक = लेखक
यो.मूल्य = मूल्य
अन्त्य
कार्य जानकारी() -> पाठ
फर्काऊ "«" + यो.शीर्षक + "» — " + यो.लेखक
अन्त्य
अन्त्य
प्रकार पसल
पाठ नाम
सूची पुस्तकहरू
निर्माण(पाठ नाम)
यो.नाम = नाम
यो.पुस्तकहरू = []
अन्त्य
कार्य जानकारी()
लेख "पसल: " + यो.नाम + " (" + सूची_लम्बाइ(यो.पुस्तकहरू) + " पुस्तक)"
अन्त्य
साझा कार्य छुट_मूल्य(दशमलव मूल्य, दशमलव प्रतिशत) -> दशमलव
फर्काऊ मूल्य * (१ - प्रतिशत / १००)
अन्त्य
अन्त्य
राख किताब = नयाँ पुस्तक("नेपाली कथा", "आशा", ३००.०)
लेख किताब.जानकारी()
लेख "छुट पछि: " + सङ्ख्या_पाठ(पसल.छुट_मूल्य(किताब.मूल्य, २०.०))
सूचीमा मान थप्ने नेटिभ (सूची_थप) अहिले योजनामा छ — हाल सूची सुरुमै मानसहित बनाउन सकिन्छ:
राख पुस्तकहरू = [
नयाँ पुस्तक("नेपाली कथा", "आशा", ३००.०),
नयाँ पुस्तक("गणित", "रमेश", २५०.०)
]
प्रत्येक क भित्र पुस्तकहरू
लेख क.जानकारी()
अन्त्य