Ticker

6/recent/ticker-posts

C++ पूरी सीखे हिंदी में , शुरू से अंत तक।

 Data Hiding, Data Abstraction and Encapsulation



किसी System की Inner Working को Hide करके के उपयोग करने के लिए एक Well Defined Interface तैयार करने की प्रक्रिया को हम Encapsulation कहते हैं। Create होने वाले Object को Real World में जब Use करना होता है, तब हम उसी Well Defined Interface द्वारा उस Object के Data को Access करते हैं। Encapsulation का सबसे अच्छा उदाहरण एक Watch का लिया जा सकता है। एक Wristwatch


किस प्रकार से काम करता है. Internally उस Wrist Watch में क्या प्रक्रिया होती है. Wristwatch


चाहे Analog हो तो Digital, वह किस प्रकार से Hours, Minutes व Seconds को Manage


करता है, यानी Wristwatch की Internal Working से हमें तब तक कोई मतलब नहीं होता है, जब


तक कि Wristwatch सही तरीके से काम करती है। हम केवल समय जानने के लिए किसी


Wristwatch को Use करते हैं।


Data व Data पर Perform होने वाले Operations के Functions को एक Unit के रूप में Bind करके Object की Class बनाने की प्रक्रिया को Encapsulation कहते हैं इस Encapsulation के Concept के आधार पर बनने वाली Class के Data को केवल उसी Class में Define किए गए Member Functions ही Access कर सकते हैं।


इन Member Functions के अलावा कोई भी External Function उस Specific Class के Data को Access नहीं कर सकता है। किसी Class के अन्दर Define किए गए Member Function ही Program व Object के Data के बीच Interface प्रदान करते हैं। बिना इन Member Function के Main Function, किसी अन्य Class में Define किया गया Member Function या कोई भी अन्य User Defined External Function उस Specific Object के Data को Access नहीं कर सकता है। यानी Main Program से Object का Data पूरी तरह से Insulated या अलग होता है।


इस Insulation के कारण किसी specific Object का Data किसी अन्य User Defined External Function या Main Program से छुपा हुआ रहता है। इसलिए इस Insulation की प्रक्रिया को Data Hiding कहते हैं।


Data Abstraction एक ऐसी प्रक्रिया होती है, जिसमें किसी समस्या से सम्बंधित जरूरी बातों को बिना जरूरी बातों से अलग किया जाता है। फिर उन जरूरी बातों को समस्या के किसी Object की Properties के रूप में Describe किया जाता है। उदाहरण के लिए मानलो कि किसी Company के Administrator को अपनी Company के सभी Employees की Educational Information की जानकारी लेनी है। इस स्थिति में किसी Employee की विभिन्न Properties निम्नानुसार हो सकती


Name Of the Employee Father's Name of the Employee


Address of the Employee City of the Employee


State of the Employee Country of the Employee


Date Of Birth of the Employee Education Of the Employee


Hobbies of the Employee


Experience in the Company of the Employee Extra Degree Of the Employee


Cast of the Employee Religion of the Employee


किसी Employee की और भी बहुत सी विशेषताएं हो सकती हैं, लेकिन चूंकि समस्या में Company के Administrator को अपने Employees की केवल Educational Information से ही मतलब है. शेष Information का Company के Administrator के लिए कोई उपयोग नहीं है, इसलिए Administrator की समस्या से संबंधित जरूरी बातें केवल निम्नानुसार ही हैं:


Name Of the Employee


Education Of the Employee Extra Degree Of the Employee


इनके अलावा एक Employee की जो भी Information हैं, वे इस समस्या के लिए जरूरी नहीं हैं, हालांकि किसी अन्य समस्या के लिए ये जरूरी हो सकती हैं। इस तरह से हमने एक Employee की विभिन्न विशेषताओं में से उन विशेषताओं को अलग किया जो Company के Administrator के लिए जरूरी हैं या हमारी Current समस्या से सम्बंधित हैं। इस प्रक्रिया को ही Abstraction कहते है, जिसमें हमने Employee की उन जरूरी बातों को उन बिना जरूरी बातों से अलग किया है, जिनकी Company के Administrator को जरूरत है।


किसी अन्य समस्या जैसे कि Employees के Bio Data को Manage करने वाली Class को Create करते समय ये सभी Information जरूरी हो सकती हैं। उस स्थिति में कुछ अन्य बातें होंगी जो Employee के Bio Data से सम्बंधित नहीं होंगी। तब भी हमें Employee के विभिन्न Data पर Abstraction की प्रक्रिया को लागू करके जरूरी Data को बिना जरूरी Data से अलग करना होगा।


जब हम किसी समस्या के समाधान के लिए किसी सब्जेक्ट की जरूरी बातों को बिना जरूरी बातों से अलग कर लेते हैं, यानी Object की विभिन्न Properties पर Data Abstraction की Process को लागू करने के बाद जो जरूरी Properties प्राप्त होती हैं, उन Properties को Class के Attributes के रूप में Define कर लिया जाता है और इन Attributes या Properties की State या स्थिति में परिवर्तन करने वाले Operations के Functions को Attributes के साथ एक Unit के रूप में Encapsulate कर लिया जाता है जिससे एक Description बन जाता है फिर इस Description को एक नाम दे दिया जाता है, जो कि किसी Class को Define करता है, यानी हम एक नई Class बना लेते हैं।

चूंकि हम जानते हैं कि Class OOPS में एक नए User Defined Data Type को Represent करता है और हम जो Class बनाते हैं, उस Class में Abstraction प्रक्रिया के बाद प्राप्त हुए Attributes होते हैं, इसलिए इस नए Create होने वाले Data Type को Abstract Data Type कहते हैं।


Inheritance


जिस प्रकार से हम वास्तविक जीवन में विभिन्न Classes को Subclasses में विभाजित करते हैं, ठीक उसी प्रकार से हम "C++" में भी Classes को विभिन्न Subclasses में विभाजित कर सकते हैं। जैसे जानवरों के समूह को हम पानी में रहने वाले जानवरों, वायु में उड़ने वाले जानवरों व धरती पर चलने वाले जानवरों में बांट सकते हैं। फिर हरेक जानवर को उसकी विशेषताओं के आधार पर और भागों में विभाजित कर सकते हैं। ठीक इसी प्रकार से हम "C++' में भी Classes का विभाजन कर सकते हैं. जो कि पिछली Classes की विशेषताओं के साथ अपनी भी कुछ अन्य विशेषताओं को


उपयोग में लेता है। ये प्रक्रिया OOPS में Inheritance कहलाती है।


जो मुख्य Class होती है. उसे Base Class कहते हैं और इसकी अपनी विशेषताएं होती हैं। इस Class के अन्दर और विभाजन किया जाए तो वह विभाजित Class Derived Class कहलाती है. जिसमें उसकी Base Class के गुण तो होते ही हैं, साथ ही इसके अपने भी कुछ अलग गुण होते हैं जो कि Base Class में नहीं होते।


Inheritance एक ऐसा तरीका है जिससे एक Class के objective किसी दूसरी Class के गुणों को प्राप्त कर लेते हैं। ये Hierarchical Classification को Support करता है। OOPS में Inheritance का ये Concept Reusability का idea Provide करता | इस Concept के आधार पर एक पहले से बनी हुई Class के गुणों को Derive करके नई Class बनाई जाती है।


Reusability


एक बार एक Class लिख कर तैयार कर लेने के बाद हम उसी Class को कई अन्य प्रोग्रामों में आवश्यकतानुसार उसी प्रकार से Use कर सकते हैं जिस प्रकार से Procedural Languages में Library Function का Use करते हैं। Inheritance की विशेषता का Use करते हुए हम ऐसा भी कर सकते हैं कि किसी पहले से बनाई गई Class में परिवर्तन किये बिना ही हम उसमें एक Derived Class बनाकर Base Class के गुण भी Use कर लें और अपनी Derived Class के गुण भी उसमें जोड सकते हैं।


