Create a Class Definition: अभी तक हमने OOPS के जिन Concepts व Elements को परिभाषित किया है, उनमें से ज्यादातर परिभाषाएं भ्रमित करने वाली व समझ में ना आने वाली हैं। चलिए, हम इन परिभाषाओं को केवल जावा के सम्बंध में ही 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, Fixed Deposit A/C, Recurring Deposit 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 Object धन को Deposit करने का काम करता है। इसी तरह से हम किसी Bank Account में अपने Deposited धन को Withdraw करते हैं। यानी Bank Account Object Bank में जमा धन को निकालने का काम भी करता है। इस तरह से एक 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 करने के लिए Use Perform या Execute होते हैं।
इस तरह से हमें Account Object के लिए दो Operations व 6 Abstract Attributes प्राप्त होते हैं। इन्ही Operations व Attributes को हम एक Abstract Data Type या एक जावा Class के रूप में Specify करें, तो बनने वाला Description समस्या से सम्बंधित Real World Object (Account) को Computer में Logically Represent करता है।
समस्या से सम्बंधित Account Object के विभिन्न Abstract Attributes में हम निम्न प्रकार के Data Feed कर सकते हैं:
- Branch Name = Jaipur
- Branch Number = JPR01
- Account Number = AC1201235
- Account Head Name = Achyut
- Money = 2000.00
- Date = 12-July-2007
जिन Attributes के मानों के साथ किसी प्रकार की Calculation हो सकती है, उन Attributes को Integer या Float प्रकार का 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 के साथ, Character को Store करने के लिए char 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 होगा, और जावा के आधार पर उन Data Types को Represent करने वाले Keywords को Abstract Attributes के साथ Specify कर देते हैं, तो हमें Abstract Attributes की अब जो Description प्राप्त होती है, उसे जावा Class के Data Members कहते हैं।
जावा की किसी भी Class को हमेंशा किसी ना किसी Real World Object को एक नए User Defined Data Type (Abstract Data Type or Class) की तरह Represent करने के लिए Develop किया जाता है और किसी भी Real World Object के कुछ Attributes के साथ उसके कुछ Behaviors भी होते हैं, इसलिए जावा की उस Account Class में विभिन्न Abstract Attributes को Represent करने वाले Data Members के साथ उन Behaviors को भी Specify करना होता है, जो समस्या से सम्बंधित Operations Perform करके इन Data Members के मानों में परिवर्तन करते हैं।
यानी Account Object को जावा में तभी पूरी तरह से Represent किया जा सकता है, जब इन Data Account के Abstract Attributes को Represent करने वाले Data Members के साथ Account Object के Behaviors यानी Deposit व Withdraw Operations को भी Specify किया जाए। सामान्यतया Abstract Attributes में परिवर्तन करने वाले Operations को जावा में Methods कहते हैं।
अतः जब तक हम समस्या से सम्बंधित Data Members व Methods को एक साथ एक Group के रूप में Specify नहीं करेंगे, तब तक जावा किसी Real World Object को पूरी तरह से Logically Represent नहीं कर सकेगा। इसलिए हमें Account Object के Abstract Data Members (Attributes) व Methods (Behaviors) दोनों को निम्नानुसार एक Unit के रूप में Specify करना होगाः
// Abstract Data Type or Class // 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
जब हमें जावा में किसी Object के Behavior को Represent करना होता है, तब हमें Behavior यानी Method के नाम के साथ Parenthesis का प्रयोग करना होता है। साथ ही ये भी बताना होता है कि Method किसी प्रकार का कोई मान Return करेगा या नहीं। चूंकि हम यहां पर Method को बिल्कुल Simple रखना चाहते हैं, इसलिए हम ये मान रहे हैं कि Method किसी भी तरह का कोई मान Return नहीं करेगा। जब हम Method से किसी तरह का कोई मान Return करवाना नहीं चाहते हैं, तब जावा Compiler को इस बात की Information देने के लिए Method के नाम के आगे void लिखते हैं।
जब हमें जावा की 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 Class { // 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 को जावा का Compiler पहचानता है।
जावा के सभी Code Statements के अन्त को निर्धारित करने के लिए यानी जावा के Compiler को ये बताने के लिए कि CPU को दिया जाने वाला एक Instruction पूरा हो गया है, हमें हर Statement के बाद में Semicolon का प्रयोग करना होता है।
हालांकि अभी ये Class अधूरी है, क्योंकि हमने जावा Compiler को अभी ये नहीं बताया है कि Deposit() व Withdraw() Methods Account Class के विभिन्न Data Members को किस प्रकार से Change करेंगे। जब हमें Methods को ये बताना होता है कि वे किसी Class के विभिन्न Data Members के मानों को किस प्रकार से Change करेंगे, तब हमें विभिन्न प्रकार के Java Codes लिखने पडते हैं। इन विभिन्न प्रकार के Java Codes को Method के Parenthesis के बाद Opening व Closing Curly Braces { } के बीच में लिखना होता है।
इन तीनों नियमों को Apply करने पर हमें Account Object की Class का निम्नानुसार Specification प्राप्त होता है, जो एक Real World Account Object को Computer में Logically Represent करता हैः
// Account Abstract Data Type or Class 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() { // Java Codes for changing the states of // Data Members based on requirement. } void Withdraw() { // Java Codes for changing the states of // Data Members based on requirement. } }
Identifier Naming System
Computer में विभिन्न प्रकार के मानों को Store करने के लिए Data के अनुसार Memory में कुछ जगह Reserve की जाती है और उस Reserved जगह को पहचानने के लिए Programmer उस जगह को कोई नाम देता है। जैसे यदि Programmer किसी व्यक्ति की Age Computer में Store करना चाहते हैं, तो Age Store करने के लिए उसे Integer प्रकार का एक Identifier Create करना होगा यानी मान को Store करने के लिए Memory में कुछ जगह Reserve करनी होगी और उस Reserved Memory को एक नाम देना होगा। इस नाम से ही उस Memory Location को पहचाना जा सकता है जिस पर Programmer ने Age के मान को Store किया है। जावा में किसी Identifier को नाम देने के कुछ नियम हैं, जो निम्नानुसार हैं:
- Identifier के नाम में A to Z Capital व Small Letters का प्रयोग किसी भी प्रकार से किया जा सकता है।
- Underscore का प्रयोग किया जा सकता है।
- यदि नाम में किसी Digit का प्रयोग करना हो, तो नाम के अन्त में Digit का प्रयोग किया जा सकता है।
- नाम में किसी Operator, Special Symbol या Keyword का प्रयोग नहीं किया जा सकता है।
- नाम में Blank Space का प्रयोग नहीं किया जा सकता है, क्योंकि Blank Space एक तरह का Special Symbol है।
हमने हमारी Specification में Abstract Attributes को Represent करने वाले ज्यादातर Data Members के नाम के बीच में Whitespace का प्रयोग किया है। इसलिए जावा इन Identifiers को Accept नहीं करता है और हमें Errors देता है।
जावा का एक Naming Convention है, जिसमें जब हमें किसी Class का नाम देना होता है और नाम में दो या अधिक शब्द होते हैं तब हमें निम्नानुसार नाम देना चाहिएः
PopulationOfIndia, AgeOfMoon, BasicSalary
इसी तरह से जब हमें विभिन्न Data Members का नाम देना होता है और नाम में एक से ज्यादा शब्द हों तो उन्हें निम्नानुसार नाम देना चाहिएः
populationOfIndia, ageOfMoon, basicSalary
अब चूंकि हमने हमारे Description में विभिन्न Data Members के बीच Space का प्रयोग किया है, इसलिए यदि इस Class को ठीक प्रकार से Specify करना है तो हमें इस Class को निम्नानुसार Modify करना पडेगा।
// Account Abstract Data Type or Class class Account { // Data Members or Abstract Attributes String branchName ; String branchNumber ; String accountNumber ; String accountHeadName ; float money ; String date ; // Methods or Behaviors void Deposit() { // Java Codes for changing the states of // Data Members based on requirement. } void Withdraw() { // Java Codes for changing the states of // Data Members based on requirement. } }
हालांकि हमने 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 के Account को Computer में उसी तरह से Logically Create व Manage कर सकते हैं, जिस तरह से Real World में लोगों के Account को Physically Create व Manage किया जाता है। (Create a Class Definition)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Java Programming Language in Hindi | Page: 682 | Format: PDF