1. परिचय
C भाषा कई प्रोग्रामरों द्वारा इसके ऐतिहासिक पृष्ठभूमि और लो‑लेवल नियंत्रण के कारण पसंद की जाती है। हालांकि, C ऑब्जेक्ट‑ओरिएंटेड भाषा नहीं है। दूसरे शब्दों में, Java या C++ के विपरीत, C स्वाभाविक रूप से क्लास, इनहेरिटेंस या एन्कैप्सुलेशन जैसी ऑब्जेक्ट‑ओरिएंटेड सुविधाओं का समर्थन नहीं करता। फिर भी, C में ऑब्जेक्ट‑ओरिएंटेड प्रोग्रामिंग (OOP) अवधारणाओं की नकल करना और कुछ हद तक OOP कार्यक्षमता प्राप्त करना संभव है। इस लेख में हम बताएँगे कि आप C में ऑब्जेक्ट‑ओरिएंटेड प्रोग्रामिंग कैसे लागू कर सकते हैं, विशेष रूप से एन्कैप्सुलेशन, इनहेरिटेंस और पॉलीमॉर्फ़िज़्म के मुख्य सिद्धांतों पर ध्यान केंद्रित करते हुए।
2. ऑब्जेक्ट‑ओरिएंटेड प्रोग्रामिंग के मूल सिद्धांत
ऑब्जेक्ट‑ओरिएंटेड प्रोग्रामिंग (OOP) डेटा और उन विधियों (मेथड्स) को एक ही इकाई के रूप में प्रबंधित करने का लक्ष्य रखती है जो उस डेटा पर कार्य करती हैं। यह दृष्टिकोण प्रोग्राम की संरचना को स्पष्ट करता है और पुन: उपयोग तथा रखरखाव को बेहतर बनाता है। OOP के मुख्य सिद्धांत एन्कैप्सुलेशन, इनहेरिटेंस और पॉलीमॉर्फ़िज़्म हैं। यद्यपि C सीधे इन सुविधाओं का समर्थन नहीं करता, कुछ चतुराई से आप इन्हें समान रूप से लागू कर सकते हैं।
2.1 एन्कैप्सुलेशन
एन्कैप्सुलेशन का अर्थ है डेटा और उसके संचालन (मेथड्स) को एक इकाई में समूहित करना और बाहरी पहुँच को नियंत्रित करना। C में आप struct का उपयोग करके डेटा को समूहित कर सकते हैं। struct का कार्य क्लास के समान है, क्योंकि यह कई डेटा तत्वों को एक संरचना में मिलाता है।
typedef struct {
int age;
char name[50];
} Person;
इस struct में, Person डेटा टाइप उम्र और नाम दोनों जानकारी को एन्कैप्सुलेट करता है। इससे आप Person के उदाहरण बना सकते हैं और उन पर कार्य कर सकते हैं।
2.2 इनहेरिटेंस
C में मूलभूत इनहेरिटेंस सुविधा नहीं है, इसलिए आप क्लासों की तरह पेरेंट‑चाइल्ड संबंध नहीं बना सकते। हालांकि, एक struct को दूसरे struct के सदस्य के रूप में शामिल करके आप इनहेरिटेंस के समान तंत्र प्राप्त कर सकते हैं।
typedef struct {
int age;
} Parent;
typedef struct {
Parent parent;
int studentID;
} Child;
इस कोड में, Child struct में एक Parent struct शामिल है, जो एक प्रकार के pseudo‑inheritance को दर्शाता है।
2.3 पॉलीमॉर्फ़िज़्म
पॉलीमॉर्फ़िज़्म का अर्थ कि एक ही ऑपरेशन विभिन्न ऑब्जेक्ट प्रकारों के अनुसार अलग‑अलग व्यवहार करे। 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; // Set to add function
printf("%d", op(3, 4)); // Output: 7
op = multiply; // Switch to multiply function
printf("%d", op(3, 4)); // Output: 12
जैसा कि दिखाया गया है, आप एक ही फ़ंक्शन पॉइंटर का उपयोग करके विभिन्न ऑपरेशन्स कर सकते हैं।

3. C में क्लासेस को कैसे लागू करें
C में ऑब्जेक्ट‑ओरिएंटेड प्रोग्रामिंग लाने के लिए आपको क्लास की अवधारणा का सिमुलेशन करना होगा। यह struct और फ़ंक्शन पॉइंटर को मिलाकर क्लास‑समान संरचनाएँ बनाने से किया जाता है।
3.1 क्लासेस के रूप में स्ट्रक्ट्स का उपयोग
C में क्लासेस को लागू करने के लिए, डेटा और मेथड्स को एक साथ समूहित करने हेतु struct का उपयोग करें। मेथड्स को फ़ंक्शन के रूप में परिभाषित किया जाता है और struct के भीतर फ़ंक्शन पॉइंटर के माध्यम से प्रबंधित किया जाता है।
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)); // Output: 25
इस उदाहरण में, Person struct में setAge और getAge मेथड्स हैं, जो क्लास‑समान व्यवहार प्रदान करते हैं।
4. मेथड्स को लागू करना
C में OOP की मुख्य विशेषता “मेथड्स” को पुनः उत्पन्न करने के लिए, फ़ंक्शन पॉइंटर का उपयोग करें। इससे आप मेथड्स को struct के सदस्य के रूप में परिभाषित कर सकते हैं।
typedef struct {
int age;
void (*setAge)(struct Person*, int);
} Person;
void setAge(struct Person* p, int age) {
p->age = age;
}
5. सारांश और अनुप्रयोग
जबकि आप C में ऑब्जेक्ट‑ओरिएंटेड फीचर्स को लागू कर सकते हैं, यह याद रखें कि भाषा स्वयं मूल रूप से OOP को समर्थन नहीं देती। आपको कुछ रचनात्मकता की आवश्यकता होगी, स्ट्रक्ट्स, फ़ंक्शन पॉइंटर्स, और मेमोरी मैनेजमेंट का पूरा उपयोग करके क्लास और इनहेरिटेंस‑समतुल्य अवधारणाओं को शामिल करना होगा।



