جاوا ، یک زبان برنامه نویسی شئ گراست که شرکت سان مایکرو سیستمز آن را ابداع کرده است. زبان جاوا شبیه به ++C است اما مدل شیءگرایی آسانتری دارد و از قابلیتهای سطح پایین کمتری پشتیبانی میکند. یکی از قابلیتهای اصلی جاوا این است که مدیریت حافظه را بطور خودکار انجام میدهد. ضریب اطمینان عملکرد برنامههای نوشته شده به این زبان بالا است و وابسته به سیستم عامل خاصی نیست ، به عبارت دیگر میتوان آن را روی هر رایانه با هر نوع سیستم عاملی اجرا کرد. برنامههای جاوا به صورت کدهای بیتی همگردانی (کامپایل) میشوند که مانند کد ماشین هستند و به ویژه وابسته به سیستم عامل خاصی نمیباشند.
تاریخچه :
در مقایسه با زبانهای دیگر ، همچون ++C یا بیسیک یا فورترن ، جاوا زبان نسبتاً جدیدتری است . شرکت سان مایکرو سیستمز در سال ۱۹۹۱ یک پروژه تحقیقاتی به نام گرین (Green) را آغاز کرد . هدف این پروژه ایجاد زبانی جدید شبیه به ++C بود که نویسنده اصلی آن ، جیمز گاسلینگ ، آن را بلوط (Oak) نامید . اما بعدها به دلیل برخی مشکلات حقوقی از میان لیستی از کلمات تصادفی نام آن به جاوا تغییر کرد . پروژه گرین به دلیل مشکلات بازاریابی در شرف لغو شدن بود تا اینکه گسترش وب در سال ۱۹۹۳ باعث نمایش تواناییهای وافر جاوا در این عرصه گشت . اینگونه بود که شرکت سان مایکرو سیستمز در مه ۱۹۹۵ جاوا را رسماً به بازار عرضه کرد . جاوا یک زبان برنامهنویسی است که در ابتدا توسط شرکت Sun Microsystems ایجاد شده است و در سال 1995 به عنوان مولفه اصلی Java Platform منتشر شد . این زبان قسمت های بسیاری از گرامر خود را از C و ++C گرفته اما دارای مدل شیگرایی سادهای است و امکانات سطح پایین کمی دارد . کاربرد جاوا در کامپایل به صورت بایت کد است که قابلیت اجرا روی تمامی ماشینهای شبیهسازی جاوا را داشته باشد صرف نظر از معماری و خصوصیات آن کامپیوتر . اجرای اصلی کامپایلرهای جاوا ، ماشینهای پیادهسازی و کتابخانههای آن توسط این شرکت از سال 1995 منتشر شد . در 2007 may این شرکت ، نرمافزار رایگان این زبان را فراهم کرد . دیگران هم کاربردهای دیگری از این زبان را منتشر کردند مثل کامپایلر [GNU] برای جاوا . James Gosling پروژه زبان برنامهنویسی جاوا را در 1991 June آغاز کرد . این زبان در ابتدا Oak ، سپس Green و در آخر هم جاوا نامیده شد . Gosling قصد داشت یک ماشین مجازی و یک ماشینی به کار برد که شبیه C و ++C باشد . این شرکت نسخهٔ اول جاوا را تحت عنوان Java1.0 در سال 1995 منتشر ساخت . جستجوگرهای اصلی وب ، به هم پیوستند تا به طور مطمئن (java) applet را بدون صفحات وب اجرا کنند و به این صورت جاوا خیلی زود معروف و محبوب شد . با پیدایش java2 ، نسخهٔ جدید توانست ترکیبهای جدیدی را برای نوعهای مختلف پلت فرمها ایجاد کند . در سال 1997 شرکت سان میکروسیستمز ،ISO/IEC JTC1 standards body و Ecma International را به فرمول جاوا تغییر داد . شرکت Sun بسیاری از کاربردهای جاوایش را بدون هیچ هزینهای فراهم آورد . شرکت sun با فروش مجوز برای بعضی از کاربردهای خاصش مثل Java Enterprise System درآمدی را بدست آورد . اولین تمایزی که بین SDK و JRE داد شامل فقدان کامپایلر برای JRE و سرفایل ها بود . در 13 نوامبر 2006 شرکت sun نرمافزار جاوا را به صورت رایگان و با مجوز عمومی برای همه منتشر کرد . جاوا یک پلتفرم نرمافزاری است .
اهداف اولیه :
- این زبان باید ساده ، شیگرا و مشهور باشد.
- مطمئن و بدون خطا باشد.
- وابسته به معماری کامپیوتر نبوده و قابل انتقال باشد.
- باید با کارایی بالا اجرا شود . 5- باید به صورت پویا و نخکشی شده باشد.
برنامههای جاوا و اپلت ها :
جاوا برای نوشتن انواع برنامههای کاربردی مناسب است . با جاوا میتوان انواع برنامههای زیر را نوشت : برنامههای تحت وب ، برنامهنویسی سیستمهای کوچک مانند موبایل ، پاکت پیسی و ... ، برنامههای کاربردی بزرگ (Enterprise) ، برنامههای رومیزی (Desktop) و غیره . قابلیت خاصی در جاوا وجود دارد بنام اپلت . اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامهنویسان قرار میدهند که دیگر زبانهای برنامهنویسی فاقد آن هستند . البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است . اپلتها نظیر فناوری Activex شرکت مایکروسافت هستند که برنامهنویسان را قادر میسازد تا امکاناتی را به مرورگر کاربر بیافزایند . البته تفاوت این دو در امنیت میباشد به گونهای که اپلتها بدلیل اینکه در محیطی به نام جعبه شنی اجرا میشوند امن هستند ولی Activex ها فاقد چنین امنیتی هستند.
- سیستمعامل : هر چقدر زبانهای .net قوی باشند تنها بر روی پلت فرم ویندوز اجرا میشوند و برخی ویندوز را سیستمعامل غیر قابل اعتمادی در برنامه نویسی Enterprise میدانند . ولی جاوا از این نظر انتخابی خوب است .
- قابلیت حمل : جاوا بر روی پلتفرمهای گوناگونی قابل اجرا است ، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از 1024 cpu برای پردازش .
- جاوا بیشتر از یک زبان است : جاوا فقط یک زبان نیست و انجمنهایی متشکل از بزرگان صنایع و برنامه نویسان زیادی مشغول به توسعه و ایجاد استانداردهای جدید و به روز هستند .
خط مشی جاوا :
یکی از ویژگیهای جاوا قابل حمل بودن آن است . یعنی برنامهٔ نوشته شده به زبان جاوا باید به طور مشابهی در کامپیوترهای مختلف با سخت افزارهای متفاوت اجرا شود . و باید این توانایی را داشته باشد که برنامه یک بار نوشته شود ، یک بار کامپایل شود و در همه کامپیوترها اجرا گردد . به این صورت که کد کامپایل شدهٔ جاوا را ذخیره میکند ، اما نه بهصورت کد ماشین بلکه بهصورت بایت کد جاوا . دستورالعملها شبیه کد ماشین هستند ، اما با ماشینهای مجازی که به طور خاص برای سخت افزارهای مختلف نوشته شدهاند ، اجرا میشوند . در نهایت کاربر از JRE نصب شده روی ماشین خود یا جستجوگر وب استفاده میکند . کتابخانههای استاندارد یک راه عمومی برای دسترسی به ویژگیهای خاص فراهم میکنند . مانند گرافیک ، نخکشی و شبکه . در بعضی از نسخههای JVM بایت کدها میتوانند قبل و در زمان اجرای برنامه به کدهای محلی کامپایل شوند . فایدهٔ اصلی استفاده از بایت کد ، قسمت کردن است . اما ترجمهٔ کلی یعنی برنامههای ترجمه شده تقریباً همیشه کندتر از برنامههای کامپایل شدهٔ محلی اجرا میشوند . این شکاف میتواند با چند تکنیک خوشبینانه که در کاربردهای JVM قبلی معرفی شد ، کم شود . یکی از این تکنیکها JIT است که بایت کد جاوا را به کد محلی ترجمه کرده و سپس آن را پنهان میکند . در نتیجه برنامه خیلی سریعتر نسبت به کدهای ترجمه شدهٔ خالص شروع و اجرا میشود . بیشتر VM های پیشرفته ، بهصورت کامپایل مجدد پویا ، در آنالیز VM ، رفتار برنامهٔ اجرا شده و کامپایل مجدد انتخاب شده و بهینهسازی قسمتهای برنامه ، استفاده میشوند . کامپایل مجدد پویا میتواند کامپایل ایستا را بهینهسازی کند . زیرا میتواند قسمت hot spot برنامه و گاهی حلقههای داخلی که ممکن است زمان اجرای برنامه را افزایش دهند را تشخیص دهد . کامپایل JIT و کامپایل مجدد پویا به برنامههای جاوا اجازه میدهد که سرعت اجرای کدهای محلی بدون از دست دادن قابلیت انتقال افزایش پیدا کند . تکنیک بعدی به عنوان کامپایل ایستا شناخته شده است . که کامپایل مستقیم به کدهای محلی است مانند بسیاری از کامپایلرهای قدیمی . کامپایلر ایستای جاوا ، بایت کدها را به کدهای شی محلی ترجمه میکند . کارایی جاوا نسبت به نسخههای اولیه بیشتر شد . در تعدادی از تستها نشان داده شد که کارایی کامپایلرJIT کاملاََ مشابه کامپایلر محلی شد . عملکرد کامپایلرها لزوماَ کارایی کدهای کامپایل شده را نشان نمیدهند . یکی از پیشرفت های بی نظیر در در زمان اجرای ماشین این بود که خطا ها ماشین را دچار اشکال نمیکردند . علاوه بر این در زمان اجرای ماشینی مانند جاوا وسایلی وجود دارد که به زمان اجرای ماشین متصل شده و هر زمانی که یک استثنا رخ میدهد ، اطلاعات اشکال زدایی که در حافظه وجود دارد ، ثبت میکنند.
پیاده سازی :
شرکت سان میکرو سیستم مجوز رسمی برای پلت فرم استاندارد جاوا را به Microsoft Windows ، Linux و Solaris داده است . همچنین محیطهای دیگری برای دیگر پلت فرم ها فراهم آورده است . علامت تجاری مجوز شرکت سان میکروسیستم طوری بود که با همهٔ پیاده سازی ها سازگار باشد . به علت اختلاف قانونی که با ماکروسافت پیدا کرد ، زمانی که شرکت سان ادعا کرد که پیاده سازی ماکروسافت از RMI یا JNI پشتیبانی نکرده و ویژگی های خاصی را برای خودش اضافه کرده است . شرکت سان در سال 1997 پیگیری قانونی کرد و در سال 2001 در توافقی 20 میلیون دلاری برنده شد . در نتیجه کمی بعد ماکروسافت جاوا را به ویندوز فرستاد . در نسخهٔ اخیر ویندوز ، جستجوگر اینترنت نمیتواند از جاوا پلت فرم پشتیبانی کند . شرکت سان و دیگران یک سیستم اجرای جاوای رایگان برای آنها و نسخههای دیگر ویندوز فراهم آوردند.
اداره خودکار حافظه :
جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شی استفاده میکند . برنامهنویس زمانی که اشیا به وجود میآیند ، این حافظه را تعیین میکند . و در زمان اجرا نیز ، زمانی که این اشیا در استفادهٔ زیاد طولانی نباشند ، برنامه نویس مسئول بازگرداندن این حافظه است . زمانی که مرجعی برای شی های باقیمانده نیست ، شیهای غیر قابل دسترس برای آزاد شدن به صورت خودکار توسط بازیافت حافظه ، انتخاب میشوند . اگر برنامهنویس مقداری از حافظه را برای شیهایی که زیاد طولانی نیستند ، نگه دارد ، چیزهایی شبیه سوراخ حافظه اتفاق میافتند . یکی از عقایدی که پشت سر مدل ادارهٔ حافظهٔ خودکار جاوا وجود دارد ، این است که برنامهنویس هزینهٔ اجرای ادارهٔ دستی حافظه را نادیده میگیرد . در بعضی از زبانها حافظه لازم برای ایجاد یک شی ، به صورت ضمنی و بدون شرط ، به پشته تخصیص داده میشود . و یا بهطور صریح اختصاص داده شده و از Heap بازگردانده میشود . در هر کدام از این راهها ، مسئولیت ادارهٔ اقامت حافظه با برنامهنویس است . اگر برنامه شی را برنگرداند ، سوراخ حافظه اتفاق میافتد . اگر برنامه تلاش کند به حافظهای را که هماکنون بازگردانده شده ، دستیابی پیدا کند یا برگرداند ، نتیجه تعریف شده نیست و ممکن است برنامه بیثبات شده و یا تخریب شود . این ممکن است با استفاده از اشارهگر مدتی باقی بماند ، اما سرباری و پیچیدگی برنامه زیاد میشود . بازیافت حافظه اجازه دارد در هر زمانی اتفاق بیفتد . بهطوری که این زمانی اتفاق میافتد که برنامه بیکار باشد . اگر حافظهٔ خالی کافی برای تخصیص شی جدید در Heap وجود نداشته باشد ، ممکن است برنامه برای چند دقیقه متوقف شود . در جایی که زمان پاسخ یا اجرا مهم باشد ، ادارهٔ حافظه و منابع اشیا استفاده میشوند . جاوا از نوع اشارهگر ریاضی C و ++C پشتیبانی نمیکند . در جایی که آدرس اشیا و اعداد صحیح میتوانند به جای هم استفاده شوند . همانند ++C و بعضی زبانهای شیگرای دیگر ، متغیرهای نوعهای اولیهٔ جاوا شیگرا نبودند. مقدار نوعهای اولیه ، مستقیماً در فیلدها ذخیره میشوند. در فیلدها (برای اشیا) و در پشته (برای توابع) ، بیشتر از Heap استفاده میشود. این یک تصمیم هوشیارانه توسط طراح جاوا برای اجرا است . به همین دلیل جاوا یک زبان شیگرای خالص به حساب نمیآید.
گرامر :
گرامر جاوا خیلی بزرگتر از ++C است. مثل ++C که ترکیب ساختارها و برنامههای شیگرا میباشد ، نیست . بلکه زبان جاوا یک زبان شیگرای خالص است . همهٔ کدهایی که داخل کلاس نوشته میشود و همهٔ چیزهایی که داخل شی است ، با استثنائات نوع دادهٔ اصلی ، که به صورت کلاس نیستند ، برای اجرا . جاوا بسیاری از ویژگیها را پشتیبانی میکند. از کلاسها برای سادهتر کردن زبان و جلوگیری از رخداد خطا.
توزیعهای جاوا :
منظور از توزیع جاوا پیاده سازیهای مختلفی است که برای کامپایلر جاوا و همچنین مجموعه کتابخانههای استاندارد زبان جاوا (JDK) وجود دارد . در حال حاضر چهار توزیع کنندهٔ عمده جاوا وجود دارند :
- سان میکروسیستمز : توزیع کننده اصلی جاوا و مبدع آن میباشد . در اکثر موارد هنگامی که گفته میشود جاوا منظور توزیع سان میباشد.
- GNU Classpath : این توزیع از سوی موسسه نرمافزارهای آزاد منتشر شده و تقریبا تمامی کتابخانه استاندارد زبان جاوا در آن بدون بهرهگیری از توزیع شرکت سان از اول پیادهسازی شده است . یک کامپایلر به نام GNU Compiler for Java نیز برای کامپایل کردن کدهای جاوا توسط این موسسه ایجاد شده است . فلسفه انتخاب نام Classpath برای این پروژه رها کردن تکنولوژی جاوا از وابستگی به علامت تجاری جاوا است بطوریکه هیچ وابستگی یا محدودیتی برای استفاده آن از لحاظ قوانین حقوقی ایجاد نشود و از طرفی به خاطر وجود متغیر محیطی classpath در تمامی محیط های اجرایی برنامههای جاوا ، این نام به نوعی تکنولوژی جاوا را برای خواننده القا میکند . کامپایلر GNU توانایی ایجاد کد اجرایی (در مقابل بایت کد توزیع سان) را داراست.
- مایکروسافت #J : این در حقیقت یک توزیع جاوا نیست . بلکه زبانی مشابه میباشد که توسط مایکروسافت و در چارچوب .net ارائه شدهاست . انتظار اینکه در سیستم عاملی غیر از ویندوز هم اجرا شود را نداشته باشید.
- AspectJ : این نیز یک زبان مجزا نیست . بلکه یک برنامه الحاقی میباشد که امکان برنامه نویسی Aspect Oriented را به جاوا میافزاید . این برنامه توسط بنیاد برنامهنویسی جلوهگرا و به صورت کدباز ارائه شده است.
-
- تعداد بازدید: 2943
- تاریخ انتشار: سه شنبه 14 دی 1389 ساعت 16:50