فصل ۲:‌ مقایسه زبان جاوا و ویژگی های آن

18 مرداد 1397
java-features

در فصل گذشته به مفاهیم بنیادی و اولیه جاوا پرداختیم و شما را با موسس آن آشنا کردیم. حتی علت نامگذاری این زبان و لوگوی جاوا (قهوه جاوا) را بیان کردیم. حال در این فصل قصد داریم به تمام ویژگی های این زبان پرداخته و مقایسه ای با زبان ++C داشته باشیم. در ادامه با ما همراه باشید.

ویژگی های جاوا

ویژگی های زبان جاوا

علت اصلی پیدایش جاوا، ساخت زبانی پرتابل، امن و ساده بود. با اینحال جدا از این ویژگی ها، جاوا دارای ویژگی های بسیاری می باشد که آنرا به محبوبیت امروزش رسانده است.

لیستی از مهم ترین ویژگی های جاوا عبارتند از:

  • ساده
  • شی‌گرا
  • پرتابل
  • امن
  • مستقل از پلتفرم
  • قدرتمند
  • معماری خنثی
  • تفسیر شده
  • عملکرد بالا
  • چندریسه‌ای
  • توزیع شده
  • دینامیک

سادگی

جاوا زبانی بسیار ساده می باشد که یادگیری آن به هیچ وجه دشوار نیست و سینتکس (نحو) ساده و تمیزی دارد. دلایل شرکت سان برای سادگی جاوا عبارتند از:

1- سینتکس جاوا بسیار به C++ شباهت دارد و به همین دلیل به راحتی میتوان آنرا پس از C++ فرا گرفت.

2- جاوا قابلیت هایی که به ندرت استفاده می شوند یا گیج‌کننده هستن مانند پوینتر به شکل مستقیم یا اورلود اپراتورها رو حذف کرده است.

3- در جاوا لازم به حذف اشیای بدون مرجع نمیباشد زیرا به طور اتوماتیک توسطGarbage Collector (جمع‌آور زباله) جاوا حذف می شوند.

شی گرایی

جاوا یک زبان شی گرا می باشد، هرچیزی در جاوا یک شی است. شی‌گرایی به این معناست که برنامه به عنوان ترکیبی از شی های متفاوت که شامل داده و رفتار می باشند تشکیل و سازماندهی می شود.

شی گرایی متدی است که با ارائه برخی قوانین، کار توسعه برنامه و نگهداری از آن را ساده تر می کند.

مفاهیم پایه‌ای شی‌گرایی شامل موارد زیر می باشد:

  • شی
  • کلاس
  • وراثت
  • چندریختی
  • انتزاع
  • کپسوله سازی

عدم وابستگی به پلتفرم ها

عدم وابستگی جاوا

جاوا متفاوت از زبانهایی همچون C++ و C عمل میکند. در زبان های مذکور، کد نوشته شده در پلتفرم های مخصوص هر دستگاه کامپایل (تبدیل به زبان های سطح پایین‌تر) میشود در حالی که جاوا یکبار نوشته میشود و قابلیت اجرا در هر دستگاهی را دارد. پلتفرم همانطور که قبلا هم تعریف شد، محیط اجرای یک برنامه می باشد.

دو نوع پلتفرم وجود دارد، سخت‌افزار محور و نرم‌افزار محور. جاوا یک پلتفرم نرم‌افزار محور در اختیار ما میگذارد.

از آنجایی که پلتفرم نرم ‌افزاری جاوا بر روی پلتفرم های سخت‌افزاری اجرا می شود، با اکثر پلتفرم های دیگر تفاوت می کند. این پلتفرم دارای دو بخش است:

  1. محیط اجرا
  2. API یا همان رابط برنامه نویسی اپلیکیشن

کد جاوا بر روی پلتفرم های متفاوت همچون ویندوز، مک، لینوکس و سان اجرا می شود. این کد ابتدا توسط کامپایلر، کامپایل می شود و به بایت کد تبدیل می شود، از آنجایی که بایت کد در هر پلتفرمی قابل اجرا می باشد، زبان جاوا مستقل از پلتفرم به حساب می آید.

امنیت

امنیت در جاوا

