Blogger Widgets

Total Page visits

Saturday, February 16, 2013

Java and C# similarity and differences

சி# மொழி, சி++ மொழியிலிருந்து வளர்த்தெடுக்கப்பட்டது. அதேபோல ஜாவா மொழியும் சி++ மொழியை அடிப்படையாகக் கொண்டே உருவாக்கப்பட்டது. எனவே ஜாவாவுக்கும் சி# மொழிக்கும் இடையே பல ஒற்றுமைகளைக் காண முடியும். அதே வேளையில் சி# மொழி, ஒருவகையில் ஜாவா மொழிக்குப் போட்டியாக உருவாக்கப்பட்டது எனக் கூறல் தகும். எனவே ஜாவாவில் இல்லாத சில பயனுள்ள கருத்துருக்களை சி# மொழியில் காண முடியும். இனி இரு மொழிகளுக்கும் இடையே காணப்படும் ஒற்றுமை வேற்றுமைகளைப் பார்ப்போம்.
ஒற்றுமைகள்

இரு மொழிகளிலும் பொதுவாகக் காணப்படும் கருத்துருக்களைப் பட்டியலிடுவோம்.  அவற்றுள் சில வெவ்வேறு பெயர்களில் அழைக்கப்பட்டாலும் செயல்பாட்டளவில் ஒன்றாக விளங்குகின்றன. 

(1) ஜாவா புரோகிராமைக் கம்ப்பைல் செய்தால் கம்ப்யூட்டர் சாராத (machine independent) பைட்கோடு கிடைக்கும். அது ஜாவா ரன்டைம் எனப்படும் கட்டுப்படுத்தப்பட்ட இயக்கச் சூழலில் (Managed Execution Environment) செயல்படும். சி# புரோகிராமைக் கம்ப்பைல் செய்தால் மொழிசாராத (language independent) இடைமொழிக் குறிமுறை (Intermediate Language Code) உருவாகும். அது பொதுமொழி இயக்கத்தளம் (Common Language Runtime) எனப்படும் கட்டுப்படுத்தப்பட்ட இயக்கச் சூழலில் செயல்படும். 

(2) சி, சி++ மொழிகளில் உள்ள int, float, char, double ஆகிய தரவினங்களும், if, switch, while, do while, for ஆகிய கட்டளை அமைப்புகளும் பெரும்பாலான ஆப்பரேட்டர்களும் ஜாவா, சி# இரு மொழிகளும் தக்கவைத்துக் கொண்டுள்ளன. 

(3) விடுவிக்கப்பட்ட நினைவகப் பகுதிகளைத் தானாக மீட்டெடுத்து, மறு பயன்பாட்டுக்குத் தயார் நிலையில் வைக்கும் கார்பேஜ் கலெக்‌ஷன் உண்டு. 

(4) ஒரு கிளாஸின் உறுப்புகளை இயக்கநேரத்தில் அறிந்து கொள்ள, சக்தி வாய்ந்த உள்ளறிதல் (Reflection) என்னும் வசதி உள்ளது. 

(5) சி, சி++ மொழிகளில் உள்ள ஹெடர் ஃபைல்கள் இரண்டிலும் கிடையாது. அவற்றுக்குப் பதிலாக ஜாவாவில் பேக்கேஜுகளும்ம், சி# மொழியில் அசெம்பிளிகளும் உள்ளன. 

(6) அனைத்துக் கிளாஸுகளும் object என்னும் பேஸ் கிளாஸிலிருந்து தருவிக்கப்பட்டவை. 

(7) அனைத்து ஆப்ஜெக்டுகளும் ஹீப் நினைவகத்தில் உருவாக்கப்படுகின்றன. புதிய ஆப்ஜெக்ட் உருவாக்க new என்னும் சொல் பயன்படுகிறது. 

(8) பல்புரியாக்கம் எனப்படும் மல்ட்டி திரெடிங் உண்டு. 

(9) மல்ட்டி திரெடிங் புரோகிராமில் ஒரு திரெட் நிறைவேற்றிக் கொண்டிருக்கும் குறிப்பிட்ட செயல்பாட்டில் இன்னொரு திரெட் தலையிடாமல் இருக்க அச்செயலைப் புரியும் மெத்தடை ஜாவா மொழியில் synchronized என்னும் சொல்மூலம் பூட்டிக் கொள்ள வேண்டும். சி# மொழியில் இதே பணிக்கு locked என்னும் சொல் பயன்படுகிறது. 

(10) இரண்டு பேஸ் கிளாஸுகளை அடிப்படையாகக் கொண்ட மல்ட்டிபிள் இன்ஹெரிட்டன்ஸ் கிடையாது. இன்டர்ஃபேஸ்களைப் பயன்படுத்தி அத்தகைய டெரிவ்டு கிளாஸை உருவாக்க முடியும். 

(11) ஒரு கிளாஸுக்குள் இன்னர் கிளாஸுகளை உருவாக்க முடியும். 

