جاوا یک زبان برنامهنویسی شئگراست که شرکت سان میکرو سیستمز آن را ابداع کردهاست. زبان جاوا شبیه به ++C ،اما
کوچکتر،با قابلیت انتقال بهتر و کاربردی تراست.دلیل این امر آنست که این زبان دارای قابلیتهای فراوان بوده و مدیریت حافظه را خود انجام میدهد.طراحی این زبان به گونه ایست که بسیار مطمئن بوده و وابسته به سیستم عامل خاصی نیست .(به عبارت دیگر میتوان آن را روی هر رایانه با هر نوع سیستم عاملی اجرا کرد.) و دلیل آن هم این است که برنامههای جاوا به صورت کدهای بیتی همگردانی (کامپایل) میشوند. که مانند کد ماشین بوده و به ویژه وابسته به سیستم عامل خاصی نیست. به این ترتیب جاوا برای نوشتن برنامههای کاربردی وب مناسب است، زیرا کاربر از طریق انواع مختلف رایانهها میتواند برنامههای شبکهای جاوا را اجرا کند.
مقدمه
جاوا، امروزه یکی از متداول ترین زبانهای برنامه نویسی جهان است. این زبان از لحاظ ظاهری شباهت زیادی به ++C دارد ولی در اصل میتوان تفاوتهای بنیادین زیادی را برای آنها بر شمرد. بر خلاف بسیاری دیگر از زبانهای کامپایلری که سورس کد آنها پس از کامپایل شدن به باینری یک ماشین حقیقی ترجمه میشود، برنامههای جاوا پس از کامپایل شدن به باینری ماشینی به نام ماشین مجازی جاوا یا JVM ترجمه میشود. این کد باینری را بایت کد میگویند. ماشین مجازی جاوا عمدتاً بصورت نرم افزاری پیاده سازی میشود ولی پیاده سازیهای سخت افزاری یا ترکیبی (بیشتر به صورت کمک پردازنده) آن نیز موجود میباشد. استفاده از ماشین مجازی یک روش پیشرفته در زبانهای برنامه نویسی محسوب میشود و مزایای زیادی دارد. ماشین مجازی جاوا میتواند امنیت اجرای برنامهها را تضمین کند و حق دسترسی گوناگونی برای برنامهها در نظر بگیرد. همچنین ماشین مجازی جاوا سازگاری اجرای برنامههای جاوا را تحت سیستم عاملهای مختلف حفظ میکند. یک باور غلط در بین بسیاری از مردم این است که برنامههای نوشته شده به زبان جاوا کندتر از برنامههای نوشته شده به زبانهای کامپایلری اجرا میشود، در حالی که سرعت اجرای یک برنامه جاوا کاملاً بستگی به نحوه پیاده سازی ماشین مجازی دارد. ماشینهای مجازی جدید جاوا معمولاً از تکنیکی به نام کامپایل در زمان لازم یا JIT استفاده میکنند. در این روش در هنگام اجرای برنامه بایت کد ابتدا به کد باینری ماشینی حقیقی که بر روی آن اجرا میشود ترجمه میشود و سپس باینری ترجمه شده بر روی ماشین اصلی اجرا میشود. در این فرآیند ماشین مجازی میتواند بهینه سازیهای خاص ماشین حقیقی را بر روی کد انجام دهد که در برخی موارد باعث میشود برنامههای جاوا حتی سریع تر دیگر زبانهای کامپایلری اجرا شود.
تاریخچه
جاوا در مقایسه با سایر زبانها همچون ++C یا Basic یا Fortran زبان نسبتاً جدیدی است. شرکت سان میکروسیستمز (یا به اختصار سان) در سال 1991 یک پروژه تحقیقاتی به نام Green را آغاز کرد. هدف این پروژه ایجاد یک زبان جدید شبیه به ++C بود که نویسنده اصلی آن، جیمز گاسلینگ، آن را بلوط Oak نامید. اما بعدها به دلیل برخی مشکلات حقوقی نام آن به جاوا تغییر کرد. پروژه گرین به دلیل مشکلات بازاریابی در شرف لغو شدن بود تا اینکه گسترش وب در سال 1993 باعث نمایش تواناییهای وافر جاوا در این عرصه گشت. و اینگونه بود که سان در می1995 جاوا را رسما افتتاح کرد.
برنامههای جاوا و اپلتها
جاوا برای نوشتن انواع برنامههای کاربردی مناسب است. با جاوا میتوان انواع برنامههای زیر را نوشت:
- برنامههای تحت وب؛
- برنامهنویسی سیستمهای کوچک مانند موبایل، پاکت پیسی و …؛
- برنامههای کاربردی بزرگ (Enterprise)؛
- برنامههای رومیزی (Desktop)؛
- و غیره.
قابلیت خاصی در جاوا وجود دارد بنام اپلت. اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامه نویسان قرار میدهند که دیگر زبانهای برنامه نویسی فاقد آن هستند. البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است.
از خاصیتهای جاوا در برنامههای بزرگتر نسبت به زبانهایی مثل سیشارپ، میتوان موارد زیر را نام برد.
1- سيستم عامل :
هر چقدر زبانهای .net قوی باشند تنها بر روی پلت فرم ویندوز اجرا میشوند و برخی ویندوز را سیستم عامل غیر قابل اعتمادی در برنامه نویسی Enterprise میدانند. ولی جاوا از این نظر انتخابی خوب است. (هنوز پروژه mono به نتایج پایانی خود نرسیده)
2- قابلیت حمل: جاوا بر روی پلتفرمهای گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 cpu برای پردازش.
3- جاوا بیشتر از یک زبان است: جاوا فقط یک زبان نیست و انجمنهایی متشکل از بزرگان صنایع و برنامهنویسان زیادی مشغول به توسعه و ایجاد استانداردهای جدید و به روز هستند.
تکنولوژیهای اصلی جاوا در حال حاضر
برنامهنویسی برای سیستمهای موبایل و رایانههای کوچک (J2ME) که آخرین نسخهی آن به Java Platform,Micro Edition تغییر نام دادهاست.
نمونههایی از برنامههای جاوا
public class Test{ public static void main(String[] args) { System.out.println("HelloWorld!"); } }
توزیعهای جاوا
در حال حاضر چهار توزیع کننده عمده جاوا وجود دارند:
سان میکروسیستمز: توزیع کننده اصلی جاوا و مبدع آن میباشد. در اکثر موارد هنگامی که گفته میشود جاوا منظور توزیع سان میباشد. تاکنون 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) استفاده میکند، نام برد.
یک اشتباه متداول
برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه میگیرند. در حالیکه این دو زبان گرچه در ظاهر و کلمات شبیهند ولی بطور ساختاری با یکدیگ متفاوتند. جاوا اسکریپت محصول شرکت نت اسکیپ است.
منبع : ويكي پديا
برچسبها: Java, Sun, برنامهنويسي