براي چه جاوا زبانی جذاب است؟
آموزش جاوا
آموزش برنامه نویسی جاوا
پارت اول
در یكی از مقالات شركتSun، زبان جاوا را با این ویژگیها شرح میدهد:
جاوا یك زبان ساده، شی گرا، توزیع شده، تفسیر شده، قدرتمند، ایمن، با معماری خنثی، قابل حمل، با عملكرد سطح بالا چند نخ كشی شده و پویا است.
Sun تصدیق میکند كه به طور قطع این كلمات رشتههایی از واژه های متداول در زبان برنامـه نویسی هستند ، ولی حقیقت این است كه این عبارت ها به طور ماهرانهای ویژگیها این زبان را شرح میدهند.
حال به برخي از خصلتهای جاوا در پشت این واژه ها میپردازیم.
شی گرا: Object Oriented
جاوا یك زبان پروگرام نویسی شیگرا است. جهت یك پروگرام نویس این به این معنا است كه به جای فكر كردن به سری های رویه برنامـه ، می بایست به كاربرد داده ها و روشهایی كه روی آن داده ها عمل میكنند، توجه شود.
چنانچه شما به پروگرام نویسی با اعلان رویه در C عادت كرده اید، ممكن است دریابید كه به وقت مصرف از جاوا مجبور به تغییر در روش و چگونگی پروگرام تان هستید. وقتی كه فهمیدید این الگوی نو چقدر قدرتمند است، سریع با آن همموزیک میشوید .
در یك سیـستم شی گرا، یك كلاس مجموعهای از دادهها روشهایی است كه روی آن داده عمل میكنند. همراه بودن دادهها و متدها رفتار حالت یك شی را بیان می دارد. كلاسها به صورت سلسله مراتبی مرتب شده اند، پس یك زیر كلاس میتواند رفتار هایی را از كلاس بالاتر به ارث ببرد. یك كلاس سلسله مراتبی همیشه یك كلاس ریشه دارد كه كلاسی است با رفتار های كاملا عمومی .
جاوا به همراه دسته ی وسیع ای از كلاس هایی است كه در بسته هایی مرتب شده اند و شما میتوانید از آنها در پروگرام ی خود استفاده نمایید .
یك شی كلاس(in the java.lang package) به عنوان ریشه كلاس سلسله مراتبی جاوا انجام وظیفه میكند .
درست است كه جاوا طوری طراحی شده است كه مثل C++ باشد و ویژگی های آن را داشته باشد اما ی كه با آن كار نمایید خواهید فهمید كه بسياري از پیچیدهگی های آن زبان را از بین برده است .
اگر شما یك پروگرام نویس C++ هستید حتمـا لازم است كه ساختار های شی گرایی در جاوا را به دقت بررسي نمایید . اما اگر چه تركیب روش دستورات آن نسبتا شبیه C++ است، اما رفتار های آن بسیار زیاد مشابه نیست .
تفسیر شده: Interpreted
جاوا یك زبان تفسیر شده است. كامپایلر جاوا به جای ایجاد كد مکانی اتومبیل ، كد بایتی جهت اتومبیل مجازی جاوا ایجاد میكند. برای اجرای دقیق برنامـه ، از مفسر جاوا جهت اجرای كد های بایتی كامپایل شده استفاده میشود. به دلیل اینكه كدهای بایتی جاوا به نوع كامپیوتر بستگی ندارند، برنامـه های جاوا میتوانند روی هر نوع كامپیوتری كه JVM (Java Virtual Machine) را دارند، اجرا شوند .
در محیط تفسیر شده، وهله لینك استاندارد گسترش برنامـه از دید كاربر پنهان است. اگر جاوا فقط یك وهله لینك داشت، تنها بارگذاری كلاس نو به محیط پردازش میشد كه این خصوصیت با چرخه كامپایل-لینك-اجرا ی آرام طاقت فرسای زبان هایی مانند C یا C++ در تضاد است .
معماری خنثی و قابل حمل: Architecture Neutral and Portable
به دلیل اینكه برنامـه های جاوا در فرمت كد بایتی با معماری خنثی كامپایل شده اند، برنامـه كاربردی جاوا میتواند در هر سیستم ی اجرا شود.
اما با این شرط كه آن سیـستم توانایی پیاده سازی اتومبیل مجازی جاوا را داشته باشد. این مسئله نسبتا جهت كاربردهای توزیع شده روی اینترنت و یا دیگر شبكههای ناهمگن با اهمیت زیاد است. ولی روش معماری خنثی برای كاربردهای بر مبنای شبكه مفید است .
به عنوان یك گسترش دهنده برنامـه های كاربردی، در بازار نرم افزار ی امروز ممكن است بخواهید مـدل های كاربردی خود را گسترش دهید، به طوری كه بتواند رویPc، مكینتاش و سیـستم علت Unix اجرا شود .با وجود گونههای مختلف Unix ،Windows روی Pc مكینتاش قوی جدید ، رفته رفته تولید برنامـه برای تمام انواع این كامپیوتر ها سخت میشود. اگر شما برنامـه تان را در جاوا بنویسید میتواند روی همهی این كامپیوترها اجرا شود.
در واقع تفسیر شده بودن جاوا وتعریف یك استاندارد، معماری خنثی داشتن فورمت كد بایتی آن از بزرگترین دلایل قابل حمل بودن آن به شمار می آیند .
اما جاوا باز از این هم بیشتر گام برمیدارد، با اطمینان حاصل كردن از اینكه هیچیك از جنبههای وابستگی اجرایی زبان را ندارد. جهت مثال جاوا به طور صریح اندازه هریك از انواع داده را تعریف میكند كه این با C فرق دارد، برای مثال هریک از انواع صحیح میتواند بسته به نوع رایانه 16-32 یا 64 بیت طول داشته باشد .
وقت ی که به صورت تکنیکی امکان نوشتن برنامـه های غیر قابل حمل در جاوا فراهم شد، پیشگیری از چند ویژگی وابسته به نوع رایانه که بوسیله جاوا API تولید شده و به طور قطع قابل حمل نوشته شده است، آسان است .
یك برنامـه جاوا به تولید كنندگان پروگرام یاری میكند تا از قابل حمل بودن كد هایشان اطمینان حاصل كنند. برنامـه نویسان تنها برای پرهیز از دام غیر قابل حمل بودن پروگرام احتیاج به یك تلاش آسان دارند كه شعار تجارتی شركتSun را زنده نگهدارند آن شعار این است :
" یك بار بنویس تمام جا اجرا كن" .
پویا و توزیع شده: Dynamic and Distributed
جاوا یك زبان پویا است. هر كلاس جاوا میتواند در هر زمانی روی مفسر جاوا بارگذاری شود. پس این كلاسهای بارگذاری شدهی پویا میتوانند به صورت پویا معرفی شوند. حتی كتابخانه كدهای محلی میتواند به طور پویا بارگذاری شود. كلاسها در جاوا با كلاس Class فراخوانی میشوند؛ شما میتوانید به طور پویا درمورد یك كلاس در زمان اجرا اطلاعاتی بدست بیاورید. این خصوصیت در جاوا به طور درستی موجود است . با وجود بازتاب API اضافه شده (Application Program Interface ) كه به پروگرام ساز امكان میدهد كه با برنامـه از طریق یك پروگرام كاربردی دیگر رابطه برقرار كند .
جاوا حتی با نام زبان توزیع شده هم خوانده میشود. به طور آسان این به این معنا است كه این زبان پشتیبانی سطح بالایی برای شبكه به وجود می آورد. برای مثال كلاس URL كلاس های مرتبط با آن در بستهی ava.net ، خواندن فایلهای دوردست را به همان آسانی خواندن فایلهای مکانی كرده است. به طور مشابه در جاوا 1-1، احضارآموزش كنترلی RMI (Remote Method Invocation ) ، API به یك برنامـه جاوا مجوز میدهد كه روشهایی از اشیاء دور دست جاوا را به همان صورتی كه چنانچه آن اشیاء مکانی بودند آنها را میخواند، بخواند .( جاوا حتی از سیـستم شبكهای سطح پایین كه حاوی آدرس مقصد مسیر جریانی كه توسط سوكتها متصل شده است نیز پشتیبانی میكند).
طبیعت توزیع شدهی جاوا زمانیكه با امكانات پویای بارگذاری كلاس همراه میشود، واقعا درخشنده است . این ویژگیها با هم این امكان را برای مفسر جاوا به وجود میآورند كه كدها را از اینترنت بارگذاری اجرا كند. ( همان گونه كه بعدا خواهیم دید جاوا باعث میشود كه با وجود وسائل قدرتمند و ایمن این كار به طور مطمئن انجام شود). این چیزی است كه در وقت بارگذاری و اجرای یك پروگرام كاربردی از اینترنت توسط مرورگر وب، اتفاق میافتد. اما جریان پیچیده تر از این هم میتواند باشد. تصور کنـید یك پردازشگر كلمه چند رسانهای در جاوا نوشته شده است. وقتی از این برنامـه پرسیده میشود كه چند نوع از دادههایی را كه قبلا هرگز وارد نشده را نمایش دهد، ممكن است به طور دینامیكی یك كلاس را كه میتواند داده را شناسایی كند، از شبكه بارگذاری كند بعد كلاس دیگری را كه بتواند داده را از داخـل یك پوشه تركیبی بخواند، باز به طور دینامیكی بارگذاری میكند.