C# Class Example: अभी तक हमने OOPS के जिन Concepts व Elements को परिभाषित किया है, उनमें से ज्यादातर परिभाषाऐं भ्रमित करने वाली व समझ में न आने वाली हैं। चलिए, हम इन परिभाषाओं को केवल C# के सम्बंध में ही Apply करने की कोशिश करते हैं।
किसी भी Real World Problem को जब हमें Computer पर Solve करना होता है, तो सबसे पहले हमें ये जानना होता है, कि Problem से सम्बंधित वह सबसे महत्वपूर्ण Object कौनसा है, जिस पर समस्या आधारित है।
Object को पहचानने का कोई निश्चित तरीका या Trick नहीं है। हर समस्या में अलग प्रकार का Object प्रभावित होता है और हर समस्या में उस अलग प्रकार के Object के अलग प्रकार के Attributes को Manage करना होता है।
इसलिए किसी समस्या के सबसे महत्वपूर्ण Object का पता लगाने के लिए हमें बार-बार विभिन्न प्रकार की समस्याओं को हल करने की कोशिश करनी होती है। कई बार किसी समस्या को Solve करते समय हम गलत Object ले लेते हैं। ऐसे में जब हम आगे बढते हैं, तब समस्या Computer में पूरी तरह से Represent नहीं हो पाती है और जब समस्या पूरी तरह से Represent नहीं हो पाती है, तब हमें स्वयं ही पता चल जाता है कि समस्या से सम्बंधित जो सबसे महत्वपूर्ण Object हमने माना था, वह Object सबसे ज्यादा महत्वपूर्ण नहीं था।
जब हमें ये पता चल जाता है कि हमने किसी गलत Object को महत्वपूर्ण मान लिया है, तो उसी समय हमें ये भी पता चल जाता है कि समस्या से वास्तव में सम्बंधित सबसे ज्यादा महत्वपूर्ण Object कौनसा है।
जब बार-बार इस तरह से Practice की जाती है, तब अपने आप ही ये पता चलने लगता है कि समस्या से सम्बंधित सबसे उचित व महत्वपूर्ण Object कौनसा है। फिर भी कुछ Common नियम हैं जिनके आधार पर कुछ समस्या से सम्बंधित Objects को Directly Identify किया जा सकता है।
उदाहरण के लिए यदि हम किसी Bank Account को Manage करने के लिए Program Create कर रहे हैं, तो Bank Account से सम्बंधित कई Objects होते हैं, जो सबसे ज्यादा महत्वपूर्ण होते हैं। इसे हम निम्नानुसार ज्ञात कर सकते हैं:
Different Kinds of Bank Account
{Saving A/C, Current A/C, FD A/C, RD A/C, Over Draft A/C}
Bank’s Customers
समस्या से सम्बंधित महत्वपूर्ण Objects पहचानने के बाद हमें उन Objects के उन Attributes को प्राप्त करना होता है, जो समस्या से सम्बंधित हों। चूंकि एक Bank Account व एक Customer दोनों के ही विभिन्न प्रकार के Attributes हो सकते हैं और ये जरूरी नहीं है कि सभी Attributes समस्या को Represent करने के लिए उपयोगी हों। इसलिए हमें किसी Object के समस्या से सम्बंधित जरूरी Attributes प्राप्त करने के लिए समस्या का Abstraction करना होता है।
किसी समस्या से सम्बंधित सबसे महत्वपूर्ण Object के समस्या से सम्बंधित सबसे महत्वपूर्ण Attributes प्राप्त करने का यानी Abstraction करने का सबसे अच्छा तरीका ये है कि हम ये पता करें कि हमारी समस्या में Object क्या Operation Perform करेगा। यानी Object काम क्या करेगा?
हम जानते हैं कि कोई Object जब भी कोई काम करता है या Operation Perform करता है, तो किसी ना किसी तरीके से वह अपने ही किसी Attribute के मान में परिवर्तन करता है। इसलिए यदि हमें ये पता चल जाए कि हमारी समस्या में हमारा Object अपने किन Attributes के मानों में परिवर्तन करेगा, तो हम उन परिवर्तित होने वाले मानों को Store करने वाले Attributes को Object के जरूरी Abstract Attributes के रूप में परिभाषित कर सकते हैं, यानी Object के जरूरी Data Members का पता लगा सकते हैं।
यदि कोई Object कोई ऐसा Operation Perform करता है, जिससे Object के किसी भी Attribute के मान में कोई परिवर्तन नहीं होता है, तो समझ लेना चाहिए कि Object का वह Operation समस्या से सम्बंधित जरूरी Operation नहीं है और Object के उस Operation को Neglect कर देना चाहिए।
यदि सरल शब्दों में कहें तो कह सकते हैं कि किसी समस्या से सम्बंधित जरूरी Data का पता लगाने के लिए हमें उस समस्या से सम्बंधित सबसे महत्वपूर्ण Object के सम्बंध में ये पूछना चाहिए कि:
Object के क्या करने पर क्या होगा।
किसी Object के कुछ करने पर Object की जिन विशेषताओं के मान बदल सकते हैं, वे विशेषताएं ही हमारी समस्या से सम्बंधित सबसे महत्वपर्ण Data हैं।
चलिए, इसी नियम को हम Bank Account Object पर Apply करते हैं।
Bank Account Object का सबसे महत्वपूर्ण काम ये है कि हम किसी Bank Account में अपना धन Deposit करवाते हैं या Bank Account में अपने जमा धन को Withdraw करते हैं।
यानी Bank Account Object धन को Deposit करने अथवा Deposited धन को Withdraw करने का काम करता है। अत: एक Bank Account Object समस्या से सम्बंधित दो ही सबसे महत्वपूर्ण काम कर रहा है।
हालांकि कुछ अन्य काम भी होते हैं, जिन्हें Bank Account Object Perform करता है, लेकिन हम यहां पर यही मान रहे हैं कि Bank Object यही दो काम करता है।
जब Bank Account में धन Deposit करते हैं, तब Deposit Form Fill करके रूपयों के साथ उस Form को भी Bank में जमा करवाना पडता है। Deposit Form में हमें निम्न सुचनाऐं देनी होती हैं:
- Branch Name
- Branch Number
- Account Number
- Account Head Name
- Money
- Date
इसी तरह से यदि Bank से रूप, Withdraw करने हों, तो एक Withdrawal Form Fill करके जमा करवाना पडता है। उस Withdrawal Form में निम्न सुचनाऐं देनी होती हैं:
- Branch Name
- Branch Number
- Account Number
- Account Head Name
- Money
- Date
ये सभी किसी Bank Account के वे Attributes हैं, जिन्हें Deposit या Withdraw Operation द्वारा Change किया जाता है। इसलिए ये सभी Attributes, Bank Account Object के Abstract Attributes हैं और Deposit व Withdraw वे Operations हैं, जो जरूरत के आधार पर इन Abstract Attributes को Change करने के लिए User द्वारा Execute या Call किए जाते हैं।
इस तरह से हमें Account Object के लिए दो Operations व 6 Abstract Attributes प्राप्त होते हैं। इन्ही Operations व Attributes को हम एक Abstract Data Type या एक C# Class के रूप में Specify करें, तो बनने वाला Description, समस्या से सम्बंधित Real World Object (Account) को Computer में Logically Represent करता है।
समस्या से सम्बंधित Account Object के विभिन्न Abstract Attributes में हम निम्न प्रकार के Data Feed कर सकते हैं:
जिन Attributes के मानों के साथ किसी प्रकार की Calculation हो सकती है, उन Attributes को Integer, Float या Decimal प्रकार का Declare किया जाना होता है।
- चूंकि Bank Account का Money Attribute एक ऐसा Attribute है, जिसके मान के साथ किसी प्रकार की Calculation हो सकती है, साथ ही ये मान दसमलव वाला भी हो सकता है। इसलिए इस मान को Hold करने के लिए Float प्रकार के Data Type के Variable की जरूरत पडेगी।
- जिन Attributes में Character प्रकार के मान होते हैं, उन्हें String प्रकार के Variable में Store किया जा सकता है।
- वे Attributes जो किसी प्रकार की Calculation में भाग नहीं लेते हैं, उन्हें भी हमें String या Character प्रकार के Variable में ही Store करना चाहिए।
इस नियम के आधार पर देखें तो String को Store करने वाले Attribute को string Keyword के साथ, Integer प्रकार के मान को Hold करने वाले Attribute के साथ int Keyword व Float प्रकार के मान को Store करने के लिए float Keyword के साथ Attributes को लिखने पर हमें निम्नानुसार Format प्राप्त होता है:
- string Branch Name
- string Branch Number
- string Account Number
- string Account Head Name
- float Money
- string Date
जब हमें किसी समस्या के मुख्य Object के Abstraction से Abstract Attributes प्राप्त होते हैं, और उनमें Store किए जाने वाले मानों के आधार पर हम ये तय कर लेते हैं कि किस Attribute में किस प्रकार का मान Store होगा और C# के आधार पर उन Data Types को Represent करने वाले Keywords को Abstract Attributes के साथ Specify कर देते हैं, तो हमें Abstract Attributes की अब जो Description प्राप्त होती है, उसे C# Class के Data Members कहते हैं।
C# की कोई भी Class, हमेंशा किसी ना किसी Real World Object को एक नए User Defined Data Type की तरह Represent करने का काम करता है और किसी भी Real World Object के कुछ Attributes के साथ उसके कुछ Behaviors भी होते हैं।
इसलिए C# की उपरोक्त Account Class में विभिन्न Abstract Attributes को Represent करने वाले Data Members के साथ उन Behaviors को भी Specify करना होता है, जो समस्या से सम्बंधित Operations Perform करके इन Data Members के मानों में परिवर्तन करते हैं अथवा इन Data Members को Access करते हैं।
यानी Account Object को C# में तभी पूरी तरह से एक नए User Defined Data Type या Type की तरह Represent किया जा सकता है, जब Account Related Data को Account के Abstract Attributes को Represent करने वाले Data Members के साथ Account Object के Behaviors यानी Deposit व Withdraw Operations को भी Specify किया जाए।
सामान्यतया Abstract Attributes में परिवर्तन करने वाले Operations को C# में Methods कहते हैं। अत: जब तक हम समस्या से सम्बंधित Data Members व Methods को एक साथ एक Unit के रूप में Specify नहीं करेंगे, तब तक C# किसी Real World Object को पूरी तरह से Logically Represent नहीं कर सकेगा।
इसलिए हमें Account Object के Abstract Data Members (Attributes) व Methods (Behaviors) दोनों को निम्नानुसार एक Unit के रूप में Specify करना होगा:
Abstract Data Type or C# Class Example
// Data Members or Abstract Attributes
string Branch Name
string Branch Number
string Account Number
string Account Head Name
float Money
string Date
// Methods or Behaviors
Deposit
Withdraw
जब हमें C# में किसी Object के Behavior को Represent करना होता है, तब हमें Behavior यानी Method के नाम के साथ Parenthesis का प्रयोग करना होता है। साथ ही ये भी बताना होता है कि Method किसी प्रकार का कोई मान Return करेगा या नहीं।
चूंकि हम यहां पर Method को बिल्कुल Simple रखना चाहते हैं, इसलिए हम ये मान रहे हैं कि Method किसी भी तरह का कोई मान Return नहीं करेगा। जब हम Method से किसी तरह का कोई मान Return करवाना नहीं चाहते हैं, तब C# Compiler को इस बात की Information देने के लिए Method के नाम के आगे void लिखते हैं।
जब हमें C# की Coding के रूप में किसी Object से सम्बंधित Abstracted Attributes यानी Data Members व Behaviors यानी Methods को एक Group या एक Single Unit के रूप में Specify करना होता है, तब Object के विभिन्न Data Members व Methods को Opening व Closing Curly Braces { } के बीच में Specify करना होता है।
उपरोक्त दोनों नियमों को Account Class के Code Segment पर Apply करने पर हमें Account Object की Class का निम्नानुसार Specification प्राप्त होता है:
Abstract Data Type or C# Class Example
class Account {
// Data Members or Abstract Attributes
string Branch Name
string Branch Number
string Account Number
string Account Head Name
float Money
string Date
// Methods or Behaviors
void Deposit()
void Withdraw()
}
किसी Object को Represent करने वाले Data Members व Methods को एक Unit के रूप में Specify करने की प्रक्रिया को OOPS Concept के अन्तर्गत Encapsulation नाम दिया गया है।
यानी जब हम Account Object के Data Members व Methods को Opening व Closing Curly Braces के बीच में Specify करते हैं, तो वास्तव में हम Account Object को Encapsulate कर रहे होते हैं। यानी हमने Account Object को उपरोक्त Code Statement द्वारा Encapsulated कर दिया है।
अब यदि हम इस Code Segment की शु:आत में class Keyword के साथ में हम Account शब्द Specify कर दें, तो इसका मतलब ये है कि हमने Account Class बना दी है, जिसके Objects को C# का Compiler पहचानता है।
C# के सभी Code Statements के अन्त को निर्धारित करने के लिए यानी C# के Compiler को ये बताने के लिए कि CPU को दिया जाने वाला एक Instruction पूरा हो गया है, हमें हर Statement के अन्त में Semicolon का प्रयोग करना होता है।
हालांकि अभी भी ये Class अधूरी है, क्योंकि हमने C# Compiler को अभी ये नहीं बताया है कि Deposit() व Withdraw() Methods Account Class के विभिन्न Data Members को किस प्रकार से Change करेंगे।
जब हमें Methods को ये बताना होता है कि वे किसी Class के विभिन्न Data Members के मानों को किस प्रकार से Change करेंगे, तब हमें विभिन्न प्रकार के C# Codes लिखने पडते हैं। इन विभिन्न प्रकार के C# Codes को Method के Parenthesis के बाद Opening व Closing Curly Braces { } के बीच में लिखना होता है।
इन तीनों नियमों को Apply करने पर हमें Account Object की Class का निम्नानुसार Specification प्राप्त होता है, जो एक Real World Account Object को Computer में Logically Represent करता है:
Abstract Data Type or C# Class Example
class Account {
// Data Members or Abstract Attributes
string Branch Name
string Branch Number
string Account Number
string Account Head Name
float Money
string Date
// Methods or Behaviors
void Deposit(){
// C# Codes for changing the states of
// Data Members based on requirement.
}
void Withdraw(){
// C# Codes for changing the states of
// Data Members based on requirement.
}
}
अभी भी इस Class के Objects Create नहीं किए जा सकते हैं। क्योंकि C# में विभिन्न प्रकार के मानों को Store करने के लिए जिन Variables को Declare करते हैं, उन Variables के नाम देने के कुछ नियम हैं। यदि हम उन में किसी भी नियम को Neglect करते हैं, तो C# Compiler Program में Compile Time Error Generate करता है।
हमने हमारे Class Specification में Abstract Attributes को Represent करने वाले ज्यादातर Data Members के नाम के बीच में Whitespaces का प्रयोग किया है, जबकि किसी भी अन्य Programming Language की तरह ही C# में भी हम Identifiers के नाम के बीच Space का प्रयोग नहीं कर सकते। इसलिए यदि हम हमारी Class Description में Specified Abstract Data Members के नामों के बीच के Whitespaces को Remove करके Class को निम्नानुसार Modify कर दें:
Abstract Data Type or C# Class Example
class Account {
// Data Members or Abstract Attributes
string branchName;
string branchNumber;
string accountNumber;
string accountHeadName;
float Money;
string Date;
// Methods or Behaviors
void Deposit(){
// C# Codes for changing the states of
// Data Members based on requirement.
}
void Withdraw(){
// C# Codes for changing the states of
// Data Members based on requirement.
}
}
तो अब हम इस Class के Object Create कर सकते हैं और इस Class को Exactly किसी भी ऐसी Class की तरह Use कर सकते हैं, जिस तरह से .NET Framework में Defined Classes को Use करते हैं।
हालांकि हमने Deposit() व Withdraw() Method में किसी तरह के Code नहीं लिखे हैं, इसलिए इस Class के Object किसी भी तरह का कोई भी काम नहीं करेंगे। फिर भी ये Class पूरी तरह से Executable है और हम इस Class के Objects Create कर सकते हैं।
इस तरह से हम किसी समस्या से सम्बंधित किसी जरूरी Object को एक Abstract Data Type (Class) के रूप में Specify करके, Object को Computer में Logically Represent कर सकते हैं। एक बार किसी समस्या के आधार पर किसी Object की Class बना देने के बाद, हम उस Class के जितने चाहें उतने Objects Create कर सकते हैं।
यानी उपरोक्त Account Class के आधार पर हम जितने चाहें उतने Customers के Accounts को Computer में उसी तरह से Logically Create व Manage कर सकते हैं, जिस तरह से Real World में लोगों के Account को Physically Create व Manage किया जाता है।
Object Oriented Programming System अपने आप में काफी बडा व जटिल विषय है और यहां हमने केवल Object Oriented Programming System के Basics को समझने की कोशिश की है, ताकि हम आगे आने वाले C# Programs को आसानी से समझ सकें और C# के विभिन्न Concepts को समझने के लिए छोटे-छोटे Programs बना सकें। जबकि Object Oriented Programming System से सम्बंधित विभिन्न Concepts को हम C# Programming के माध्यम से आगे Detail से समझने की कोशिश करेंगे।
हालांकि यदि आप Object Oriented Programming System के Basic Concepts से पूरी तरह से अनभिज्ञ हैं, तो “C++ Programming Language in Hindi” पुस्तक आपके लिए काफी उपयोगी साबित हो सकती है। क्योंकि इस पुस्तक में विभिन्न Object Oriented Programming System Concepts के बारे में Detail से समझाया गया है कि कौनसा OOPS Concept क्यों Exist है और Programming Language में उसे किस तरह की Requirement को पूरा करने के लिए किस तरह से Implement किया जाता है।
यदि आप इस पुस्तक को पढ रहे हैं, तो हम यही मान कर चल रहे हैं कि आपको “C Programming Language” की Structural Programming व “C++ Programming Language” की Object Oriented Programming का पर्याप्त ज्ञान है। जबकि यदि आपको इन दोनों Programming Languages का कोई ज्ञान नहीं है, तो आप इस पुस्तक को ठीक से नहीं समझ सकते।
इसलिए बेहतर यही होगा कि पहले आप C Programming Languages के माध्यम से Programming के Basic Concepts जैसे कि Looping, Conditional Statements, Array, Structure आदि को समझें और फिर C++ Programming Language के माध्यम से Object Oriented Programming System Concepts जैसे कि Class, Inheritance, Polymorphism, आदि को ठीक से समझें। तभी आप “C#” Programming Language को ठीक से समझ पाऐंगे।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C#.NET in Hindi | Page:908 | Format: PDF