Differences between C++ and Java Programming Language: वास्तव में Java “C” व “C++” का ही Modified रूप है। चूंकि आज भी ज्यादातर Professional लोग बडे Projects के लिए “C++” को ही चुनते हैं, इसलिए ये जानना जरूरी है कि Java में “C++” की किन विशेषताओं को लिया गया है और किन चीजों को छोडा गया है जो सामान्य Programmer को परेशान करती हैं।
Preprocessor
“C” व “C++” में Program के Compilation को Control करने के लिए Preprocessors का प्रयोग किया जाता है। “C++” का Compiler किसी भी Source Program को Compile करने से पहले सभी Preprocessor Directives को Expand करने का काम करता है। सभी “C” व “C++” के Programmers जानते हैं कि Preprocessors का प्रयोग करने पर Program की जटिलता बढ जाती है। “C++” के Programmer, Preprocessors का प्रयोग करके लगभग स्वयं की Language बनाना शुरू कर देते हैं। ज्यादातर Statement के लिए व Constant मानों के लिए वे Preprocessors का प्रयोग करते हैं। इससे Program की जटिलता इतनी बढ जाती है कि कोई भी नया Programmer यदि उस Program को समझना चाहे तो उसे काफी परेशानी आती है। साथ ही इन Program Codes को Reuse भी नहीं किया जा सकता है।
Preprocessor Directives की एक कमी ये भी है कि इनकी Type Checking कभी भी निश्चित नहीं होती। यानी ये हमेंशा एक String Format को Follow करते हैं। यदि हम #define MAX 10 Statement लिखते हैं, तो यहां मान 10 Integer नहीं बल्कि एक String होता है।
Java में Preprocessors को हटा दिया गया है। हालांकि Java Preprocessor Directives के समान ही Functionality प्रदान करता है लेकिन अधिक Control के साथ। Java में #define के स्थान पर Constant Data Members का प्रयोग किया जाता है। इसका परिणाम ये है कि Java के Codes को पढना व समझना “C++” के Codes को पढने व समझने की तुलना में अधिक सरल हो जाता है। साथ ही Java के Programs में Header Files का प्रयोग नहीं होता है बल्कि Java का Compiler, Source Code File से सीधे ही Class Definitions बना लेता है जिसमें Class Definitions व Methods दोनों होते हैं।
Pointers
जितने भी “C” या “C++” के Programmers हैं, वे सभी मानते हैं कि यदि Pointers को पूरी सावधानी से प्रयोग ना किया जाए तो ऐसे Errors Generate होते हैं, जिन्हें Debug करने में दिमाग का पसीना निकल जाता है। साथ ही Pointers के प्रयोग से Program हमेंशा समझने में जटिल हो जाता है, हालांकि Pointers के प्रयोग से हमारा Program, Directly Memory Locations को Access कर सकता है इसलिए Program की Speed तुलना में तेज हो जाती है।
“C++” के Programmers हमेंशा Dynamic Data Structure को Create व Maintain करने के लिए Pointers Arithmetic का प्रयोग करते हैं और हमेंशा जटिल Bugs में फंसते हैं। “C++” Programmers का ज्यादातर समय उन Programs को Create करने में नहीं बीतता जिनमें Pointer का प्रयोग होता है, बल्कि उन Programs को Debug करने में बीतता है।
Java Pointers को Support नहीं करता है। यानी Java में Pointes जैसी कोई व्यवस्था नहीं है जो Directly Memory को Access कर सके। हालांकि Pointers के स्थान पर Java में References का बहुत प्रयोग किया जाता है जो कि Pointers के समान ही काम करते हैं लेकिन References का Arithmetic सामान्य Arithmetic जैसा ही होता है ना कि Pointer Arithmetic जैसा।
इस Process से उन सभी Errors से छुटकारा मिल जाता है जो Pointers के Mismanagement के कारण Generate होती हैं। References का प्रयोग करने से Java के Program पर्याप्त Readable व समझने योग्य होते हैं जबकि Pointers का चाहे पूरी तरह से सही प्रयोग किया जाए, लेकिन Program आसानी से समझने योग्य व Readable नहीं होता है।
“C” व “C++” के Programmers सोंच सकते हैं कि वे जो काम Pointers का प्रयोग करके काफी आसानी से कुछ Data Structures को Implement कर सकते थे वे काम Java में नहीं किए जा सकेंगे। जैसे कि Dynamic Arrays Java में Create नहीं हो सकते। लेकिन ऐसा नहीं है। वास्तविकता ये है कि वे सभी काम Java में Objects व Objects के Array के प्रयोग से अधिक आसानी व Reliability के साथ किए जा सकते हैं।
Java हमें कुछ Runtime Security भी प्रदान करता है जो कोई अन्य Language Provide नहीं करती। जैसे कि यदि हम “C” या “C++” में किसी Array की Size को 10 Define किया है और हम 11th Index Number पर कोई मान Input करना चाहें तो Java हमें ऐसा नहीं करने देता जबकि “C” व “C++” में हम ऐसा करके किसी दूसरे Data को Damage कर सकते हैं।
Structure and Union
“C” में दो तरह के (Structure and Union) और “C++” में तीन तरह के (Structure, Union and Class) Complex Data Types हैं। Java में केवल एक ही Complex Data Type है जिसे Class कहते हैं। “C” व “C++” में जितने काम इन तीनों को प्रयोग करके किए जाते हैं Java में वे सभी काम केवल एक Class से ही किया जा सकता है।
जब हमें Structure या Union के Functionality की जरूरत होती है तो Java हमें इन Functionality को Class द्वारा प्राप्त करने के लिए बाध्य करता है। हालांकि ऐसा लग सकता है कि Java में Programmers को Structure व Union के स्थान पर Class Use करने के लिए Extra काम करना पडेगा लेकिन ऐसा नहीं है। बल्कि Class के प्रयोग से Program की जटिलता कम हो जाती है।
Java बनाने वालों ने इसी बात को प्राथमिकता दी है कि जितना हो सके उतना Java को Simple व आसानी से समझने योग्य Language रखा जाए, इसलिए Java में से “C” व “C++” की उन चीजों को हटा दिया गया है जो सीखने व समझने में परेशानी Create करती हैं और Language को जटिल बनाती हैं।
वैसे “C” व “C++” को उन लोगों के लिए लिखा गया था जो पहले से ही पेशेवर Programmer थे, लेकिन Java को नए Programmers को ध्यान में रख कर Develop किया गया है, जो कि पेशेवर नहीं हैं और Computer को बहुत गहराई से नहीं जानते बल्कि जिन्हें Computer का सामान्य ज्ञान ही है।
चूंकि Java में Structure व Union नहीं हैं इसलिए Java एक पूर्ण Object Oriented Programming Language है, क्योंकि इसमें जो भी काम करना होता है, उसके लिए Class Develop करनी पडती है। इससे Program Codes को ना केवल Reuse किया जा सकता है बल्कि Program को Maintain करना भी अन्य Languages की तुलना में काफी सरल होता है।
Functions
“C” व “C++” में सभी Program Codes को किसी ना किसी Function में लिखा जाता है। यहां तक कि Main Program भी एक Function main() में होता है जहां आवश्यकतानुसार अन्य Functions को Call करके अपना काम पूरा किया जाता है। ये Functions Global रखे जाते हैं ताकि पूरे Program का कोई भी अन्य Function इन्हें Call कर सके और Data पर Required Processing कर सके।
“C++” में भी Functions होते हैं जिनके माध्यम से Class के Data को Access किया जाता है। इन Functions को ही Method कहा जाता है। “C++” Class के Methods Java Class के Methods के समान ही होते हैं। फिर भी चूंकि “C++” “C” जैसी Procedural Language को भी Support करता है इसलिए इसे पूरी तरह से Object Oriented Programming Language नहीं कहा जा सकता, बल्कि इसे Hybrid Language कहा जाता है। इस स्थिति में “C++” के Class के Methods व Class के बाहर के Functions दोनों का Mixture होता है, इसलिए कुछ हद तक “C++” में Confusion की स्थिति भी बनी रहती है जिससे कई बार अजीब तरह के Bugs का सामना करना पडता है।
Java में कोई Function नहीं होता है, इसलिए Java “C++” की तुलना में पूरी तरह से Pure Object Oriented Programming Language है। Java Programmer को इस बात के लिए बाध्य करती है कि Programmer अपने सभी Routines को Class Methods के रूप में व्यवस्थित करके रखे। Java की इस बाध्यता के कारण Programmer अपने Codes को अधिक अच्छे तरीके से Organize करके रखता है।
Multiple Inheritance
Multiple Inheritance “C++” की एक ऐसी व्यवस्था है जिसमें हम कई Classes से अपनी आवश्यकतानुसार कुछ-कुछ Features को लेकर एक नई Class बना सकते हैं। यानी हम एक Class को कई Parent Class से Derive कर सकते हैं। हालांकि Multiple Inheritance वास्तव में काफी Powerful है, लेकिन कई Classes से एक Derive Class बनाने व उसे Maintain करने में Programmer को काफी परेशानी का सामना करना पडता है।
Java Multiple Inheritance को Support नहीं करता है। “C++” की इस Functionality को हम Java में Interfaces का प्रयोग करके प्राप्त कर सकते हैं। Java के Interfaces Object Method Description Provide करते हैं लेकिन इनमें कोई Implementation नहीं होता है।
Strings
“C” व “C++” में Text Strings को Handle करने के लिए कोई Built – In Support नहीं है। String को Handle करने के लिए “C” व “C++” Programmers को एक Null Terminated Array का प्रयोग करना पडता है। Java में Strings को एक First Class Object की तरह Implement किया जाता है यानी, Strings Java Language का मुख्य बिन्दु या Core है। Java में हम एक Object के रूप में String को Implement करते हैं, जिससे हमें कई Advantages प्राप्त होती है।
goto Statement
“C” व “C++” में इस Statement को आवश्यकतानुसार काफी Use किया जाता है। लेकिन इसके Use करने पर जितनी तरह की परेशानियां आती हैं, उन्हें तय करना ही मुश्किल है। goto Statement का प्रयोग यदि बडे Program में किया जाता है, तो किसी नए Programmer के लिए उस Program को समझना नामुमकिन हो जाता है। ये एक Branching Statement है, लेकिन Program में ये Statement Program Control को काफी Jump करवाता है, जिससे Program की Efficiency भी प्रभावित होती है।
Java में इस Statement को Support नहीं किया गया है। Java ने goto को एक Keyword के रूप में मान्यता दी है लेकिन इसके उपयोग को Support नहीं किया है।
Operator Overloading
Operator Overloading को Java में Support नहीं किया गया है। Operator Overloading “C++” की एक ऐसी तकनीक है जिससे किसी भी Primary Operator को आवश्यकतानुसार दूसरा अर्थ प्रदान कर दिया जाता है। जैसे + Operator का प्रयोग दो Objects को जोडने के लिए किया जा सकता है। हालांकि Java में इस काम को Class में किया जाता है लेकिन Operator Overloading तकनीक को Java में छोड दिया गया है।
Operator Overloading Programmer के लिए एक सुविधा होती है लेकिन इससे एक ही Operator को एक ही Program में विभिन्न अर्थ प्रदान कर दिए जाने से Program को समझने में Confusion हो जाने की सम्भावना रहती है। इसलिए इस तकनीक को Java में छोड दिया गया है।
Automatic Type Casting
“C” व “C++” में Automatic Type Casting हो सकती है। यानी एक Integer प्रकार के Variable को यदि Float प्रकार का मान प्रदान करना हो, तो “C” व “C++” का Compiler Automatic Type Casting करके एक Variable के मान को दूसरे Variable के मान में Automatically Convert कर देता है। इसे Automatic Type Casting कहलाती है। जबकि Java में इसे Support नहीं किया गया है। क्योंकि जब किसी एक Data Type के Variable को दूसरे प्रकार के Data Type के Variable का मान प्रदान किया जाता है, तो Data के मान का Loss हो जाता है।
जैसे यदि Integer प्रकार के Variable को किसी Float प्रकार के Variable का मान प्रदान किया जाए, तो Integer प्रकार के Variable में Float प्रकार के मान में दसमलव के बाद की संख्या Store नहीं होती है। यानी दसमलव के बाद की संख्या का Loss हो जाता है। इसलिए Java में इस Automatic Type Casting को Support नहीं किया गया है। Java में यदि किसी Data के मान का किसी भी प्रकार की प्रक्रिया से Loss होता है तो Java Automatic Type Casting नहीं करता है। इसकी Type Casting Programmer को ही करनी पडती है।
Variable Number of Arguments
“C” व “C++” में हमने देखा है कि हम printf() Function या scanf() Function में अपनी आवश्यकतानुसार एक या एक से अधिक चाहे जितने भी Arguments प्रदान कर सकते हैं। यदि हमें चार Variable के मान Output में Print करने हों तो हम printf() Function में चार Variable Argument के रूप में भेज सकते हैं और यदि केवल एक ही Variable का मान Print करना हो तो केवल एक Argument भी printf() Function में भेज सकते है। हालांकि ये एक अच्छा तरीका है लेकिन Java में इसे Support नहीं किया गया है। क्योंकि Compiler ये कभी Check नहीं कर पाता है कि उसे जिस Argument के मान को Print करना है वह उचित Data Type का है या नहीं।
Command Line Argument
Java Program में जिस तरह से Command Line पर Argument Pass किए जाते हैं वे “C” व “C++” के Program में Pass किए जाने वाले Arguments की तुलना में थोडे अलग होते हैं। “C” व “C++” में System main() Function को दो Arguments Pass करता है। पहला Argument argc और दूसरा Argument argv होता है।
- पहला Argument argc ये Specify करता है कि दूसरे Argument argv में कितने Arguments हैं।
- दूसरा Argument argv एक Array of Characters का Pointer होता है। इसी Argument में Command Prompt पर दिए जाने वाले Actual Arguments होते हैं।
Java में System Command Line से केवल एक ही Argument args Java Program में Pass करता है। ये एक Strings का Array होता है जिसमें Command Line Arguments होते हैं।
“C” व “C++” में Command Line Arguments एक Program में Pass होते हैं। इस Argument में उस Program का नाम भी होता है जिसमें Arguments को Pass करना होता है। ये नाम Command Line पर सबसे पहले First Argument के रूप में लिखा जाता है। Java में हम पहले से ही उस Program का नाम जानते होते हैं जिसमें हमें Argument भेजना होता है। ये नाम हमेंशा उस Program के Class का नाम ही होता है, इसलिए Command Prompt पर हमें केवल Argument ही Pass करना होता है। (Differences between C++ and Java Programming Language)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Java Programming Language in Hindi | Page: 682 | Format: PDF