OOPS Concepts in C#.Net with Examples: वर्तमान समय में हम C# के 5.0 Version को Use कर रहे हैं, जिसमें .NET Platform में Add किए गए कुछ और नए Changes को Handle करने के लिए नए Programming Features को Add किया गया है। .NET Framework व उसके साथ Launch किए गए C# के विभिन्न Versions के बारे में हम निम्न चित्र द्वारा ज्यादा बेहतर तरीके से समझ सकते हैं और इस पुस्तक में हम C# के इन्हीं Features के बारे में जानेंगे।
जैसाकि हमने पहले भी कहा कि जैसे-जैसे जरूरतें बदलती हैं, उन जरूरतों को पूरा करने के लिए नई तरह की Hardware Devices बनाई जाती हैं और नई तरह की Hardware Devices को आसानी से Handle व Control करने के लिए नई तरह की Programming Language बनाई जाती है या फिर Programming Language में नए Features को Add किया जाता है।
इसी वजह से जब .NET Framework 1.0 Launch किया गया था, तो उसके साथ C# 1.0 भी Launch किया गया था जो कि .NET Framework के लिए Develop की गई एक नई Programming Language थी और जैसे-जैसे .NET Framework के नए Versions आते गए, नई तरह की Requirements को पूरा करने के लिए C# Programming Language में भी नए Features को Add किया गया। परिणामस्वरूप वर्तमान समय में हम C# 5.0 Version के Compiler को Use कर रहे हैं।
Object Oriented Programming System Basics
चूंकि C# एक Pure Object Oriented Programming Language है, इसलिए बिना Object Oriented Programming System के Fundamental Concepts को समझे हुए, हम C# में एक Simple “Hello! World” Program भी Create नहीं कर सकते, क्योंकि उस Program में भी हमें Input व Output की सुविधा प्राप्त करने के लिए जिन Syntax को Use करना होता है, वे भी पूरी तरह से Object Oriented Programming System के नियमों पर आधारित हैं।
Object – The Definition
दुनियां की हर उस चीज को Object कह सकते हैं, जिसे Physically देखा जा सके या Logically किसी दिखाई देने वाली चीज के Reference में महसूस किया जा सके। जैसाकि हमने कहा कि Object को देखा जा सकता है, इसका मतलब ये हुआ कि हर वह चीज जिसका कोई रंग, रूप व आकार हो, वह Object है। जैसे कि Keyboard, Employee, Client आदि। इसी प्रकार से हर वह चीज जिसे किसी दिखाई देने वाली चीज के Reference में महसूस किया जा सके, Object है। जैसे Bank Account जो कि किसी Physical व्यक्ति का होता है, जिसका कोई रंग, रूप व आकार होता है।
हर Object की कुछ विशेषताएं होती हैं, जिसकी वजह से कोई एक Object किसी दूसरे Object से अलग पहचाना जाता है। किसी भी Object की इन विशेषताओं को हम उस Object के Attributes या उस Object की Properties कहते हैं। किसी Object के Attribute के मान में परिवर्तन करने पर वह Object बदल जाता है।
उदाहरण के लिए किसी Bank Account Object की एक Property, उसका Account Number हो सकता है। अब यदि किसी Bank Account के Account Number Property का मान Change किया जाए, तो वह Bank Account किसी दूसरे व्यक्ति के Bank Account को Refer करने लगेगा। यानी Object के Attribute या Property के मान में यदि परिवर्तन कर दिया जाए तो Object बदल जाता है, हालांकि नया Object भी उसी Category या Class का Member रहता है, जिसका पहला वाला Object था।
जिस तरह से हर Object, Uniquely Identify होने के लिए अपने कुछ Unique Attributes या Properties का प्रयोग करता है, उसी तरह से हर Object किसी ना किसी तरीके से कोई ना कोई काम करता है। Object के इस काम करने की प्रवृति को Object का Behavior कहते हैं।
Objects – Based on Problem
वास्तविक जीवन (Real World) में हम किसी भी समस्या को जिस प्रकार से देखते हैं, उसी प्रकार से हम उस समस्या को Computer में भी Represent कर सकते हैं। समस्या को Computer में Logically तभी Represent किया जा सकता है, जब समस्या को ठीक प्रकार से समझा जाए और ये पता किया जाए कि समस्या के मुख्य Objects कौन-कौन से हैं।
उदाहरण के लिए मान लीजिए कि एक Company में उसके सभी Employees के Bio–Data को Manual Register से Upgrade करके Computerized करना है। तो हमें सबसे पहले इस Real World समस्या से सम्बंधित सबसे महत्वपूर्ण Object को Identify करना होगा और क्योंकि विभिन्न Employees के Bio–Data को Computer पर Store करना है, इसलिए इस समस्या से सम्बंधित जो सबसे महत्वपूर्ण Object है, वह Employee ही है, क्योंकि एक Employee की Information को ही हमें Computerized Application Software द्वारा Manage करना है।
Abstraction – The Problem Simplifying Process
किसी भी Real Life Problem को जब हमें Computer पर Logically Represent करना होता है, तो सबसे पहले हमें ये तय करना होता है कि समस्या से सम्बंधित वे जरूरी बातें कौन-कौन सी हैं, जो समस्या के परिणाम को प्रभावित करती हैं।
समस्या के समाधान को प्रभावित करने वाली जरूरी बातों को समस्या के समाधान को प्रभावित ना करने वाली बिना जरूरी बातों से अलग करने की प्रक्रिया को Abstraction कहते हैं। OOPS के इस Concept को हम पिछले उदाहरण द्वारा ही समझने की कोशिश करते हैं।
मानलो कि किसी Company के विभिन्न Employees के Bio–Data को Computer पर Store करना है। चूंकि इस काम को सम्पन्न करने के लिए एक निश्चित क्रम का पालन करना पडता है, इसलिए Computer के लिए ये काम एक प्रकार की समस्या है, जिसे Solve करना है।
अब चूंकि हमारी समस्या का मुख्य Object Employee है, इसलिए उसके कई Attributes या Properties हो सकते हैं, जो एक Employee को दूसरे Employee से Uniquely अलग Identify करने में मदद करते हैं। उदाहरण के लिए Employee की विभिन्न Properties में से कुछ Properties निम्नानुसार हो सकती हैं:
- Employee’s First Name
- Employee’s Last Name
- Address
- City
- District
- State
- Date Of Birth
- Qualification
- Extra Ability
- Degrees
- Designation
- Date Of Company Joining
- Hobbies
- Contact Number
- of His Brothers and Sisters
- His Father’s Date of Birth
- His Father’s Name
- His Friends Contact Number
इसी तरह से एक Employee की और भी बहुत सारी Properties हो सकती हैं, जिनके आधार पर उसे किसी दूसरे Employee से Uniquely अलग Identify किया जा सके। लेकिन इस List में कुछ Attributes ऐसे हैं, जिनका Employee के Bio–Data यानी मुख्य समस्या के परिणाम से Directly कोई सम्बंध नहीं है।
उदाहरण के लिए किसी Employee के कितने भाई-बहन हैं, इस बात का Employee के Bio-Data से कोई सम्बंध नहीं है। इसी तरह से Employee के पिता के Date of Birth का अथवा Employee के मित्र के Contact Number का Employee के Bio–Data से कोई Direct सम्बन्ध नहीं है।
यानी ये तीन Attributes ऐसे Attributes हैं, जिनका Employee के Bio–Data से कोई सम्बंध नहीं है। इसलिए इन बिना जरूरी Data को बाकी के जरूरी Data से अलग कर देने पर हमारे सामने निम्नानुसार Attributes ही रह जाते हैं:
- Employee’s First Name
- Employee’s Last Name
- Address
- City
- District
- State
- Date Of Birth
- Qualification
- Extra Ability
- Degrees
- Designation
- Date Of Company Joining
- Hobbies
- Contact Number
- His Father’s Name
इस प्रकार से हमने समस्या (Bio–Data of Employee) के परिणाम को प्रभावित करने वाले जरूरी Attributes को समस्या से असम्बंधित बिना जरूरी Attributes से अलग किया। इस प्रक्रिया को Object Oriented Programming Concept में Abstraction कहते हैं और Abstraction के बाद हमारी समस्या के परिणाम को प्रभावित करने वाले जो जरूरी Attributes हमें प्राप्त होते हैं, उन जरूरी Attributes को Abstract Attributes कहते हैं।
Abstract Data Type – Logical Representation of Real World Object
हम देख सकते हैं कि Bio–Data Problem से सम्बंधित Attributes को प्राप्त करने के लिए हमने सबसे पहले किसी Employee के सभी Attributes पर विचार किया और फिर जरूरी Attributes को बिना जरूरी Attributes से अलग करके जरूरी Attributes को प्राप्त कर लिया।
अब इसी समस्या के Employee Object को यदि Computer में Logically Represent करना हो, तो हमें इन Abstract Attributes के आधार पर एक Abstract Data Type बनाना होता है, जिसे C# में केवल Type नाम से जाना जाता है। जबकि इसी Abstract Data Type को विभिन्न Object Oriented Programming Languages में सामान्यत: Class के रूप में Represent किया हैं।
Class एक नए प्रकार का User Defined Data Type होता है, जो समस्या से सम्बंधित किसी Real World Object को Computer में Logically Represent करने के लिए बनाया जाता है। यानी Class एक Specification या Model मात्र होता है, जो तय करता है कि किसी समस्या से सम्बंधित किसी Real World Object के विभिन्न Abstract Attributes को Computer की Memory में किस तरह से Representation किया जा सकता है।
सरल शब्दों में कहें तो OOPS के Concepts का प्रयोग करके एक Programmer किसी Real World Object को Computer में Exactly उसी तरह से Logically Represent करने की क्षमता प्राप्त कर लेता है, जिस तरह से वह Object, Real World में Exist होता है।
Attributes – The Data Members of The Class
किसी समस्या के परिणाम से सम्बंधित किसी Object के विभिन्न Attributes को जब Computer में Represent करना होता है, तब Computer में उस Object के Attributes में Store होने वाले Data के आधार पर हम ये तय करते हैं कि Object का कौनसा Attribute किस प्रकार के मान (Integer, Character, Float, etc…) द्वारा Represent हो सकता है। जो Attribute जिस प्रकार के मान द्वारा Represent हो सकता है, उस Attribute को उसी प्रकार के Data Type के साथ Declare कर दिया जाता है।
Data Type के साथ Object के Attributes को Declare करने पर Object के विभिन्न Abstract Attributes, Class के Data Members कहलाते हैं।
इसी बात को यदि हम दूसरे शब्दों में कहें तो Abstraction से प्राप्त Abstract Attributes किस प्रकार के Data Store करेंगे, इस तथ्य पर निर्भर करते हुए या इस बात को ध्यान में रखते हुए, इन विभिन्न Abstract Attributes के Basic Data Type को तय किया जाता है और जब इन Abstract Attributes को उनके Data Type के साथ Class में Specify किया जाता है, तब इन Abstract Attributes को Class के Data Members कहते हैं।
Behaviors – The Methods of The Class
कोई Object जो काम करता है, उन कामों को उस Object का Behavior कहते हैं। लेकिन जब हम किसी Object को Computer में Represent करना चाहते हैं, तब हम ये नहीं देखते हैं कि Object वास्तव में क्या-क्या कर सकता है, बल्कि हम ये देखते हैं, कि Object के वे कौन से काम हैं, जिनके द्वारा Object अपने किसी Attribute के मान को Change करता है, जिन्हें Abstraction की प्रक्रिया द्वारा Identify किया गया है।
किसी समस्या से सम्बंधित Abstract Attributes को उस Object के जो Behaviors प्रभावित करते हैं, Object के वे Behaviors ही उस समस्या से सम्बंधित Behaviors हैं। C# में Object की Class द्वारा इन Behaviors को Represent करने के लिए हमें Methods का प्रयोग करना होता है। Methods C# के वे Code Segments होते हैं, जो किसी Object के किसी ना किसी Abstract Attribute के मान को किसी ना किसी प्रकार से Change करते हैं।
यानी वे Operations जिन्हें Perform करने पर Object के किसी Abstract Attribute के मान में परिवर्तन हो, Methods कहलाते हैं।
Problem Design (OOPS) v/s Problem Implementation (OOPL)
OOPS व OOPL दोनों के आधार पर हमेंशा किसी भी OOPS Concept की दो परिभाषाऐं बनती हैं। एक परिभाषा केवल OOPS के Concept को Represent करने का काम करती है, जबकि दूसरी परिभाषा उस पहली परिभाषा के आधार पर किसी Programming Language में OOPS के Concepts को Implement करने से सम्बंधित होती है।
जब हम OOPS के सम्बंध में कोई परिभाषा देते हैं, तो वह परिभाषा किसी Real World Problem से सम्बंधित किसी Real World Physical Object के सम्बंध में होती है।
लेकिन जब हम OOPS की विभिन्न परिभाषाओं को किसी Programming Language में Implement करते हैं, तब OOPS का मुख्य Purpose ये होता है कि किसी Real World Object को Best तरीके से किसी Programming Language में Logically Represent किया जाए, ताकि समस्या से सम्बंधित किसी Real World Object को Computer में एक नए Data Type जिसे Abstract Data Type कहते हैं, के रूप में Represent किया जा सके।
किसी समस्या को Solve करने के लिए हम दो Approach Use कर सकते हैं। पहला Approach पूरी तरह से OOPS के Concepts पर आधारित होता है और Problem के Solution को Design करने से सम्बंधित होता है।
यानी हम एक भी Line की Coding लिखे बिना भी किसी Software को OOPS के Concept के आधार पर Design कर सकते हैं। अन्तर केवल इतना होगा कि इस Design का कोई प्रत्यक्ष परिणाम हमें प्राप्त नहीं होगा। लेकिन OOPS के आधार पर हम जिस Modal को बनाते हैं, उस Modal को यदि किसी OOPL Language में Implement कर दिया जाए, तो हमें हमारी समस्या का प्रत्यक्ष परिणाम भी प्राप्त हो सकता है।
इस बात को सरल तरीके से कहें तो दो संख्याओं को जोडने का Algorithm लिख देने से हमें दो संख्याओं का योग प्राप्त नहीं होगा। लेकिन दो संख्याओं का योग करने के लिए किस प्रकार के Steps को Follow करना होगा, उस Process का पता चलता है। जबकि इस Algorithm के आधार पर किसी Programming Language में Computer Codes लिख दि, जाए, तो हमें दो संख्याओं की Actual जोड प्राप्त हो जाएगी।
यानी Algorithm बनाना Problem Design करने से सम्बंधित काम है, जबकि Program बनाना उस Algorithm को Implement करने से सम्बंधित काम है।
इसी तरह से OOPS के Concept को Apply करना Problem Design करने से सम्बंधित है जबकि OOPS के Concept के आधार पर बनने वाले Design को C# जैसी किसी Computer Language में Implement करना Problem Solve करने से सम्बंधित काम है।
हम ऐसा भी कह सकते हैं कि जब किसी Problem को Real World में Define करना होता है, तब Problem के विभिन्न Objects को Physical रूप में Identify कर सकते हैं, लेकिन जब उसी Problem को Computer में Logical रूप में Define करना होता है, तब Problem को एक नए Data Type के रूप में Represent करते हैं, जिसे हम किसी Computer Programming Language में Abstract Data Type या Object की Class के रूप में Identify करते हैं।
Encapsulation – The Unitizing Process of Attributes and Behaviors
जैसाकि हमने पहले कहा कि OOPS व OOPL के आधार पर हर OOPS Concept की दो परिभाषाऐं होती हैं। यही नियम OOPS के Encapsulation Concept के सम्बंध में भी लागू होती है।
जब हम OOPS के सम्बंध में देखते हैं, तो किसी Object की Internal Workings को या उसके काम करने के जटिल तरीकों को समझे बिना उसे उपयोग में लेने के लिए कुछ व्यवस्थाऐं कर देना, इस प्रक्रिया को Encapsulation कहते हैं। इस Concept को समझने के लिए एक उदाहरण देखते हैं।
मानलो कि हमारे पास एक Computer है। जब हम Computer को Switch ON करते हैं, तो ये जाने बिना कि Computer किस प्रकार से ON होता है, हम Computer को उपयोग में लेते रहते हैं। इसी तरह से किसी Car के Accelerator को Press करने पर Car की Speed किस प्रकार से और क्यों बढती है, ये जाने बिना एक Driver Car को चलाता रहता है। इन दोनों उदाहरणों में Computer व Car दो Encapsulated Objects हैं, जिनके काम करने के तरीके यानी Internal Working को जाने बिना उन्हें से उपयोग में लिया जाता है।
यदि हम इसी Concept को C# Programming Language के सन्दर्भ में समझें, तो परिभाषा बदल जाती है। Programming Language C# के सम्बंध में जब हमें Encapsulation को परिभाषित करना होता है, तो हम इस Concept को अग्रानुसार परिभाषित करते हैं।
समस्या से सम्बंधित Abstracted Attributes को उनके Data Type के साथ Specify करने की Process से उस Object के Data Members प्राप्त होते हैं और समस्या से सम्बंधित जिन Operations को Perform करके कोई Object अपने किसी Abstract Attribute की State या Value में परिवर्तन करता है, उस Operation को Object का Behavior कहते हैं और इन Operations को C# में Implement करने के लिए हम जिन Codes को लिखते हैं, उन Code Blocks को Methods कहते हैं।
यानी किसी समस्या से सम्बंधित Object के Physical Attributes व Behaviors को C# में Implement करने पर Object के समस्या से सम्बंधित विभिन्न Abstract Attributes को Data Members व विभिन्न Attributes को Change करने वाले Operations को Methods के रूप में Specify करते हैं।
किसी भी Object के गुण यानी उसके Attributes व उसके Behaviors दोनों, किसी एक ही Physical Object के हिस्से होते हैं। इसलिए Object के Attributes को Represent करने वाले Data Members व Behaviors को Represent करने वाले Methods, दोनों को एक इकाई या Unit के रूप में Specify करने की प्रक्रिया को OOPL में Encapsulation कहते हैं।
Encapsulation के बाद यानी Computer में किसी समस्या से सम्बंधित Object के विभिन्न Data Members (Attributes) व Methods (Behaviors) को Combine करके एक Unit के रूप में Encapsulate करने के बाद] जो Specification हमें प्राप्त होता है, उस Specification को यदि एक नाम दे दिया जाए, तो वह Specification समस्या से सम्बंधित किसी Object की Class का Representation होता है।
C# के लिए ये एक नए प्रकार का Data Type या Type होता है, जो किसी Real World Problem से सम्बंधित किसी Real World Object को Computer में Logically Represent करने में सक्षम होता है। इसे Abstract Data Type भी कह सकते हैं, क्योंकि ये किसी समस्या के Abstraction से प्राप्त Abstracted Attributes के आधार पर बनता है।
इस Post में हमने OOPS (Object Oriented Programming System) से सम्बंधित विभिन्न Basic Concepts के बारे में जाना। अगले Post में हम इन OOPS Concepts को Use करते हुए Class Create करने के बारे में जानेंगे, जो कि एक प्रकार का Abstract Data Type होता है और किसी Real World Object को Program में Logically Represent करने हेतु बनाया जाता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C#.NET in Hindi | Page:908 | Format: PDF