جاوا به دلیل امنیت خود معروف است. به کمک جاوا میتوان برنامه های خالی از ویروس نوشت، از دلایل این امر می توان به موارد زیر اشاره کرد:

1- عدم استفاده صریح و مستقیم از پوینترها

2- اجرا شدن در محیط ماشین مجازی

3- لودکننده کلاس‌ها: یکی از دلایل امنیت جاوا به طرز لود شدن کلاس ها برمی گردد. لودکننده کلاس جاوا که بخشی از محیط اجرا آن می باشد، به طور پویا کلاس ها را در ماشین مجازی لود می کند و برای اینکار کلاس‌های محلی را از کلاس‌هایی که از منابع شبکه وارد شده اند جدا می کند.

4- تاییدکننده بایت کد: قسمت‌های مختلف کد را برای کد غیر مجازی که می تواند دسترسی به اشیا را نقض کند، چک می کند.

5- مدیر امنیت: تعیین می کند که چه منابعی را یک کلاس می تواند در اختیار بگیرد مانند خواندن و نوشتن بر دیسک های داخلی.

قدرت

جاوا بسیار قوی‌ست زیرا:

1- از یک سیستم مدیریت حافظه قوی استفاده می کند.

2- از پوینترها که موجب مشکلات امنیتی میشوند، استفاده نمی شود.

3- دارای یک سیستم جمع آوری زباله می باشد که در داخل ماشین مجازی جاوا قرار دارد و اشیا بدون استفاده را از بین میبرد.

4- وجود استثناها (Exceptions) و چک شدن نوع داده ها از دلایل قدرت جاوا می باشند.

معماری خنثی

معماری جاوا را خنثی میدانیم زیرا هیچ ویژگی‌ای وجود ندارد که وابسته به طرز اعمال ما باشد. به عنوان مثال سایز داده های اولیه ثابت است.

اما مثلا در زبان سی، داده عدد صحیح در معماری 32 بیت، 2 بایت و در معماری 64 بیت، 4 بایت اشغال می کند در حالی که در جاوا، در جفت معماری‌ها، از 4 بایت استفاده می شود.

پرتابل

همانطور که گفته شد، کد جاوا به بایت کد تبدیل می شود و نیازی به پلتفرم یا طرز کار خاصی ندارد و به همین دلیل پرتابل به حساب می آید.

عملکرد بالا

جاوا از دیگر زبان‌های تفسیری سنتی سریع‌تر است زیرا بایت کد در آن تقریبا به زبان ماشین نزدیک است اما از زبان های کامپایلی همچون C++ و C به دلیل آنکه تفسیری می باشد، کندتر است.

توزیعی

جاوا یک زبان توزیعی می باشد و به کمک EJB  و RMI می توان در آن برنامه های توزیعی توسعه داد. این ویژگی جاوا این اجازه رو ما به ما میدهد که از هر دستگاهی در اینترنت با صدا زدن متدها به فایل‌های خود دسترسی داشته باشیم.

چند ریسگی

یک ریسه مانند یک برنامه جدا می باشد که به طور همزمان در حال اجرا است، چندریسگی برای برنامه‌هایی که دارای وظایف گوناگون هستند، استفاده می شود؛ مزیت بزرگ چندریسگی در آن است که هر کدام جداگانه حافظه مصرف نمیکنند بلکه یک فضای مشترک حافظه دارند. از ریسه‌ها برای مالتی‌مدیا و برنامه های وب استفاده می شود.

پویا

جاوا زبانی پویا می باشد. لود شدن کلاس‌ها در جاوا به شکل پویا و درست هنگام نیاز انجام میشود. علاوه بر آن جاوا از توابع بومی C و C++ هم پشتیبانی می کند.

این زبان همچنین از کامپایل پویا و مدیریت حافظه (جمع‌اوری زباله) هم استفاده می کند.

مقایسه جاوا و C++

مقایسه جاوا و c++

