C++ Class Hierarchy: मानलो कि हम एक Company के Employees का Database Handle करने का Program बनाना चाहते हैं। इसलिए विभिन्न प्रकार के Employees को उनकी Category में विभाजित करना एक सामान्य प्रक्रिया है। हम मानते हैं कि इस Company में तीन प्रकार के Employees Managers, Laborers व Scientist हैं। जब हमारे पास ऐसी Situation होती है जिसमें चीजों की विभिन्न Category को “Kind of” तरीके से Represent किया जा सकता है, तो हम इस प्रकार की स्थिति को Program में Inheritance के रूप में Modal करने की कोशिश करते हैं। Managers, Scientists व Laborers Employees प्रकार के “Kind of” Objects हैं। इसलिए Employee एक Base Class बन सकता है और ये तीनों Categories उस Base Class को Inherit कर सकते हैं। इस Concept को “C++” में एक format के रूप में निम्नानुसार दर्शाया जा सकता है:
class Employee { ... }; class Manager : public Employee { ... }; class Scientist : public Employee { ... }; class Laborer : public Employee { ... };
इस Format में manager, scientist व laborers को employee Class से Derive किया गया है। Database को Manage करने के उद्देश्य से मानलो कि सभी Employees का एक नाम व एक ID Number है।
चूंकि सभी Employees कुछ Common Features को Share करते हैं, इसलिए इन Common Features को Inheritance के Concept में “Upstream” यानी “Base Class” में रखा जाता है। Derived Class की स्वयं की भी Characteristics होती हैं। Manager के लिए Important Characteristics उनका Title जैसे कि “President” या “Vice-President” और Golf club Dues हैं। Scientist के लिए Important Data उन Publications की संख्या है, जिनके लिए उन्होंने Articles लिखे हैं। Labors की उनके नाम व ID के अलावा कोई Characteristics नहीं हैं, जिन्हें Derived Class में Use किया जाए और ये दोनो Data Base Class में हैं।
चलिए, इस Concept के आधार पर ही एक Program बनाते हैं, जिसमें Inheritance के प्रयोग द्वारा तीनों प्रकार के Employees को Represent व Manage किया जा सकता है। Program निम्नानुसार है:
// Program #include <iostream.h> #include <conio.h> class employee // employee class { private: enum { LEN=30 }; // maximum length of names char name[LEN]; // employee name unsigned long number; // employee number public: void getdata() { cout << "\n Enter last name: "; cin >> name; cout << " Enter number: "; cin >> number; } void putdata() { cout << "\n Name = " << name; cout << "\n Number = " << number; } }; class manager : public employee // management class { private: enum { LEN=40 }; // maximum length of titles char title[LEN]; // "vice-president" etc. double dues; // golf club dues public: void getdata() { employee::getdata(); cout << " Enter title: "; cin >> title; cout << " Enter golf club dues: "; cin >> dues; } void putdata() { employee::putdata(); cout << "\n Title = " << title; cout << "\n Golf club dues = " << dues; } }; class scientist : public employee // scientist class { private: int pubs; // number of publications public: void getdata() { employee::getdata(); cout << " Enter number of pubs: "; cin >> pubs; } void putdata() { employee::putdata(); cout << "\n Number of publications = " << pubs; } }; class laborer : public employee // laborer class { }; void main() { manager m1, m2; scientist s1; laborer l1; cout << endl; cout << "\nEnter data for manager 1"; // get data for m1.getdata(); // several employees cout << "\nEnter data for manager 2"; m2.getdata(); cout << "\nEnter data for scientist 1"; s1.getdata(); cout << "\nEnter data for laborer 1"; l1.getdata(); cout << "\nData on manager 1"; // display data for m1.putdata(); // several employees cout << "\nData on manager 2"; m2.putdata(); cout << "\nData on scientist 1"; s1.putdata(); cout << "\nData on laborer 1"; l1.putdata(); getch(); }
हम देख सकते हैं कि labor Class में कोई भी अन्य Data Member नहीं जोडा गया है फिर भी उसे Employee Class से Inherit किया गया है। आप सोंच सकते हैं कि labor Class को Inherit करने के बजाय हम सीधे ही Employee Class के Objects Create कर सकते हैं। लेकिन ऐसा करने पर Program के Organization का तरीका बिगड जाता है।
जैसाकि यहां पर Class को जिस तरह से Use किया गया है, Employee Class एक ऐसी Class है जिसके Instance Create नहीं किए जा सकते हैं। Employee का मुख्य उद्देश्य एक ऐसी General Class उपलब्ध करवाना है, जिसके आधार पर अन्य Classes में Derive किया जा सके।
मानलो कि आपने एक Pet Dog खरीदा जिसका नाम Tommy है। आपने अपने मित्र को बताया कि आपने एक Tommy खरीदा है। जाहिर सी बात है कि आपका मित्र आपसे पूछ सकता है कि Tommy क्या है, तो आप ये नहीं कर सकते हैं कि Tommy एक सजीव है। क्योंकि आपका मित्र आपसे यही कहेगा कि
“ठीक है, Tommy एक सजीव है, लेकिन किस प्रकार का (Kind of) सजीव है।”
सभी जानवर सजीव के अलावा भी किसी ना किसी विशेष Category से सम्बंधित होते हैं। आपका मित्र ये भी समझ सकता है कि आपने Tommy नाम का एक घोडा या कुछ और खरीदा होगा। आपके ऐसा कहने पर कि आपने एक सजीव खरीदा है जिसका नाम Tommy है, आपके मित्र को निश्चित रूप से ये पता नहीं चल पासगा कि आपने किस प्रकार का सजीव खरीदा है।
यानी सजीव एक ऐसी Category है जिसका स्वयं का कोई Member नहीं हो सकता है। ये केवल एक General Specification दे सकता है कि Tommy एक सजीव है। एक ऐसी Class जिससे Object के रूप में किसी प्रकार का कोई Instance प्राप्त नहीं किया जा सकता है, लेकिन उस Class को एक Base Class की तरह Use करके अन्य Derived Classes को Create किया जा सकता है, इस प्रकार की Class को Abstract Class कहते हैं।
Employee के लिए एक Abstract Class को Use करने से हमें एक सुविधा ये प्राप्त होती है कि Employee Class की Hierarchy को Design करने के बाद यदि हम भविष्य में कभी labor Class में एक Data Item को Add करना चाहें, तो हम बिना Employee Class को Modify किए Labor Class को Modify कर सकते हैं और इस Derived Labor Class में किए गए परिवर्तन इस Labor Class के सभी Employees को Affect करेंगे। यानी इस Derived Labor Class से जितने भी Labor Employee Object Create हुए हैं, उन सभी Labor Employees में ये नया Data Item Add हो जाएगा। main() Program में Program ने दो Manages, एक Scientist व एक Laborer यानी कुल चार Employee Objects Create किए हैं। फिर Program ने चारों Employees के लिए User से Data लिया है और Output में Data को Display किया है। इस Program से एक User निम्नानुसार Interaction करता है:
Enter data for manager 1 Enter last name: Krishna Enter number: 123 Enter title: President Enter golf club dues: 10 Enter data for manager 2 Enter last name: Raghav Enter number: 231 Enter title: VicePresident Enter golf club dues: 20 Enter data for scientist 1 Enter last name: Gopal Enter number: 120 Enter number of pubs: 12 Enter data for laborer 1 Enter last name: Kuldeep Enter number: 600 Data on manager 1 Name = Krishna Number = 123 Title = President Golf club dues = 10 Data on manager 2 Name = Raghav Number = 231 Title = VicePresident Golf club dues = 20 Data on scientist 1 Name = Gopal Number = 120 Number of publications = 12 Data on laborer 1 Name = Kuldeep Number = 600
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C++ Programming Language in Hindi | Page: 666 | Format: PDF