जैसे कि माना आपने एक Class बनाया जो कि Menu बनाने का काम करता है। आप इस Class में परिवर्तन करना नहीं चाहते हैं, लेकिन आप चाहते हैं कि उसमें Animation की Capability भी आ जाए। ऐसे में आप एक नई Class बना सकते हैं, जिसमें Base Class के सारे गुण तो होंगे ही साथ में आप Animation का गुण भी उसमें जोड़ सकते हैं। इस तरह से OOPS की वजह से आप किसी Class को बार-बार लिखने से बच जाते हैं और एक ही Class को कई जगह Use कर सकते हैं। ये भी OOPS की एक खास विशेषता है।


Creating New Data Types


Object की एक विशेषता ये भी है कि ये Programmers को बनाने की भी सुविधा प्रदान करता है। एक Programmer जो भी Class Create करता है, वह

Class Computer में एक नए प्रकार के Data Type को Represent करता है और Class किसी Real World Object की विशेषताओं और क्षमताओं को Description या Specification होता है कि उस Class का Objective किस तरह का है और क्या-क्या कर सकता है।


Polymorphism and Overloading


जैसाकि हमने पहले भी बताया कि एक Class "C" के Structure का ही Modifed रूप है। यानी हम Structure प्रकार के Variable तो Declare कर सकते हैं, लेकिन जिस प्रकार से Built - In प्रकार के Data Type के दो Variables को हम आपस में जोड सकते हैं, ठीक उसी प्रकार से किसी Structure के दो Variables को हम नहीं जोड़ सकते। इसे समझने के लिये हम एक उदाहरण देते हैं। माना एक Structure निम्नानुसार है।


struct Add


int numl; int num2;


struct Add A, B, C


यदि हम c = A+ E करें, तो ये एक गलत Statement होगा किसी Class के Objects को भी हम ठीक इसी प्रकार से नहीं जोड सकते हैं, क्योंकि Class Structure का ही Modified रूप है।


इसका कारण ये है कि Compiler ये नहीं जानता है कि User द्वारा Define किए गए Variables के साथ किस प्रकार से जोड किया जाए। जबकि Built-in Data Types में जोड करने के इस तरीके को Compiler में पहले से ही निश्चित कर दिया गया है और + Operator ये जानता है कि इन Variables को कैसे जोड़ा जाए।


इसलिये User Defined Data Type के Variables या Object को जोड़ने का तरीका


Operators को बताना पडता है। यानी + Operators को ये बताना पडता है कि किस प्रकार से User Defined Data Type के Variables या Objects को ये Operator जोडेगा। इसके लिये हमें नए प्रकार के Operations Define करने होते हैं। इस प्रकार से Operators व Functions को अलग-अलग तरीके से इस बात पर निर्भर करते हुए कि वे किस प्रकार के Data पर


Operation कर रहे हैं, Use किया जाता है और इस प्रक्रिया को Polymorphism कहा जाता है।


किसी Existing Operator जैसे कि %3! आदि को इस लायक बनाया जाता है कि वे User Defined Data Type के विभिन्न प्रकार के Variables या Objects पर क्रिया कर सकें। विभिन्न Operators को इस लायक बनाने की क्रिया को Operators की overloading करना कहा जाता है।


जब कई Functions के नाम समान होते है लेकिन उनके Arguments या Parameters की संख्या या Return Data Type या फिर Formal Arguments के Data Type में आपस में अन्तर होता है, तो इसे Functions की Overloading होना कहा जाता है। Overloading से एक Programmer के लिए Program लिखना व समझना आसान हो जाता है। यह भी Polymorphism का एक तरीका है।

आवश्यकतानुसार नए Data Types

Post a Comment

0 Comments