(12) குறிப்பிட்ட அணுகுமுறையுடன்கூடிய இன்ஹெரிட்டன்ஸ் கிடையாது. 

(13) குளோபல் மாறிகள் (variables), குளோபல் மாறிலிகள் (costants), குளோபல் ஃபங்ஷன்கள் கிடையாது. மாறிகள், மாறிலிகள், ஃபங்ஷன்கள் (மெத்தடுகள்) ஒரு கிளாஸின் உறுப்புகளாகவே இருக்க வேண்டும். 

(14) ஸ்ட்ரிங்குகளும், அர்ரேக்களும் அவற்றின் நீளத்தை தம் அங்கமாகக் கொண்டுள்ளன. எனவே அவற்றின் வரம்பெல்லையை மாறியின் பெயரைக் கொண்டே சோதித்து அறிய முடியும். 

(15) ஆப்ஜெக்டுகளைச் சுட்ட ::, -> ஆகிய ஆப்பரேட்டர்கள் கிடையாது. புள்ளி ஆப்பரேட்டர் மட்டுமே உண்டு. 

(16) மாறிகள் அனைத்தும் பயன்படுத்தப்படும் முன்பு அவற்றில் தொடக்க மதிப்பிருத்தப்பட (initialized) வேண்டும். 

(17) இன்டிஜர் மதிப்பை சரி/தவறு என்னும் பூலியன் நிபந்தனைக்குப் பயன்படுத்த முடியாது. அப்பணிக்கு ஜாவாவில் boolean இனமும், சி#-இல் bool இனமும் உண்டு. 

(18) இயக்கநேரப் பிழைகளை எதிர்கொள்ள எக்ஸெப்ஷன் ஹேண்டிலிங் என்னும் விரிவான ஏற்பாடு உள்ளது. 

(19) எக்ஸெப்ஷன் ஹேண்டிலிங்கில் try பிளாக்குகள் finally பகுதியைக் கொண்டிருக்கும். 

(20) char தரவினம் யுனிக்கோடு கேரக்டரைக் குறிக்கிறது. 

  வேற்றுமைகள்

இரு மொழிகளிலும் சற்றே வேறுபாட்டுடன் செயல்படுத்தப்படும் சில கருத்துருக்களைப் பட்டியலிடுவோம்.

(1) ஜாவாவில் int, float, char, double போன்ற மூலத் தரவினங்கள் ஆப்ஜெக்டுகள் அல்ல. சி#-இல் அனைத்துத் தரவினங்களும் ஆப்ஜெக்டுகளே. 

(2) சி, சி++ மொழிகளில் உள்ள struct, enum தரவினங்கள் சி# மொழியில் உண்டு. ஜாவாவில் கிடையாது. 

(3) ஜாவாவில் for, while, do-while ஆகிய மூன்று கட்டுப்பாட்டு மடக்கிகள் (Control Loops) உள்ளன. சி# மொழியில் நான்காவதாக foreach என்கிற மடக்கியும் உள்ளது. 

(4) ஜாவாவில் மெத்தடுக்கான பராமீட்டர்கள் எப்போதுமே மதிப்புகளாகவே அனுப்பப்படுகின்றன (passed by value). சி# மொழியில் மதிப்பு மூலமாகவும், குறிப்பு மூலமாகவும் (passed by reference) ஆகிய இரு வகையிலும் அனுப்பிவைக்க முடியும். 

(5) சி# மொழியில் எந்த அடைமொழியும் இல்லாமல் ஒரு மெத்தடுக்கு மதிப்புவகைப் பராமீட்டர்களை அனுப்பும் முறைதவிர ref, out, params ஆகிய அடைமொழிகளுடன் பராமீட்டர்களை அனுப்பும் வசதியும் உள்ளது. குறிப்புவகைப் பராமீட்டர்களை அனுப்ப ref பயன்படுகிறது. மெத்தடிலிருந்து ஒரு மதிப்பைத் திரும்பப் பெற out பயன்படுகிறது. ஒரு மெத்தடுக்கு வேறுபட்ட எண்ணிக்கையில் பராமீட்டர்களை அனுப்ப params பயன்படுகிறது. ஜாவாவில் ref, out, params கிடையாது. 

(6) ஜாவா மொழியில் லேபிளுடன் சேர்ந்துவரும் break கட்டளை உண்டு. ஆனால் சி# மொழியில் அத்தகைய break கிடையாது. அப்பணியை goto கட்டளை மூலம் நிறைவேற்றிக் கொள்ளலாம். ஜாவாவில் goto கட்டளை கிடையாது. 

(7) ஜாவாவில் switch கட்டளையில் int மதிப்புகளை மட்டுமே தரமுடியும். சி#-இல் ஸ்டிரிங் மதிப்புகளையும் பயன்படுத்த முடியும். 

