جاوا، امروزه یکی از متداول ترین زبان های برنامه نویسی جهان است. این زبان از لحاظ ظاهری شباهت های زیادی به ++C دارد ولی در اصل می توان تفاوت های بنیادین زیادی را برای آنها بر شمرد. بر خلاف بسیاری دیگر از زبان های کامپایلری که سورس کد آنها پس از کامپایل شدن به باینری یک ماشین حقیقی ترجمه می شود، برنامه های جاوا پس از کامپایل شدن به باینری ماشینی به نام ماشین مجازی جاوا یا JVM ترجمه می شود. این کد باینری را بایت کد می گویند. ماشین مجازی جاوا عمدتا بصورت نرم افزاری پیاده سازی می شود ولی پیاده سازی های سخت افزاری یا ترکیبی (بیشتر به صورت کمک پردازنده) از آن نیز وجود دارد. استفاده از ماشین مجازی یک روش مدرن در زبان های برنامه نویسی محسوب می شود و مزایای زیادی دارد. ماشین مجازی جاوا می تواند امنیت اجرای برنامه ها را تضمین کند و حق دسترسی های مختلفی برای برنامه ها در نظر بگیرد. همچنین ماشین مجازی جاوا سازگاری اجرای برنامه های جاوا را تحت سیستم عامل های مختلف حفظ می کند. یک باور غلط در بین بسیاری از مردم این است که برنامه های نوشته شده به زبان جاوا کندتر از برنامه های نوشته شده به زبان های کامپایلری اجرا می شود، در حالی که سرعت اجرای یک برنامه جاوا کاملا بستگی به نحوه پیاده سازی ماشین مجازی دارد. ماشین های مجازی جدید جاوا معمولا از تکنیکی به نام کامپایل در زمان لازم یا JIT استفاده می کنند. در این روش در هنگام اجرای برنامه بایت کد ابتدا به کد باینری ماشینی حقیقی که بر روی آن اجرا می شود ترجمه می شود و سپس باینری ترجمه شده بر روی ماشین اصلی اجرا می شود. در این فرآیند ماشین مجازی می تواند بهینه سازی های خاص ماشین حقیقی را بر روی کد انجام دهد که در برخی موارد باعث می شود برنامه های جاوا حتی سریع تر دیگر زبان های کامپایلری اجرا شود.
تاریخچه
جاوا در مقایسه با سایر زبانها همچون ++C یا Basic یا Fortran زبان نسبتاً جدیدی است. شرکت سان میکروسیستمز (یا به اختصار سان) در سال 1991 یک پروژه تحقیقاتی به نام Green را آغاز کرد. هدف این پروژه ایجاد یک زبان جدید شبیه به ++C بود که نویسنده اصلی آن، جیمز گاسلینگ، آن را بلوط Oak می نامید. اما بعدها به دلایل مشکلات حقوقی نام آن به جاوا تغییر کرد. پروژه گرین به دلیل مشکلات بازاریابی در شرف لغو شدن بود تا اینکه گسترش وب در سال 1993 باعث نمایش تواناییهای وافر جاوا در این عرصه گشت. و به اینگونه بود که سان در می 1995 جاوا را رسما افتتاح کرد.
برنامههای جاوا و اپلتها
جاوا برای نوشتن انواع برنامههای کاربردی مناسب است. با جاوا میتوان انواع برنامههای زیر را نوشت:
* برنامههای تحت وب؛
* برنامهنویسی سیستمهای کوچک مانند موبایل، پاکت پیسی و ...؛
* برنامههای کاربردی بزرگ (Enterprise)؛
* برنامههای رومیزی (Desktop)؛
* و غیره.
قابلیت خاصی در جاوا وجود دارد بنام اپلت. اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامه نویسان قرار میدهند که دیگر زبانهای برنامه نویسی فاقد آن هستند.[نیاز به ذکر منبع] البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است.
از خاصیتهای جاوا در برنامههای بزرگتر نسبت به زبانهایی مثل سیشارپ، میتوان موارد زیر را نام برد:*[1]
1 - سیستم عامل:
هر چقدر زبانهای .net قوی باشند تنها بر روی پلت فرم ویندوز اجرا میشوند و برخی ویندوز را سیستم عامل غیر قابل اعتمادی در برنامه نویسی Enterprise می دانند.[نیاز به ذکر منبع] ولی جاوا از این نظر انتخابی خوب است. (هنوز پروژه mono به نتایج پایانی خود نرسیده)
2- قابلیت حمل: جاوا بر روی پلتفرمهای گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 cpu برای پردازش.
3- جاوا بیشتر از یک زبان است: جاوا فقط یک زبان نیست و انجمنهایی متشکل از بزرگان صنایع و برنامهنویسان زیادی مشغول به توسعه و ایجاد استانداردهای جدید و به روز هستند.
تکنولوژیهای اصلی جاوا در حال حاضر
* برنامهنویسی برای سیستمهای رومیزی (J2SE) که از نسخهی ۵ به بعد، به Java SE تغییر نام داده است
* برنامهنویسی سمت سرور (J2EE) که از نسخهی ۱.۵ به بعد، به JAVA EE 5 تغییر نام داده است.
* برنامهنویسی برای سیستمهای موبایل و رایانههای کوچک (J2ME) که آخرین نسخهی آن به Java Platform,Micro Edition تغییر نام داده است.
نمونههایی از برنامههای جاوا
در زیر نمونهای از برنامهای که در جاوا نوشته شده است را میآوریم:
public class Test{
public static void main(String[] args){
System.out.println("HelloWorld!");
//sample method
{
{
توزیعهای جاوا
در حال حاضر چهار توزیع کننده عمده جاوا وجود دارند:
سان میکروسیستمز: توزیع کننده اصلی جاوا و مبدع آن می باشد. در اکثر موارد هنگامی که گفته میشود جاوا منظور توزیع سان می باشد. تاکنون 7 توزیع از این شرکت ارائه شده اند. جاوا 1.0 - 1.1 - که به جاوا 1 مشهورند. جاوا 1.2 – 1.3. 1.4 و 1.5 که به جاوا 2 مشهورند اخیرا نیز توزیع 1.6 از جاوا با کدرمز ماستانگ به صورت آزمایشی منتشر شده است. قابل ذکر است توزیعهای جاوا بر روی اکثر سیستم عاملها مانند ویندوز، یونیکس و سولاریس، لینوکس و موارد مشابه عرضه شده است.
GNU Java یا gcj کمپایلر کدباز جاوا می باشد. این توزیع از سوی موسسه نرم افزارهای آزاد منتشر شده و فعلا تنها در سیستم عاملهای لینوکس قابل استفاده است. این کمپایلر توانایی ایجاد کد اجرایی (در مقابل بایت کد توزیع سان) را داراست.
مایکروسافت J# این در حقیقت یک توزیع جاوا نیست. بلکه زبانی مشابه می باشد که توسط مایکروسافت و در چارچوب .net ارائه شده است. انتظار اینکه در سیستم عاملی غیر از ویندوز هم اجرا شود را نداشته باشید.
AspectJ این نیز یک زبان مجزا نیست. بلکه یک برنامه الحاقی می باشد که امکان برنامه نویسی Aspect Oriented را به جاوا می افزاید. این برنامه توسط بنیاد برنامه نویسی جلوه گرا و به صورت کد باز ارائه شده است.
نقاط ضعف
مهمترین ایرادی که برنامه نویسان سایر زبانها به زبان جاوا می گیرند سرعت اجرایی بسیار پایین جاوا است. یک برنامه جاوا به صورت بایت کد می باشد و باید در ماشین مجازی جاوا اجرا گردد. به همین دلیل سرعت اجرای پایینی را در مقابل زبانهای قدرتمندی همچون ++C دارد. به صورت دیگر یک برنامه C به طور متوسط تا 10 برابر سریعتر از برنامه مشابه جاوا اجرا میگردد. جاوا علی رغم شیء گرا بودن در بخشی از قسمتها برای ایجاد انعطاف بیشتر یا بازاریابی بهتر برخی اصول شی گرایی را نادیده گرفته است. از جمله این قسمتها قابلیت بازتابش Reflection می باشد. هدف اصلی بازتابش این است که استفاده مجدد از کدها و گسترش کدهای موجود و مهمتر از همه نوشتن برنامههای الحاقی آسان گردد ولی این مهم با زیر پا گذاشتن بعضی اصول ممکن شده است. برای نمونه با کمک بازتابش به راحتی میتوان متدهای خصوصی دیگر کلاسها را فراخوانی کرد! زبان جاوا در مقابل زبانی مثل ++C ساده تر و یادگیری ان آسانتر است. این آسانتر بودن به سادگی به دست نیامده است بلکه با حذف بسیاری از موارد که باعث قدرتمند تر بودن زبان ++C بودهاند ایجاد شده است. مهمترین این موارد اشاره گرها و وراثت چندگانه بودهاند که در زبان جاوا یافت نمی شوند. از آنجایی که جاوا زبانی با عدم وابستگی به بستر می باشد پس استفاده از توابع سیستم عامل را در برنامه نمی پذیرد. به همین صورت نمیتوان از واسطهای برنامه نویسی غیر از جاوا در آن استفاده نمود.
پاسخ برنامهنویسان جاوا به ایرادات
سرعت پایین برنامههای جاوا در محیطی که اجرا میشوند ملاک کارایی نبوده زیرا در محیط وب مسئلهای که سرعت را کند میسازد، شبکه بوده و ابتدا باید سربار شبکه را از روی برنامهها برداشت. از طرف دیگر در برنامههای رومیزی هم در JDK 5.0 و 6.0، بهینه سازی بسیاری بوجود آمده که این مسئله باعث شده که در آخرین تست کارایی که انجام شده یک برنامه جاوا در محدودهی 0.8 تا 1.3 همان برنامه در ++C کارایی داشته باشد که 1.3 آن مربوط به بخش واسط کاربری و سرعت 0.8 آن مربوط به بسته تخلیه حافظه میشده که هیج الگوریتمی نتوانست از الگوریتم Garbage Collector جاوا پیشی بگیرد. همچنین سال ۱۹۹۹ در مقالهای آقای Lutz Prechelt به این مسئله را ثابت کردند که تجربه برنامهنویسی که برنامهای را مینویسد از انتخاب زبانی که برنامه برروی آن نوشته میشود در کارایی تاثیر بیشتری دارد و این بدان معناست که کارایی یک برنامه را برنامهنویس مشخص میکند و نه زبان برنامهنویسی( ایشان در همان مقاله از زبان جاوا استفاده نمودند تا ذهنیت بد را از بین ببرند)
حذف اشارهگرها در جاوا به دلیل مشکلاتی بوده که آنها در طول تاریخشان بوجود آوردهاند، اگرچه این موارد در برنامههای سیستمی لازم بنظر میرسد ولی در محیطهای تحتوب که بستر اصلی جاوا هستند میتوانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامههای سیستمی دارند داشته باشند و باعث میشود که توجه برنامهنویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاسپذیری برنامه به تنظیم اشارهگرها معطوف گردد.
وجود وراثت چندگانه در زبانی مانند ++C، باعث ایجاد مشکلات اساسیای میگردید که اکثر برنامهنویسان ++C از آن دوری میکرده و هنوز هم میکنند. ولی قابلیت چندریخته شدن یک کلاس از لحاظ شی گرایی بسیار مهم بوده و بنابراین توجیهی برای وجود وراثت چندگانه را فراهم مینمود. در جاوا با وارد شدن مفهومی به نام واسط برنامهسازی (Interface)، دیگر نیازی به وجود وراثت چندگانه احساس نشد و بنابراین از زبان جاوا حذف گردید. در حال حاضر اکثر طراحان برنامهها حتی به این نتیجه رسیدهاند که وراثت تکی هم باعث ایجاد مشکل بوده و تا آنجایی که میشود باید از Composition استفاده نمود و در تمامی کتابهای طراحی که از سال ۲۰۰۰ به این طرف چاپ شده به آن اشاره نمودهاند.
از ابتدای بوجود آمدن جاوا، کتابخانه JNI - Java Native Interface در آن وجود داشته که قابلیت فراخوانی و دستکاری برنامههایی در ++C و ... را میداده که از نمونههای آن میتوان به Jtwain که یک بستهایست که از کتابخانههای ویندوز برای اسکن عکس استفاده میکند، یا SWT که یک بسته نرمافزاریست که از کتابخانههای ویندوز و لینوکس (برحسب سیستم عامل) برای ساخت واسط کاربری (UI) استفاده میکند، نام برد.
یک اشتباه متداول
برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه میگیرند. در حالیکه این دو زبان گرچه در ظاهر و کلمات شبیهند ولی بطور ساختاری با یکدیگ متفاوتند. جاوا اسکریپت محصول شرکت نت اسکیپ است
منبع:wikipedia