تازه ها

چرا جاوا زبانی جالب است ؟

 در یکی از مقالات در باره ی زبان شرکتSun جاوا را با این خصوصیات  شرح می دهد :

جاوا یک زبان ساده ، شی گرا ،‌توزیع شده ، تفسیر شده ، قدرتمند ، ایمن ، با معماری خنثی ، قابل حمل ، با عملکرد سطح بالا چند نخ کشی شده و پویا است .

Sun تصدیق میکند که به طور قطع این کلمات رشته هایی از واژه های متداول در زبان برنامه نویسی هستند ، اما حقیقت این است که این واژه ها به طور ماهرانه ای خصوصیات این زبان را شرح میدهند .

حال به برخی از خصلت های جاوا در پشت این واژه ها میپردازیم .

 شی گرا : Oriented

 جاوا یک زبان برنامه نویسی شی گرا است . برای یک برنامه نویس این به این معنا است که به جای فکر کردن به قسمت های رویه برنامه ، باید به کاربرد داده ها و روش هایی که روی آن داده ها عمل میکنند ، توجه شود.

اگر شما به برنامه نویسی با اعلان رویه در C عادت کرده اید ،ممکن است دریابید که به هنگام استفاده از جاوا مجبور به تغییر در روش و چگونگی برنامه تان هستید . هنگامی که فهمیدید این الگوی جدید چقدر قدرتمند است ، به سرعت با آن هماهنگ میشوید .

در یک سیستم شی گرا ، یک کلاس مجموعه ای از داده ها و روش هایی است که روی آن داده عمل میکنند. همراه بودن داده ها و متد ها رفتار و حالت یک شی را بیان می دارد . کلاس ها به صورت سلسله مراتبی مرتب شده اند ، بنابر این یک زیر کلاس میتواند رفتار هایی را از کلاس بالاتر به ارث ببرد . یک کلاس سلسله مراتبی همیشه یک کلاس ریشه دارد که کلاسی است با رفتار های کاملا عمومی .

جاوا  به همراه دسته ی گسترده ای از کلاس هایی است که در بسته هایی مرتب شده اند و شما می توانید از آنها در برنامه ی خود استفاده کنید  . برای مثال جاوا کلاس هایی را ایجاد میکند که :

 بخش های رابط گرافیکی را میسازند (the java.awt package) ،کلاس هایی که عملیات ورودی و خروجی را به عهده دارند(the java.io package)  و کلاس هایی که از شبکه پشتیبانی میکنند (the java.net  package )   .

یک شی کلاس(in the java.lang package) به عنوان ریشه کلاس سلسله مراتبی جاوا انجام وظیفه میکند .

 جاوا بر خلاف C++ طوری طراحی شده است که از همان ابتدا به صورت شی گرا باشد .  اکثر چیز ها در جاوا اشیا هستند . ارقام ابتدایی ، کاراکترها و مدل های منطقی تنها استثناء ها هستند . حتی رشته ها هم در جاوا به وسیله اشیا حاضر میشوند ،همان طور که ساختمان های مهم دیگر این زبان ، مثل نخ ها   احضار میشوند . یک کلاس یک واحد پایه برای کامپایل و اجرا شدن در جاوا است . تمام برنامه های جاوا متشکل از کلاس ها است .

    درست است که جاوا طوری طراحی شده است که مثل 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 فراخوانی میشوند ؛ شما میتوانید به طور پویا در مورد یک کلاس در زمان اجرا اطلاعاتی بدست بیاورید . این خصوصیت در جاوا 1-1 به طور درستی موجود است . با وجود بازتاب API اضافه شده(Application Program Interface ) که به برنامه ساز امکان میدهد که با برنامه از طریق یک برنامه کاربردی دیگر ارتباط برقرار کند .

جاوا حتی با نام زبان توزیع شده نیز خوانده میشود . به طور ساده این به این معنا است که این زبان پشتیبانی سطح بالایی برای شبکه به وجود می آورد . برای مثال کلاس URL و کلاس های مرتبط با آن در بسته ی Java.net  ، خواندن فایل های دوردست را به همان سادگی خواندن فایل های محلی کرده است . به طور مشابه در جاوا 1-1 ، احضار روش کنترلی RMI

(Remote Method  Invocation ) ،  API  به یک برنامه جاوا اجازه میدهد که روش هایی از اشیاء دور دست جاوا را به همان صورتی که اگر آن اشیاء محلی بدند آنها را میخواند ، بخواند  .( جاوا حتی از سیستم شبکه ای سطح پایین که شامل آدرس مقصد و مسیر جریانی که توسط سوکت ها متصل شده است ، نیز پشتیبانی میکند .)

طبیعت توزیع شده ی جاوا زمانیکه با امکانات پویای بارگذاری کلاس همراه میشود ، واقعا درخشنده است . این خصوصیات با هم این امکان را برای مفسر جاوا به وجود می آورند که کد ها را از اینترنت بارگذاری و اجرا کند . ( همان طور که بعدا خواهیم دید جاوا باعث میشود که با وجود ابزار قدرتمند و ایمن این کار به طور مطمئن انجام شود .) این  چیزی است که در هنگام بارگذاری و اجرای یک برنامه کاربردی از اینترنت توسط مرورگر وب ، اتفاق می افتد  . اما داستان پیچیده تر از این هم میتواند باشد . تصور کنید یک پردازشگر  کلمه چند رسانه ای در جاوا نوشته شده است  . وقتی  از این برنامه پرسیده میشود که چند نوع از داده هایی را که قبلا هرگز وارد نشده را نمایش دهد ، ممکن است به طور دینامیکی یک کلاس را که میتواند داده را شناسایی کند ، از شبکه بارگذاری کند و بعد کلاس دیگری را که بتواند داده را از درون یک پوشه ترکیبی بخواند ، باز به طور دینامیکی بارگذاری میکند . برنامه ای مانند این از منابع توزیع شده در شبکه  برای رشد و سازگاری خودکار کاربران استفاده میکند .

 ساده :Simple

 جاوا یک زبان ساده است . طراحان جاوا سعی در این داشتند تا زبانی بوجود بیاورند که برنامه نویسان بتوانند به سرعت آن را یاد بگیرند . بنابراین تعداد ساختار های این زبان تقریبا کم است . هدف دیگر طراحی این زبان این بود که به منظور راحتی انتقال آن ، آن را طوری طراحی کنند که برای عده ی زیادی از برنامه نویسان آشنا باشد . اگر شما یک برنامه نویس C یا C++   هستید ، خواهید فهمید که جاوا از بسیاری از ساختار های C و ‍  C++ استفاده میکند .

برای اینکه این زبان را هم به طور ساده و هم  آشنا و ملموس و هم  کوچک نگه دارند بسیاری از خصوصیات   C  و C++ را در آن حذف کردند . اینها خصوصیاتی بودند که باعث می شدند  برنامه نویسی ضعیفی صورت بگیرد  یا آنهایی بودند که به ندرت در برنامه استفاده می شدند . برای مثال جاوا از دستور goto استفاده نمی کند ، در عوض از  دستورهای  break , continue   در مواقع نیاز استفاده می کند .

جاوا از سر فایل ها(header files)   استفاده نمی کند و پردازشگر C را هم حذف کرده است . به این دلیل که جاوا یک زبان شی گرا است ، ساختار های C مثلstruct , union  از آن برداشته شده است . جاوا حتی  بارگذاری مجدد و خواص چندگانه ارث بری از C++ را هم حذف کرده است . شاید مهمترین پارامتر ساده بودن جاوا عدم استفاده این زبان از اشاره گر ها باشد . اشاره گر ها یکی از بیشترین موجودیت های دردسرساز  در C , C++ هستند . چون جاوا ساختمان ندارد و آرایه ها و رشته ها اشیاء آن هستند ، بنابراین  احتیاجی به اشاره گر نیست .جاوا به طور خودکار آدرس دهی و دستذسی به محتوای موجود در یک آدرس را برای شما انجام میدهد .

جاوا حتی زباله های حافظه ای را هم به طور خودکار جمع آوری میکند .(GarbageCollectin)  (* جمع آوری آشغال فرایندی است برای ترمیم خودکار حافظه انباشته شده . بلوک هایی از حافظه که زمانی به فایل ها اختصاص داشتند اما مدتی است که از آنها استفاده نمی شود و بلوک هایی از حافظه که هنوز مورد استفاده قرار میگیرند  ممکن است حرکت داده شوند  تا از به هم پیوستن فضاهای خالی حافظه بلوک های خالی بزرگتری بدست آید .

[ از کتاب :  Microsoft computer dictionary] * ) بنابراین  لازم نیست که نسبت به موضوع مدیریت حافظه نگران باشید ، همه اینها شما را از نگرانی در مورد اشاره گر های بی ارزش ، خطرناک و هرز های حافظه رها میکنند . بنابر این شما میتوانید وقت خود را صرف بهبود برنامه تان کنید .

 قدرتمند :Robust

جاوا برای نوشتن نرم افزارهای قدرتمند و بسیار ایمن ساخته شده است . جاوا هنوز هم به طور قطع نرم افزار ها را تضمین نمیکند . تقریبا هنوز هم امکان نوشتن برنامه های مشکل ساز در جاوا وجود دارد ، هرچند که جاوا برخی از انواع مشخص خطاهای برنامه نویسی را حذف کرده که به طرز چشمگیری نوشتن نرم افزار های ایمن را آسان تر کرده است .

جاوا یک زبان تایپ شده قدرتمند است ،‌ که اجازه چک شدن مشکلات  و خطاهای تایپی را در زمان کامپایل می دهد . جاوا بسیار قویتر از C++ تایپ شده است که بسیاری از خصوصیات انعطاف پذیر در زمان کامپایل را از C به ارث برده است . مخصوصا هنگام اعلان توابع .جاوا به مدل اعلان صریح احتیاج دارد ، زیرا که از مدل اعلان صریح C پشتیبانی نمیکند . این مسئله مارا از اینکه کامپایلر میتواند خطاهای زمان اعلان را بدست آورد ، مطمئن میکند . مسئله ای که منجر به ایجاد برنامه های ایمن تری میشود .

یکی از چیزهایی که باعث شده که جاوا ساده باشد عدم وجود اشاره گر ها ومحاسبات بر روی آنها است . این ویژگی حتی قدرت جاوا را هم با از میان بردن یک کلاس سراسری اشاره گر افزایش میدهد .

به طور مشابه تمام دسترسی به آرایه ها و رشته ها در زمان اجرا چک می شوند تا از قطعی بودن آنها اطمینان حاصل شود .با از بین بردن امکان دوباره نویسی حافظه و داده های هرزه ، تعویض نقش اشیاء از نوعی به نوع دیگر هم در زمان اجرا کنترل میشود تا از مجاز بودن آن اطمینان حاصل شود .

سرانجام زباله جمع کن خودکار جاوا بسیاری از عملیات پاکسازی مرتبط با معماری حافظه را راه اندازی میکند . چیزی که از خطاهای خطر ساز مرتبط با تخصیص و آزاد سازی حافظه جلوگیری میکند .

 ایمن : Secure

 یکی از دلایل پرطرفدار بودن جاوا این است که یک زبان ایمن است . این ویژگی مخصوصا به خاطر طبیعت توزیع شده ی آن بسیار مهم است .بدون وجود امنیت شما قطعا نمیخواهید که یک کد را از یک سایت تصادفی اینترنت بارگذاری کنید و به آن اجازه اجرا شدن روی کامپیوتر خودتان را هم بدهید . این دقیقا همان چیزی است که مردم هرروز با یک کد جاوا انجام میدهند . جاوا به صورت ایمن طراحی شده و چندین لایه کنترل امنیت به وجود می آورد که شما را در برابر کد های خطرساز محافظت می کنند و به کاربر اجازه میدهد که برنامه های ناشناخته را با خیال راحت اجرا کند .

همان طور که دیدیم ، برنامه جاوا نمیتواند اشاره گر ها را به حافظه یا آرایه های سرریز یا حافظه خواندنی خارج  از محدوده یک آرایه یا رشته اشاره ، اشاره دهد. این خصوصیت یکی از اصلی ترین وسایل دفاع جاوا در برابر کدهای خطرساز است . دومین راه دفاع در برابر کد های خطرساز ، پردازش کدهای بایتی به صورت قابل تصدیق و تایید است که مفسر جاوا به روی هر کدی که در حال بار گذاری باشد اعمال میکند . این مراحل تایید از اینکه کد به صورت درستی ساخته شده اطمینان حاصل میکنند ، که برای مثال پشته سرریزی یا زیرریزی نداشته باشد ، یا شامل کد های بایتی غیر مجاز نباشد .

کدهای بایتی خراب یا خطرساز ممکن است از ضعف های اجرایی در مفسر جاوا سوء‌ استفاده کنند . لایه ای که در اینجا ما را به طور ایمن محافظت میکند ، مدل جعبه شنی (Sand box) است : کدهای ناشناخته در یک جعبه شنی قرار میگیرند جایی که میتوانند به صورت ایمن اجرا شوند ، بدون اینکه هیچ صدمه ای به بقیه اجزاء یا محیط جاوا بزنند .

وقتی یک برنامه کاربردی یا دیگر کدهای ناشناخته در جعبه شنی در حال اجرا است ،‌ چند محدودیت در مورد کاری که میتواند انجام دهد ، وجود دارد . واضح ترین این محدودیت ها این است که هیچ دسترسی به هیچ یک از فایل های محلی سیستم وجود ندارد . در جعبه شنی محدودیت دیگری هم وجود دارد که به وسیله کلاس مدیریت امنیت اعمال میشود  . این مدل در ابتدا از اینکه سیستم های امنیتی را نصب کرده اید یا نه ، مطمئن میشود ، چرا که همه کلاس های جاوا نیاز به عملیات حساسی مانند دسترسی به سیستم فایل را دارند . اگر فراخوانی به وسیله یک کد ناشناخته به صورت مستقیم یا غیر مستقیم انجام شد ،‌ مدیر امنیت مورد استثناء‌ را می فرستد و عملیات صورت نمی گیرد .

و سرانجام در جاوا 1-1 یک راه حل ممکن دیگر برای مشکلات امنیتی وجود دارد ، به وسیله ضمیمه کردن یک امضاء دیجیتالی به کد جاوا که اصل آن کد میتواند به صورت پنهانی و نهفته ساخته شود . اگر شما اعتماد خود را به یک شخص یا یک سازمان مشخص کرده باشید ، کدی که امضاء آن هویت مورد اعتماد روی آن قرار دارد ،‌ ایمن و مطمئن است . حتی زمانیکه  در حال بارگذاری شدن در شبکه است و ممکن است حتی بدون جلوگیری توسط جعبه شنی اجرا شود .

 عملکرد سطح بالا :High Performance

 جاوا یک زبان تفسیر شده است ، بنابر این هرگز به سرعت زبان کامپایل شده ای مثل C نخواهد بود . گفته میشود که جاوا 0-1 به اندازه 20 برابر از C کند تر است . جاوا 1-1 تقریبا سرعتی دو برابر جاوا 1-1 دارد . بنابراین ممکن است عاقلانه باشد اینکه بگوییم کد C کامپایل شده 10 برابر سریع تر از کد های تفسیر شده ی جاوا اجرا میشود . اما قبل از اینکه به خاطر این موضوع مایوس شوید ، آگاه باشید که این سرعت بیشتر از آن چیزی است که برای برنامه های پرسرعت ، کاربردهایGUI (Graphical User Interface )  ، برنامه های برمبنای شبکه ، جایی که برنامه کاربردی معمولا آماده برای اجرا شدن است ، انتظار برای کاربر که یک دستوری اعمال کند و یا انتظار برای دریافت از شبکه ، لازم است .

به علاوه قسمت هایی که به سرعت های بالا نیاز دارند ، که کارهایی از قبیل الحاق رشته ها و مقایسه را انجام میدهند ، با کد محلی جاوا اجرا میشوند .

علاوه بر این کارایی ، بسیاری از مفسر های جاوا اکنون شامل کامپایلر های فقط در زمان " just in time " نیز هستند که میتواند کدهای بایتی جاوا را برای هر نوعCPU  در زمان اجرا به کد ماشین ترجمه کند . فرمت کد بایتی جاوا با این کامپایلر های در زمان در مرکز کافی و مناسب است و انصافا کدهای خوبی تولید میکند . در حقیقت   Sun ادعا میکند که کارایی کد های بایتی که به کد ماشین تبدیل شده اند ، تقریبا به خوبی کارآیی آن در C  و C++ است .

اگر شما خواهان این هستید که قابل حمل بودن کد ها را قربانی بهبود در سرعت آن کنید ، میتوانید بخش قابل توجهی از برنامه خود را در C و C++ بنویسید و از روش های مخصوص جاوا برای مشترک کردن با این کد محلی جاوا استفاده کنید .

 چند نخ کشی شده :Multitbreaded

 در یک برنامه کاربردی بر مبنای GUI شبکه ای ، مثل مرورگر وب ، تصور اینکه چند چیز بتوانند به طور همزمان اجرا شوند ، آسان است . یک کاربر میتواند همزمان با اینکه دارد یک صفحه وب را میخواند به یک کلیپ صوتی گوش دهد و همزمان در پس زمینه مرورگر یک عکس را بارگذاری کند .

جاوا یک زبان چندنخ کشی شده است ، که از چندین رشته اجرایی (گاهی پردازش سبک وزن خوانده میشود) پشتیبانی میکند و میتواند چندین کار را انجام دهد . یکی از مزیت های چندنخ کشی شده این است که عملکرد سطح بالایی برای کاربردهای گرافیکی برای کاربر فراهم میکند .

اگر شما سعی کرده اید که با نخ ها در C و C++ کار کنید ، میدانید که کمی مشکل است . جاوا برنامه نویسی با نخ ها را بسیار آسان تر کرده است ، با به وجود آوردن زبان درون ساخته شده ای که از نخ ها پشتیبانی میکند . بسته jana.lang یک کلاس بوجود آورده است که از روش هایی برای شروع و پایان یک نخ ، و مرتب کردن ترتیب گره ها در میان چیز های دیگر ، پشتیبانی میکند .

حتی دستورات زبان جاوا از نخ ها پشتیبانی میکنند ، که با استفاده از کلمات کلیدی مطابق شده . این کلمات کلیدی علامت گذاری بخش های کد یا تمامی روش هایی را که باید فقط با یک نخ در یک زمان اجرا شوند را به شدت آسان کرده است .

به دلیل اینکه جاوا استفاده از نخ ها را بسیار ساده میکند ، کلاس جاوا در شماری از جاها از این نخ ها استفاده میکند . برای مثال هر برنامه کاربردی که انیمیشن اجرا میکند ، از نخ ها استفاده کرده است .

به طور مشابه جاوا از برنامه های نا همگام ، ورودی ها و خروجی های بلاک نشده با اخطاری به وسیله سیگنال ها یا وقفه ها پشتیبانی نمیکند ، در این صورت شما باید یک نخ بسازید که روی هر کانال ورودی خروجی که با آن کار میکنید بلاک شده باشد 


نوشته شده در ساعت 7:17 عصر توسط محمد رضا رفعتی نظرات ( ) | |

<   <<   16   17   18   19   20   >>   >