1. परिचय
C भाषा आफ्नो ऐतिहासिक पृष्ठभूमि र कम स्तरको नियन्त्रण क्षमताका कारण धेरै प्रोग्रामरहरूले प्रयोग गर्छन्। तर, C भाषा ‘वस्तु-उन्मुख भाषा’ होइन। अर्थात, Java वा C++ जस्तै भाषा आफैँ वस्तु-उन्मुख सुविधाहरू (क्लास, उत्तराधिकार, क्याप्सुलेशन आदि) समर्थन गर्दैन। तर, C भाषामा पनि वस्तु-उन्मुख प्रोग्रामिङको अवधारणा अनुकरण गरेर केही हदसम्म कार्यक्षमता हासिल गर्न सकिन्छ। यस लेखमा, C भाषामा कसरी वस्तु-उन्मुख प्रोग्रामिङ लागू गर्न सकिन्छ भन्ने बारेमा, क्याप्सुलेशन, उत्तराधिकार, बहुरूपता जस्ता मूल अवधारणाहरू क्रमशः व्याख्या गर्नेछौं।
2. वस्तु-उन्मुखको मूल अवधारणा
वस्तु-उन्मुख प्रोग्रामिङ (OOP) ले डेटा र त्यसको सञ्चालन विधिलाई एकीकृत गरी व्यवस्थापन गर्ने लक्ष्य राख्दछ। यसले कार्यक्रमको संरचना स्पष्ट बनाउँछ, पुन: प्रयोगयोग्यता र मर्मतयोग्यता सुधार्छ। वस्तु-उन्मुखका मुख्य अवधारणाहरूमा क्याप्सुलेसन、इनहेरिटेन्स、र बहुरूपता समावेश छन्। C भाषा यसलाई प्रत्यक्ष रूपमा समर्थन गर्दैन, तर उपायको आधारमा नक्कली रूपमा पुन: निर्माण गर्न सकिन्छ।
2.1 क्याप्सुलेसन
क्याप्सुलेसन भनेको डेटा र त्यसको सञ्चालन (मेथड) लाई एक इकाइमा समेटी, बाह्यबाटको पहुँचलाई नियन्त्रण गर्ने हो। C भाषामा, संरचना प्रयोग गरेर डेटा समेट्न सकिन्छ। संरचना वर्ग जस्तै बहु डेटा एकै ठाउँमा समेट्ने भूमिका खेल्दछ।
typedef struct {
int age;
char name[50];
} Person;
यो संरचनामा, Person
नामको डेटा प्रकारमा उमेर र नामको जानकारी क्याप्सुलेसन गरिएको छ। यसले Person
लाई इन्स्ट्यान्सिएट गरी, सञ्चालन गर्न सम्भव बनाउँछ।
2.2 इनहेरिटेन्स
C भाषामा इनहेरिटेन्स भन्ने अवधारणा नहुनुका कारण, वर्ग जस्तै अभिभावक‑शिशु सम्बन्ध बनाउन सकिँदैन। तर, संरचना प्रयोग गरी, एउटा संरचनाको सदस्यको रूपमा अर्को संरचना समावेश गरेर, इनहेरिटेन्स नजिकको प्रणाली कार्यान्वयन गर्न सकिन्छ।
typedef struct {
int age;
} Parent;
typedef struct {
Parent parent;
int studentID;
} Child;
यो कोडमा, Child
संरचना Parent
संरचनालाई समेट्ने रूपले, नक्कली इनहेरिटेन्सलाई दर्शाइन्छ।
2.3 बहुरूपता (Polymorphism)
बहुरूपता (Polymorphism) भनेको एउटै सञ्चालनले विभिन्न प्रकारका वस्तुहरूमा विभिन्न व्यवहार देखाउने क्षमतालाई जनाउँछ। C भाषामा, यो अवधारणा कार्य‑प्वाइन्टर प्रयोग गरेर कार्यान्वयन गर्न सकिन्छ। कार्य‑प्वाइन्टर भनेको कार्यको ठेगाना राख्ने चल हो, जसले विभिन्न कार्यहरूलाई गतिशील रूपमा कल गर्न सम्भव बनाउँछ।
typedef int (*OperationFunc)(int, int);
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
OperationFunc op = add; // add function लाई प्वाइन्टरको रूपमा सेट गर्नुहोस्
printf("%d", op(3, 4)); // परिणाम: 7
op = multiply; // multiply function मा स्विच गर्नुहोस्
printf("%d", op(3, 4)); // परिणाम: 12
यसरी, एउटै कार्य‑प्वाइन्टर प्रयोग गरी विभिन्न प्रक्रिया सञ्चालन गर्न सकिन्छ।

3. सी भाषामा वर्ग कार्यान्वयन गर्ने तरिका
सी भाषा मा वस्तु‑उन्मुख प्रोग्रामिङलाई कार्यान्वयन गर्न, वर्गको अवधारणा लाई नक्कली रूपमा सिर्जना गर्न आवश्यक छ। त्यसका लागि, संरचना र कार्य‑सङ्केतकलाई संयोजन गरेर वर्गजस्तै संरचना बनाइन्छ।
3.1 संरचना लाई वर्गको रूपमा प्रयोग
सी भाषामा वर्ग कार्यान्वयन गर्न, संरचना प्रयोग गरी, डेटा र मेथडलाई वर्गजस्तै समेटिन्छ। मेथडहरू कार्यको रूपमा परिभाषित गरिन्छ, र संरचना भित्र कार्य‑सङ्केतक प्रयोग गरेर व्यवस्थापन गरिन्छ।
typedef struct {
int age;
void (*setAge)(struct Person*, int);
int (*getAge)(struct Person*);
} Person;
void setAge(struct Person* p, int age) {
p->age = age;
}
int getAge(struct Person* p) {
return p->age;
}
Person person = {0, setAge, getAge};
person.setAge(&person, 25);
printf("Age: %d", person.getAge(&person)); // परिणाम: 25
यो कोडमा, Person
संरचना सँग setAge
र getAge
मेथडहरू छन्, जसले वर्गजस्तै कार्य गर्दछ।
4. मेथडको कार्यान्वयन
Object-oriented को विशेषता होइने “method” लाई C भाषा मा पुन: निर्माण गर्नको लागि, function pointer प्रयोग गर्नुहोस्। यसले struct को member variable को रूपमा method परिभाषित गर्न सम्भव बनाउँछ।
typedef struct {
int age;
void (*setAge)(struct Person*, int);
} Person;
void setAge(struct Person* p, int age) {
p->age = age;
}
5. सारांश र अनुप्रयोग
C भाषा मा वस्तु‑उन्मुख प्रोग्रामिङ कार्यान्वयन सम्भव छ, तर भाषा आफैँले समर्थन नगरेको कारण केही सृजनात्मक उपाय आवश्यक पर्छ। संरचना, कार्य संकेतक, स्मृति व्यवस्थापनको उपयोग गरेर, नक्कली रूपमा वर्ग र उत्तराधिकारको अवधारणा समावेश गर्न सकिन्छ।