Tuesday, September 23, 2014

Polymorphism व Overloading, दोनों के बीच का अन्‍तर जानना जरूरी है एक अच्‍छा OOPS Programmer बनने के लिए।

Difference between Polymorphism and Overloading in C++: जैसाकि हमने पहले भी बताया कि एक Class “C” के Structure का ही Modified रूप है। यानी हम Structure प्रकार के Variable तो Declare कर सकते हैं, लेकिन जिस प्रकार से Built – In प्रकार के Data Type के दो Variables को हम आपस में जोड सकते हैं, ठीक उसी प्रकार से किसी Structure के दो Variables को हम नहीं जोड सकते। इसे समझने के लिये हम एक उदाहरण देखते हैं। माना एक Structure निम्नानुसार है-
?
1
2
3
4
5
6
7
struct Add
{
    int num1;
    int num2;
};
 
struct Add A, B, C ;
यदि हम C = A + B ; करें, तो ये एक गलत 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 जैसे कि +, = आदि को इस लायक बनाया जाता है कि वे User Defined Data Type के विभिन्न प्रकार के Variables या Objects पर क्रिया कर सकें। विभिन्न Operators को इस लायक बनाने की क्रिया को Operators की Overloading करना कहा जाता है।
जब कई Functions के नाम समान होते हैं, लेकिन उनके Arguments या Parameters की संख्‍या या फिर Formal Arguments के Data Type में आपस में अन्तर होता है, तो इसे Functions की Overloading होना कहा जाता है। Overloading से एक Programmer के लिए Program लिखना व समझना आसान हो जाता है। यह भी Polymorphism का एक तरीका है।

Dynamic Binding

किसी Object के Reference में कौनसा Function Call होना चाहिए, जब ये बात Program के Compile Time में तय होती है, तो इसे Early Binding कहते हैं। जबकि किसी Object के Reference में किसी काम के लिए कौनसा Procedure Execute होगा, ये बात जब Program के Runtime में तय होती है, तब इसे Late Binding या Dynamic Binding कहते हैं। Polymorphism के अन्तर्गत Dynamic Binding का काम होता है। इसे समझने के लिए निम्न चित्र देखिए-



इस चित्र में हम देख सकते हैं कि Shape Class एक Base Class है, जिसे Inherit करके तीन नई Classes Circle, Box व Triangle को Create किया गया है। चूंकि ये तीनों ही Classes Shape Class से Inherited हैं, इसलिए Base Class Shape का Draw() Method तीनों ही Classes में Inherited है।
अब मानलो कि हमने तीनों Derived Classes का एक-एक Object Create किया और उस Object को Draw करने के लिए Draw() Method को Call किया। ऐसे में जब हम Circle Class के Object के लिए Draw Method Call करते हैं, तब Compiler Circle Class के Draw Method को Call करके Circle Draw करता है।
जब हम Box Object Draw करने के लिए Box Class के Object के Reference में Draw() Method को Call करते हैं, तब Compiler Box Class के Draw Method को Execute करता है।
इसी तरह से जब हम Triangle Class का Object Create करना चाहते हैं, तब Compiler Triangle Class के Draw Method को Execute करके Triangle Draw कर देता है। यानी एक ही नाम का Draw Method Create हो रहे Object की Class के आधार पर उसी Class के Draw Method को Execute करता है, जिस Class का Object Create किया जा रहा है। इस प्रक्रिया को Object के साथ Method की Binding होना कहते हैं।

1 comment: