آموزش جاوا

آموزش برنامه نویسی جاوا


پارت اول
در یکی از مقالات شرکت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 به یک پروگرام جاوا مجوز می‌دهد که روش‌هایی از اشیاء دور دست جاوا را به همان صورتی که چنانچه آن اشیاء مکانی بودند آنها را می‌خواند، بخواند .( جاوا حتی از سیستم شبکه‌ای سطح پایین که حاوی آدرس مقصد مسیر جریانی که توسط سوکت‌ها متصل شده است نیز پشتیبانی می‌کند).
طبیعت توزیع شده‌ی جاوا زمانیکه با امکانات پویای بارگذاری کلاس همراه می‌شود، واقعا درخشنده است . این ویژگیها با این امکان را برای مفسر جاوا به وجود می‌آورند که کدها را از اینترنت بارگذاری و اجرا کند. ( همان گونه که بعدا خواهیم دید جاوا باعث می‌شود که با وجود وسائل قدرتمند ایمن این کار به طور مطمئن انجام شود). این چیزی است که در زمان بارگذاری اجرای یک برنامـه کاربردی از اینترنت توسط مرورگر وب، اتفاق می‌افتد. اما جریان پیچیده تر از این هم می‌تواند باشد. تصور نمایید یک پردازشگر کلمه چند رسانه‌ای در جاوا نوشته شده است. وقتی از این پروگرام پرسیده می‌شود که چند نوع از داده‌هایی را که قبلا هرگز وارد نشده را نمایش دهد، ممکن است به طور دینامیکی یک کلاس را که می‌تواند داده را شناسایی کند، از شبکه بارگذاری کند و بعد کلاس دیگری را که بتواند داده را از داخـل یک پوشه ترکیبی بخواند‌، باز به طور دینامیکی بارگذاری می‌کند.