جاوا C++  
پشتیبانی می کند پشتیبانی نمی کند استقلال از پلتفرم
برای برنامه‌نویسی اپلیکیشن موبایل، وب و سازمانی استفاده می شود برنامه نویسی سیستم ها موارد استفاده
جاوا به عنوان مفسر سیستم های چاپ طراحی شد و سپس برای پشتیبانی محاسبات شبکه‌ای توسعه داده شد. هدف از طراحی جاوا آسان بودن برای یک جامعه فراتر بود به عنوان ضمیمه C، برای برنامه نویسی سیستم ها و اپلیکیشن طراحی شده است هدف از طراحی
ندارد دارد Goto
پشتیبانی نمی کند پشتیبانی می کند وراثت چندگانه
پشتیبانی نمی کند پشتیبانی می کند اورلود اپراتور
به طور داخلی از آن استفاده می شود اما امکان استفاده از آن به طور مستقیم در برنامه ها نیست پشتیبانی می کند و می توان با آنها مستقیما برنامه نوشت پوینترها
از کامپایلر و مفسر استفاده می کند. ابتدا کد را به کمک کامپایلر به بایت کد تبدیل می کند و سپس به کمک مفسر خروجی را از آن تولید می کند. تنها از کامپایلر استفاده می کند که کد رو به کد ماشین تبدیل می کند و به همین دلیل به پلتفرم وابسته است کامپایلر و مفسر
فراخوانی با مرجع در جاوا وجود ندارد. هر دو را پشتیبانی می کند فراخوانی با مقدار یا مرجع
پشتیبانی نمی کند پشتیبانی می کند ساختار و اتحاد (Union)
به طور داخلی پشتیبانی می کند تنها به کمک کتابخانه‌های خارجی پشتیبانی می شود چندریسگی
پشتیبانی می کند  پشتیبانی نمی کند  کامنت مستندسازی
از آنجایی که تمام متدهای غیراستاتیک در جاوا میتوانند اورراید شوند، این کلمه کلیدی وجود ندارد پشتیبانی می کند و امکان اورراید شدن یک تابع رو مشخص میکند

کلمه کلیدی Virtual

پشتیبانی می کند؛ برا اعداد مثبت همانند << و صفر رو با اعداد منفی حساب می کند پشتیبانی نمی کند نماد <<<
از آنجایی که تمام کلاس‌ها در جاوا فرزند کلاس Object هستند، تنها از یک درخت وراثت استفاده می کند. همیشه یک درخت وراثت جدید تولید میکند درخت وراثت
تعامل خوبی با سخت افزار ندارد به سخت افزار نزدیک تر است سخت افزار
شی گرا می باشد و همه چیز شی می باشد؛ به دلیلی که گفته شد نیز تنها یک سلسله مراتب دارد شی‌گرا می باشد اما در C درخت های وراثت متنوع می باشند. شی‌گرایی

نکات نهایی:

  • جاوا همانند C++ از آرگومان های پیش‌فرض پشتیبانی نمی کند.
  • جاوا از هدرهای پشتیبانی استفاده نمی کند بلکه از کلیدواژه import برای وارد کردن کلاس ها و متدهای گوناگون استفاده می کند.
نویسنده شوید

دیدگاه‌های شما (2 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

کارآموز
11 دی 1397
با سلام و عرض تشکر از تحلیل و مقایسه جالب شما من قصد دارم جاوا را یاد بگیرم ، از شما راهنمایی میخوام . آِا بهتر هست که قبل از جاوا C++ را یاد بگیرم یا مستقیم و ابتدا به ساکن از یادگیری جاوا شروع کنم ؟؟؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

علی
30 آذر 1397
میشه بگید با c++هم میشه برنامه موبایل ساخت یا نه

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
30 آذر 1397
سلام وقت شما بخیر با C++ هم امکان ساخت اپلیکیشن های موبایل هست ولی رابط های کاربری بسیاری باید درگیر شوند تا این زبان در بستر موبایل بهتر عمل کند. بنابراین اصلا گزینه مناسبی برای این کار نیست. شما می توانید از جاوا برای ایجاد اپلیکیشن های اندروید و از زبان swift برای ساخت اپلیکیشن های IOS استفاده بفرمایید.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

mostafa
08 فروردین 1398
بله با Qt اونم چند سکوئی و کلا در هر زمینه ای دسکتاپ و وب و موبایل و سخت افزار و ......

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.