(8) கணக்கீடுகளில் ஒரு தரவினத்தின் வரம்பெல்லை மதிப்புகள் மீறப்படுவதைச் சரிபார்க்க checked கட்டளை சி# மொழியில் உண்டு. ஜாவாவில் கிடையாது. 

(9) ஜாவாவில் switch கட்டளையில் ஒரு case-லிருந்து அடுத்த case-க்குத் தானாக இறங்கிச் செல்லும். சி# மொழியில் தானாக இறங்கிச் செல்லது. goto கட்டளை மூலமே இறங்கச் செய்ய வேண்டும். 

(10) ஜாவாவில் ஓர் இன்டர்ஃபேஸில் const இன டேட்டா மெம்பர் இருக்க முடியும். ஆனால் சி#-இல் முடியாது. 

(11) சி#-இல் ஒரு கிளாஸிலுள்ள மெம்பர்களுக்கு new மாடிஃபயர் இருக்க முடியும். ஜாவாவில் அவ்வாறு இருக்க முடியாது. 

(12) ஜாவாவில் ஒரு கிளாஸின் அனைத்து மெத்தடுகளுமே முன்னியல்பாக (by default) வர்ச்சுவல் மெத்தடுகளே. டெரிவ்டு கிளாஸில் அதே சிக்னேச்சர் உள்ள மெத்தடு பேஸ் கிளாஸின் மெத்தடை ஓவர்ரைடு செய்யும். சி#-இல் வர்ச்சுவல் மெத்தடுகளை வெளிப்படையாக அறிவிக்க வேண்டும். பேஸ் கிளாஸின் ஒரு மெத்தடை டெரிவ்டு கிளாஸில் ஓவர்ரைடு செய்ய வேண்டுமெனில், பேஸ் கிளாஸில் அந்த மெத்தடை virtual எனவும், டெரிவ்டு கிளாஸ் மெத்தடை overwrite எனவும் வெளிப்படையாக அறிவிக்க வேண்டும். 

(13) சி#-இல் ஒரு கிளாஸின் டேட்டா மெம்பர்களை இனிஷியலைஸ் செய்ய static கன்ஸ்ட்ரகடர் உள்ளது. ஜாவாவில் கிடையாது. 

(14) ஜாவாவில் பாயின்டர்களைப் பயன்படுத்த முடியாது. சி#-இல் unsafe பிளாக்கினுள் பாயின்டர்களைப் பயன்படுத்த முடியும். 

(15) சி++ மொழியில் இருக்கும் ஆப்பரேட்டர் ஓவர்லோடிங் சி# மொழியில் உண்டு. ஜாவாவில் ஆப்பரேட்டர் ஓவர்லோடிங் கிடையாது. 

(16) சி# மொழியில் உள்ள delegate, event ஆகிய கிளாஸ் மெம்பர்கள் ஜாவாவில் கிடையாது. இன்டர்ஃபேஸ், இன்னர் கிளாஸ் ஆகியவற்றின் மூலமாகவே அவற்றின் பணிகளை நிறைவேற்றிக் கொள்ள முடியும். 

(17) properties என்பது சி# கிளாஸின் உள்ளிணைந்த பண்புக்கூறு. ஆனால் ஜாவாவில் இதற்கென மெத்தடுகளை எழுதிச் செயல்படுத்த வேண்டும். 

(18) ஒரு கிளாஸ் அல்லது ஒரு கிளாஸ் மெம்பரை அணுக internal என்னும் அணுகுமுறை சி#-இல் உள்ளது. ஜாவாவில் கிடையாது. 

(19) சி# மொழியில் இருக்கும் இண்டெக்ஸர்களுக்கு இணையான கருத்துரு ஜாவாவில் எதுவுமில்லை. 

(20) சி# மொழியில் எக்ஸெப்ஷன்களைக் கையாளுகையில் catch பிளாக்குகளைச் சரியான வரிசையில் அமைக்க வேண்டும். ஜாவாவில் எந்த வரிசையிலும் அமைக்கலாம். 

(21) சி, சி++ மொழிகளில் ஸ்டிரிங் என்பது ஒரு கேரக்டர் அர்ரே ஆகும். ஆனால் ஜாவா, சி# மொழிகளில் அவ்வாறில்லை. எனினும் சி# மொழியில் குறிப்பிட்ட அளவில் ஒரு கேரக்டர் அர்ரே போலவே கையாளலாம். ஜாவாவில் அவ்வாறு முடியாது. 

(22) சி# கம்ப்பைலர் எக்ஸிகியூட்டபிள் (.exe) ஃபைலை உருவாக்குகிறது. அதனைத் தனித்தியக்கலாம். ஆனால் ஜாவா கம்ப்பைலர் class ஃபைலை உருவாக்கும். அதனை ஜாவா இன்டர்பிரட்டர் மூலம் இயக்க வேண்டும். 

படித்ததில் பிடித்தது 

1 comment:

அணில் said...

பயனுள்ள பகிர்வு.