क्लास

**क्लास** (Class) प्रोग्रामिंग भाषाओं में प्रयुक्त एक साँचा है जिसके प्रयोग से इस प्रकार के नए चर (या राशि, variable) बनाए जाते हैं। इनके नए (बनाए) चरों को प्रोग्रामिंग संदर्भों में अक्सर ऑब्जेक्ट (Object) कहते हैं। एक क्लास (और उससे बने ऑब्जेक्ट) के तहत कई चर (variable) तथा फ़ंक्शन (function, विधियाँ) हो सकते हैं। ये चर प्राइवेट (private), प्रोटेक्टेड (protected) या पब्लिक (public) हो सकते हैं। किसी एक क्लास के साँचे से एक दूसरे क्लास का निर्माण भी हो सकता है जो पहले क्लास से अधिक विवरण रख सके।

क्लास वस्तुतः कई variable और function का संग्रह है। इसी class साँचे का प्रयोग करके इतने ही variables तथा function बनाए जा सकते हैं (नीचे के भाग में देखें, कैसे?)। चूँकि क्लास के प्रयोग से इसी प्रकार के ऑब्जेक्ट बारंबार बनाए जा सकते हैं, इस प्रोग्रामिंग धारणा का प्रयोग ऐसी जगहों पर बारबार किया जाता है जहाँ एक साथ कई variable (और function) को define करना पड़ता है। उदाहरण-स्वरूप किसी तिथि को दिखाने के लिए तीन int का प्रयोग सुविधाजनक होता है - दिन, महीना और साल (int day, int month, int year)। अतः इनको एक क्लास के तहत पारिभाषित करने से बार-बार एक ही प्रकार की परिभाषा से बचा जा सकता है। Class Date {int day, month, year); Date d1, d2,d3 ...। इसी प्रकार क्लास के अंदर ऐसी विधियों (function) को रखना सुविधाजनक होता है जो उसी क्लास के आँकड़ों के ऊपर काम करे। जैसे कि, किसी तिथि का दिन निर्धारण, यानि वो तिथि सोमवार है या मंगलवार आदि, उपरोक्त क्लास के लिए एक उचित विधि हो सकती है जो क्लास के अंदर पारिभाषित की जाए।

क्लास की अवधारणा के परिणाम स्वरूप, प्रोग्रामरों को एक ही प्रकार के कोड को बारंबार लिखने से निजात मिली। विभिन्न भाषाओं में प्रयुक्त क्लास के रूप थोड़े अलग हैं - पर सभी गणक भाषओं में वंशांतरण (यानि अपने पैतृक क्लास से गुण लेना), कई रूपों में रह सकना (बहुरुपण) और आकड़ों को अपने अनुसार सार्वजनिक करना एक उभयवृत्ति है। नीचे दिया विवरण C++ भाषा को आधार मानकर तैयार किया गया है, लेकिन इसकी विचारधारा कई अन्य भाषाओं में भी यथावत या थोड़े परिवर्तन के साथ दिखती है।

## क्लास के प्रयोग - उदाहरण
एक सामान्य क्लास को इस प्रकार से व्यक्त और प्रयोग किया जा सकता है :


```objc
Class A {... };
A a1;
```


यहाँ प्रथम पंक्ति में क्लास (जिसका नाम A है) की परिभाषा और दूसरी पंक्ति में क्लास के प्रकार का एक नया चर (ऑब्जेक्ट) जिसका नाम a1 है, को बनाया गया है। a1, A प्रकार का एक ऑब्जेक्ट है। उपर दिए उदाहरण में क्लास के अंदर की परिभाषा नहीं दिखाई गई है। एक उदाहरण के रूप में परिभाषा इस प्रकार हो सकती है :

```objc
Class A {
 int x,y;
 float p;
 int subtract() {return x-y;} 
 };
```


उपरोक्त कोड में क्लास के अंदर दो int चर (x और y), एक float चर (p) और एक function है (जिसका नाम subtract है) जो int प्रकार के अपने दो चरों (x और y) का अन्तर देता है।

## क्लास की विशेषताएँ
क्लास के प्रयोग ने बड़े और कई-प्रोगामरों द्वारा अलग-अलग भागों में लिखी जाने वाली प्रोग्रामिंग को सुगम बनाया है। इसकी मुख्य विशेषता इसका बंद-स्वरूप, बहुरूपी और वंशान्तरण है -
### वंशांतरण
एक Class को किसी दूसरे क्लास से derive करने का उद्देश्य पहले class को और समृद्ध करना है - और दूसरे क्लास में वही सब कुछ दुबारा करने से बचना है जो पहले क्लास में किया जा चुका है। उदाहरण-स्वरूप अगर Date class में एक और चर, सप्ताह का दिन (यानि वार) जोड़ना हो ते सिर्फ इतना लिखना होगा -

```objc
Class Date2 : Date
 {
 int dayOfWeek; 
 };
```

इससे, Date2 class में दिन, महीना और साल के लिए variable define की आवश्यकता नहीं पड़ी, क्योंकि वो Date class में पहले से मौजूद है। इसके बाद Date2 class के variable बनाए और प्रयोग किये जा सकते हैं :

```objc
Date2 d2;
d2.day=21; d2.month=4; d2.year=2008; d2.dayOfWeek=4; // Meaning Thursday
```


### बहुरूपण
प्रोग्रामिंग संदर्भ में इसे polymorphism कहते हैं। कोई class अपने द्वारा बनाए दूसरे class में एक अलग रूप में रह सकता है। उपर दिये उदाहरण में Class A से एक नया क्लास B बनाया जा सकता है जो subtract को इस प्रकार पारिभाषित करे

```objc
Class A {
 int x,y;
 float p;
 virtual int subtract() {return x-y;} 
 };
Class B : A
 {
 int subtract () {
 if(x>y) return x-y; 
 else return y-x; //यानि जो बड़ा है उसमें से छोटा घटेगा, अन्तर हमेशा positive होगा
 }
 };
```

 
यहाँ virtual का प्रयोग किया गया है।

## अधिक जानकारी हेतु
* Abadi; Cardelli: A Theory of Objects
* ISO/IEC 14882:2003 Programming Language C++, International standard
* Class Warfare: Classes vs. Prototypes, by Brian Foote
* Meyer, B.: "Object-oriented software construction", 2nd edition, Prentice Hall, 1997, ISBN 0-13-629155-4
* Rumbaugh et al.: "Object-oriented modeling and design", Prentice Hall, 1991, ISBN 0-13-630054-5

श्रेणी:कंप्यूटर