حسین کعبی: وقتی فیگو را در جام جهانی زدم....
پروژه تحقیقاتی این زبان Green نام داشت. نویسنده اصلی آن شخصی به نام James Gosling بود که ابتدا این زبان را Oak نامید که در لغت به معنای بلوط است، اما به دلیل برخی مشکلات، از فهرستی از نامهای تصادفی، جاوا برای این زبان برگزیده شد. این پروژه در شرف لغو شدن بود؛ اما با افزایش تواناییهای آن بالاخره بهطور رسمی به دنیا معرفی شد.
نگاه کلی
جاوا زبانی شیءگرا و شبیه زبان++ C است. زیرا در ابتدای طراحی آن، هدف آن بود که زبانی شبیه++ C با قابلیتهای متفاوت عرضه شود. این زبان مدل شیءگرایی آسانتری داشته و از این جنبه فراگیری آن از++ C سادهتر، اما قابلیتهای سطح پایین و نزدیک به زبان سختافزار در آن کمتر است.
در بسیاری از زبانهای برنامهنویسی، مدیریت حافظه به عهده برنامهنویس است، اما یکی از قابلیتهای اصلی جاوا آن است که مدیریت حافظه در آن به صورت خودکار انجام میشود. یکی از بزرگترین خصوصیات زبان جاوا آن است که با وجود کامپایلری بودن، وابسته به سیستمعامل خاصی نیست و قابلیت اجرا روی هر رایانه با هر سیستمعاملی را دارد. در واقع کامپایلر جاوا، کدهای برنامه را مستقیما به زبان ماشین حقیقی تبدیل نمیکند، بلکه آن را به یک زبان میانی تبدیل میکند که در واقع زبان یک ماشین مجازی به نام (Java Virtual Machine)JVM است. این ماشین مجازی روی هر رایانه با هر سیستمعاملی که نصب باشد، قابلیت اجرای برنامههای جاوا را خواهد داشت.
جاوا برای نوشتن انواع برنامهها مناسب بوده و ضریب اطمینان عملکرد برنامههای نوشته شده با آن بسیار بالاست. میتوان از جاوا به عنوان یک زبان مطرح دنیا نام برد که هم میتوان با آن نرمافزارهای کاربردی معمولی در مقیاس کوچک نوشت، هم پروژههای بزرگ و سنگین سازمانی انجام داد، هم از توانایی آن در برنامههای تحت وب بهره گرفت و هم از آن برای نوشتن برنامه برای سطح وسیعی از دستگاهها و تجهیزات همراه از قبیل تلفنهای همراه، Pockatpc و... استفاده کرد.
اپلت
اپلت (Applet) به یک بخش نرمافزاری گفته میشود که میتواند در متن برنامه دیگر قرار گرفته و اجرا شود Applet . به معنی برنامه کوچک بوده، در اصل ترکیبی از دو کلمهApplication وlet استlet . در انگلیسی پسوندی است که برای «کوچک» به کار میرود (همانند پسوند «چه» در باغچه در اتصال به کلمه باغ). اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامهنویسان قرار میدهند. این خصوصیتی است که جاوا را از بسیاری از زبانهای برنامهنویسی متمایز میسازد.
البته برخلاف جاوا اسکریپت که برای اجرا نیاز به هیچ نوع نرمافزار اضافه نداشت، برنامههای تحت وبی که با استفاده از اپلتهای جاوا نوشته شدهاند نیاز به ماشین مجازی جاوا نرمافزار(JVM) دارند و بدون آن قادر به اجرا نیستند. (اگر به خاطر داشته باشید پیش از این گفته بودیم که جاوا و جاوا اسکریپت دو زبان کاملا متفاوت عرضه شده از دو شرکت مختلف هستند و تنها از نظر نام و تا حدودی شکل ظاهری کدها شبیه به یکدیگرند)
اپلتها شبیه فناوری اکتیوایکس (Activex) شرکت مایکروسافت هستند و برنامهنویس را قادر میسازند تا امکانات جدیدی به مرورگر کاربر اضافه کند. البته اپلتها بهدلیل آنکه در محیطی تحتعنوان Sand box اجرا میشوند امنیت دارند اما اکتیوایکس چنین امنیتی ندارد.
همانطور که قبلا نیز اشاره کردیم سرویسدهنده وب از طریق دستوراتHTML که در صفحات وب وجود دارد، تعامل بین سرویسدهنده و کاربر را کنترل میکند. این کار در سایتهایی که مشتریان زیادی دارد، سرویسدهنده وب را دچار مشکل میکند. بهتر است کنترل توسط مرورگر انجام شود و سرویسدهنده نقش پشتیبان را داشته باشد.
ضمنا رایانه کاربران معمولا بیکار است و منتظر پاسخگویی سرویسدهنده میماند. یک روش حل این مساله آن است که بعضی از تعاملهای سرویسدهنده در محیط مرورگر انجام شود. به جای انتقال دادههای HTML به سرویسدهنده، سرویسدهنده میتواند یک برنامه کوچک را به مرورگر بفرستد و برنامه کاربردی را در ماشین مجازی اجرا کند. به این ترتیب حجم اطلاعاتی که باید از سرویسدهنده به مرورگر ارسال شود، کاهش مییابد.
سرعت و کارایی
سرعت پایین برنامههای جاوا در محیط اجرایشان ملاک خوبی برای کارایی آن نیست، زیرا در محیط وب کندی بیشتر به علت شبکه است و در گام نخست باید سربار شبکه را از روی برنامهها برداشت، وگرنه در برنامههای کاربردی بهینهسازیهای بسیاری به وجود آمده است که موجب شده در آخرین آزمون کارایی، یک برنامه جاوا از 8/0 تا 3/1 همان برنامه در++ c سرعت داشته باشد که 3/1 مربوط به بخش واسط کاربری (GUI) و سرعت 8/0 آن مربوط به تخلیه حافظه(Garbage Collection) میشده است و تاکنون هیچ الگوریتمی نتوانسته است در سرعت از الگوریتم تخلیه حافظه جاوا پیشی بگیرد.
ضمنا ثابت شده است که تجربه برنامهنویسی که برنامهای را مینویسد از انتخاب زبانی که برنامه با آن نوشته میشود تاثیر بیشتری در کارایی دارد و این بدان معناست که کارایی یک برنامه را برنامهنویس و روشهای به کار رفته در برنامه وی مشخص میکند و نه زبانی که با آن برنامه مینویسد. حذف اشارهگرها در جاوا به دلیل مشکلاتی بوده است که آنها در طول تاریخ استفادهشان به وجود آوردهاند. اگرچه این موارد در برنامههای سیستمی لازم به نظر میرسد اما در محیطهای تحت وب که بستر اصلی جاوا است میتوانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامههای سیستمی دارند داشته باشند و باعث میشود که توجه برنامهنویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاسپذیری برنامه به تنظیم اشارهگرها معطوف شود.
مقایسه با++ C
در زبانی مانند++ C مفهومی به نام وراثت چندگانه وجود دارد که باعث ایجاد مشکلاتی اساسی میشد که اکثر برنامهنویسان++ C از آن دوری میکرده و میکنند. ولی قابلیت چندریختی (Polymerphism) یک کلاس از لحاظ شیءگرایی بسیار مهم بوده و بنابراین توجیهی برای وجود وراثت چندگانه را فراهم میکرد.
در جاوا با وارد شدن مفهومی به نام Interface ، دیگر نیازی به وجود وراثت چندگانه احساس نشد و این مفهوم از زبان جاوا حذف شد. درحالحاضر طراحان برنامهها حتی به این نتیجه رسیدهاند که وراثت معمولی هم باعث ایجاد مشکل بوده و تا آنجایی که میشود باید از مفهومی به نام ترکیب (Composition) استفاده کرد.
ضعف جاوا
مهمترین اشکالی که برنامهنویسان سایر زبانها به جاوا میگیرند سرعت اجرایی بسیار پایین آن است. یک برنامه جاوا به صورت بایت کد(byte code) است که کد زبان ماشین مجازی است و باید در آن محیط اجرا شود. به همین دلیل سرعت اجرای پایینی در مقابل زبانهایی چون++ C دارد. به عنوان مثال ممکن است یک برنامه به زبان++ Cبهطور متوسط تا 10 برابر سریعتر از برنامه مشابه جاوا اجرا شود.
جاوا برخلاف شیءگرا بودن، در بخشی از قسمتها برای ایجاد انعطاف بیشتر، برخی از اصول شیءگرایی را نادیده گرفته است که میتوان آن را نیز از نقاط ضعفش برشمرد.
همان طور که پیش از این نیز اشاره کردیم، زبان جاوا نسبت به++ C سادهتر است و به همین دلیل آموزش دادن و آموختن آن نیز راحتتر است که البته به دلیل به وجود آمدن این سادگیها بسیاری از نقاط قوتی که در++ C وجود داشتهاند در جاوا حذف شدهاند که مهمترین آن مفهوم اشارهگر (Pointer) است که به آن اشاره کردیم. ضمنا با توجه به این که جاوا زبانی مستقل از سیستمعامل است، استفاده از توابع API سیستمعامل در آن امکانپذیر نیست.
حسین کعبی: وقتی فیگو را در جام جهانی زدم....