موضوع مقاله: جاوا | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # جاوا | مقدمه: جاوا یک زبان برنامه‌نویسیِ شیءگرا است که نخستین بار توسط جیمز گاسلینگ در شرکت سان‌مایکروسیستمز ایجاد گردید و در سال ۱۹۹۱ به عنوان بخشی از سکوی جاوا منتشر شد. | ## بخش 1: جاوا | زبان جاوا شبیه به سی‌پلاس‌پلاس است؛ اما مدل شیءگرایی آسان‌تری دارد و از قابلیت‌های سطح پایین کمتری پشتیبانی می‌کند. یکی از قابلیت‌های بنیادین جاوا این است که مدیریت حافظه را به‌طور خودکار انجام می‌دهد. ضریب اطمینان عملکرد برنامه‌های نوشته‌شده به این زبان نسبت به زبان‌های نسل اول C بالاتر است. برنامه‌های جاوا به‌صورت بایت کد می‌شوند و توسط ماشین مجازی جاوا (JVM) به کدهای ماشین تبدیل و اجرا می‌شوند. در صورت وجود JVM مانند سایر زبان‌های مبتنی بر آن که وابسته به سیستم‌عامل خاصی نیستند، برنامه‌های نوشته شده به جاوا بر روی هر نوع سیستم‌عامل و هرگونه وسیلهٔ الکترونیکی قابل اجرا می‌باشند. در سال ۱۹۹۲ تیم پروژه green زبان جدیدی را معرفی کرد که با ابزارهای مختلف خانگی و لمسی کار می‌کرد. در سال ۱۹۹۳ وب جهانی توسعه یافت و زبان جدید با معرفی اپلت که قابلیت‌های زیادی به کامپیوترهای متصل به وب می‌افزود مشهور شد. در سال ۱۹۹۵ زبان OAK به JAVA تغییر نام پیدا کرد و توسط مایکروسافت و نت اسکیپ پشتیبانی شد. کاربرد جاوا در کامپایل به‌صورت بایت کد است که صرف نظر از معماری و خصوصیات آن کامپیوتر، قابلیت اجرا روی تمامی ماشین‌های شبیه‌سازی جاوا را دارد. اجزای اصلی کامپایلرهای جاوا، ماشین‌های پیاده‌سازی و کتابخانه‌های آن توسط شرکت مذکور از سال ۱۹۹۵ منتشر شد. با پیدایش java 2، نسخهٔ جدید توانست ترکیب‌های جدیدی را برای نوع‌های مختلف سکوهای مختلف ایجاد کند. به عنوان مثال J2EE، با هدف کاربرد برای تشکیلات سازمانی، و نسخهٔ سکوی جاوا، نسخه میکرو برای تلفن همراه منتشر شد. در سال ۱۹۹۶ با هدف بازاریابی، این شرکت نسخهٔ جدید J2 را با نام‌های سکوی جاوا، نسخه سازمانی، سکوی جاوا، نسخه میکرو و سکوی جاوا، نسخه استاندارد منتشر کرد. در ۱۳ نوامبر ۱۹۹۶ شرکت Sun نرم‌افزار جاوا را به‌صورت رایگان و با مجوز عمومی برای همه منتشر کرد. ماینکرافت یکی از بازی های معروف جهان با استفاده از این زبان برای اولین بار در سال ۲۰۰۹ توسط مارکوس پرسون ملقب به ناچ نوشته شد و این بازی در سال های بعد در سراسر دنیا معروف شد. اهداف اولیه در ایجاد زبان جاوا پنج هدف اصلی وجود داشت: این زبان باید ساده و شیءگرا باشد. مزایا و معایب: ماشین مجازی جاوا علاوه بر قابلیت‌های بسیاری که در اختیار برنامه‌نویسان قرار می‌دهد، محدودیت‌هایی را هم ایجاد می‌کند که البته این محدودیت‌ها به نوعی راه‌گشا هستند؛ چرا که منجر به ارتقاء امنیت نرم‌افزارهای نوشته‌شده با جاوا می‌شوند؛ به عبارت دیگر، با به‌کارگیری جِی‌وی‌اِم دولوپرها به هیچ وجه نمی‌توانند بخشی از حافظهٔ اختصاص‌یافته به دیگر قسمت‌های برنامه را به زور تصاحب کنند تا بدین طریق بتوانند مثلاً آبجکتی جدید ساخته و فضای حافظه را به آن اختصاص دهند. یکی از مزایای کامپایل سورس‌کد و تبدیل آن به بایت‌کد این است که بدین طریق می‌توان از دیگر زبان‌های برنامه‌نویسی نیز در توسعهٔ اپلیکیشن‌های نوشته‌شده به زبان جاوا استفاده کرد؛ به عبارت دیگر، چنانچه یک زبان برنامه‌نویسی قابلیتی داشته باشد که بتوان در ابتدا سورس‌کد مد نظر را کامپایل کرده و آن را به بایت‌کدی قابل‌فهم برای جاوا تبدیل کرد، در چنین شرایطی ماشین مجازی جاوا امکان اجرای آن بخش از کد که به زبان دیگری نوشته شده‌است را در کنار کدهای جاوا دارا است. اپلت‌ها امکانات فراوانی برای نوشتن برنامه‌های تحت وب در اختیار برنامه‌نویسان قرار می‌دهند. اپلت‌ها نظیر فناوری سیلورلایت شرکت مایکروسافت هستند که برنامه‌نویسان را قادر می‌سازد تا امکاناتی را به مرورگر کاربر بیفزایند. قابلیت حمل: جاوا بر روی سکوهای رایانش گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از ۱۰۲۴ پردازنده (CPU) برای پردازش. به این صورت که کد کامپایل شدهٔ جاوا ذخیره می‌شود، اما نه به‌صورت کد ماشین بلکه به‌صورت بایت‌کد جاوا. دستورالعمل‌ها شبیه کد ماشین هستند، اما با ماشین‌های مجازی که به‌طور خاص برای سخت‌افزارهای مختلف نوشته شده‌اند، اجرا می‌شوند. در بعضی از نسخه‌های ماشین مجازی جاوا، بایت‌کدها می‌توانند قبل و در زمان اجرای برنامه به کدهای محلی کامپایل شوند. اما ترجمهٔ کلی یعنی برنامه‌های ترجمه شده (برنامه‌های نوشته شده به زبان‌های Interpreter ای مثل جاوا) تقریباً همیشه کندتر از برنامه‌های کامپایل شدهٔ محلی اجرا می‌شوند. این شکاف می‌تواند با چند تکنیک خوش‌بینانه که در کاربردهای JVM قبلی معرفی شد، کم شود. یکی از این تکنیک‌ها JIT است که بایت‌کد جاوا را به کد محلی ترجمه کرده و سپس آن را پنهان می‌کند. بیشتر JVMهای پیشرفته، به‌صورت کامپایل مجدد پویا، در آنالیز JVM، رفتار برنامهٔ اجرا شده و کامپایل مجدد انتخاب شده و بهینه‌سازی قسمت‌های برنامه، استفاده می‌شوند. کامپایل مجدد پویا می‌تواند کامپایل ایستا را بهینه‌سازی کند؛ زیرا می‌تواند قسمت hot spot برنامه و گاهی حلقه‌های داخلی که ممکن است زمان اجرای برنامه را افزایش دهند را تشخیص دهد. کامپایل JIT و کامپایل مجدد پویا به برنامه‌های جاوا اجازه می‌دهد که سرعت اجرای کدهای محلی بدون از دست دادن قابلیت انتقال افزایش پیدا کند. تکنیک بعدی به عنوان کامپایل ایستا شناخته شده‌است؛ که کامپایل مستقیم به کدهای محلی است مانند بسیاری از کامپایلرهای قدیمی. در تعدادی از تست‌ها نشان داده شد که کارایی کامپایلر JIT کاملاً مشابه کامپایلر محلی شد. | ## بخش 2: جاوا | یکی از پیشرفت‌های بی‌نظیر در در زمان اجرای ماشین این بود که خطاها ماشین را دچار اشکال نمی‌کردند. علاوه بر این در زمان اجرای ماشینی مانند جاوا وسایلی وجود دارد که به زمان اجرای ماشین متصل شده و هر زمانی که یک استثناء رخ می‌دهد، اطلاعات اشکال زدایی که در حافظه وجود دارد، ثبت می‌کنند. پیاده‌سازی شرکت سان‌مایکروسیستمز مجوز رسمی برای پلتفرم استاندارد جاوا را به مایکروسافت ویندوز، لینوکس و سولاریس داده‌است. علامت تجاری مجوز شرکت سان‌میکروسیستمز طوری بود که با همهٔ پیاده‌سازی‌ها سازگار باشد. به علت اختلاف قانونی که با مایکروسافت پیدا کرد، زمانی که شرکت سان ادعا کرد که پیاده‌سازی مایکروسافت از RMI یا JNI پشتیبانی نکرده و ویژگی‌های خاصی را برای خودش اضافه کرده‌است. شرکت سان در سال ۱۹۹۷ پیگیری قانونی کرد و در سال ۲۰۰۱ در توافقی ۲۰ میلیون دلاری برنده شد. شرکت سان و دیگران یک سیستم اجرای جاوای رایگان برای آن‌ها و نسخه‌های دیگر ویندوز فراهم آوردند. از نظر تاریخی، مجوز مارک تجاری Sun برای استفاده از مارک جاوا اصرار دارد که همهٔ پیاده‌سازی‌ها سازگار باشد. پس از آنکه Sun ادعا کرد که اجرای مایکروسافت از RMI یا JNI پشتیبانی نمی‌کند و ویژگی‌های مختص پلتفرم را به خود اختصاص داده‌است، این منجر به اختلاف حقوقی با مایکروسافت شد. Sun در سال ۱۹۹۷ شکایت کرد و در سال ۲۰۰۱، به مبلغ ۲۰ میلیون دلار و همچنین حکم دادگاه برای اجرای شرایط مجوز از Sun پیروز شد. جاوا مستقل از بسترهای نرم‌افزاری برای Java EE ضروری است و برای تأیید یک پیاده‌سازی اعتبار سنجی دقیق‌تری نیز لازم است. اداره خودکار حافظه جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شیء استفاده می‌کند. برنامه‌نویس زمانی که اشیاء به وجود می‌آیند، این حافظه را تعیین می‌کند؛ و در زمان اجرا نیز، زمانی که این اشیاء در استفادهٔ زیاد طولانی نباشند، برنامه‌نویس مسئول بازگرداندن این حافظه‌است. زمانی که مرجعی برای شی‌های باقی‌مانده نیست، شی‌های غیرقابل دسترس برای آزاد شدن به صورت خودکار توسط بازیافت حافظه، انتخاب می‌شوند. اگر برنامه‌نویس مقداری از حافظه را برای شی‌هایی که زیاد طولانی نیستند، نگه دارد، چیزهایی شبیه سوراخ حافظه اتفاق می‌افتند. یکی از عقایدی که پشت سر مدل ادارهٔ حافظهٔ خودکار جاوا وجود دارد، این است که برنامه‌نویس هزینهٔ اجرای ادارهٔ دستی حافظه را نادیده می‌گیرد. در بعضی از زبان‌ها حافظه لازم برای ایجاد یک شیء، به صورت ضمنی و بدون شرط، به پشته تخصیص داده می‌شود؛ یا به‌طور صریح اختصاص داده شده و از heap بازگردانده می‌شود. اگر برنامه تلاش کند به حافظه‌ای را که هم‌اکنون بازگردانده شده، دستیابی پیدا کند یا برگرداند، نتیجه تعریف شده نیست و ممکن است برنامه بی‌ثبات شده یا تخریب شود. این ممکن است با استفاده از اشاره‌گر مدتی باقی بماند، اما سرباری و پیچیدگی برنامه زیاد می‌شود. اگر حافظهٔ خالی کافی برای تخصیص شیء جدید در هیپ وجود نداشته باشد، ممکن است برنامه برای چند دقیقه متوقف شود. همانند ++C و بعضی زبان‌های شی‌گرای دیگر، متغیرهای نوع‌های اولیهٔ جاوا شی‌گرا نبودند. گرامر گرامر جاوا محدودتر از ++C است و برخلاف ++C که ترکیبی است از ساختارها و شی‌گرایی، زبان جاوا یک زبان شی‌گرای خالص می‌باشد. جاوا بسیاری از ویژگی‌ها را پشتیبانی می‌کند و از کلاس‌ها برای ساده‌تر کردن برنامه‌نویسی و کاهش خطا استفاده می‌کند. نمونه‌هایی از برنامه‌های جاوا در زیر نمونه‌ای از برنامه‌ای که در جاوا نوشته شده‌است آورده شده‌است. البته برای کامپایل کردن این برنامه بایستی JDK (کیت توسعهٔ جاوا) بر روی سیستم مورد نظر نصب شده باشد. کامپایلر برای هر کلاسی که در فایل اصلی تعریف می‌شود یک کلاس فایل تولید می‌کند؛ که نام این کلاس فایل همنام کلاس است با پسوند class. کلمهٔ کلیدی public (عمومی) برای قسمت‌هایی که می‌توانند از کدهای کلاس‌های دیگر صدا زده شوند، به کار برده می‌شود. کلمهٔ کلیدی static (ایستا) در جلوی یک تابع، یک تابع ایستا را که فقط وابسته به کلاس است و نه قابل استفاده برای نمونه‌هایی از کلاس، نشان می‌دهد. در حال حاضر چهار توزیع‌کنندهٔ عمدهٔ جاوا وجود دارند: سان میکروسیستمز: توزیع‌کننده اصلی جاوا و مبدع آن می‌باشد. GNU Classpath: این توزیع از سوی مؤسسه نرم‌افزارهای آزاد منتشر شده و تقریباً تمامی کتابخانه استاندارد زبان جاوا در آن بدون بهره‌گیری از توزیع شرکت سان از اول پیاده‌سازی شده‌است. فلسفهٔ انتخاب نام Classpath برای این پروژه رها کردن تکنولوژی جاوا از وابستگی به علامت تجاری جاوا است به‌طوری‌که هیچ وابستگی یا محدودیتی برای استفاده آن از لحاظ قوانین حقوقی ایجاد نشود و از طرفی به خاطر وجود متغیر محیطی classpath در تمامی محیط‌های اجرایی برنامه‌های جاوا، این نام به نوعی تکنولوژی جاوا را برای خواننده القا می‌کند. لازم است ذکر شود که در حال حاضر شرکت سان تقریباً تمامی کدهای JDK را تحت مجوز نرم‌افزارهای آزاد به‌صورت متن باز منتشر کرده‌است و قول انتشار قسمت بسیار کوچکی از این مجموعه را که به‌دلیل استفاده از کدهای شرکت‌های ثانویه نتوانسته به‌صورت متن باز منتشر نماید در آینده نزدیک با بازنویسی این کدها داده‌است. | ## بخش 3: جاوا | مشخصه های جاوا برنامک (برنامه‌های کاربردی کوچک) اپلت جاواها برنامه‌هایی هستند که برای کاربردهایی نظیر نمایش در صفحات وب، ایجاد شده‌اند. کلاس اپلت چارچوبی برای کاربردهای گروهی برای نمایش و کنترل چرخهٔ زندگی اپلت، درست می‌کند. کلاس اپلت یک تابع پنجره‌ای مجرد است که برنامه‌های کوچکی با قابلیت نشان دادن واسط گرافیکی برای کاربر را فراهم می‌کند. تابع paint شی‌های گرافیکی را که شامل زمینه‌های گرافیکی هستند را می‌فرستد تا برای نمایش اپلت‌ها استفاده شوند. JSP ها عموما برای پاسخ به درخواست های کاربران مبتنی بر پروتکل Http مورد استفاده قرار میگیرند. کتابخانه‌های کلاس کتابخانه‌های جاوا که به صورت بایت کد از کد اصلی کامپایل شده‌اند، برای پشتیبانی از بعضی از کاربردهای جاوا، توسط JRE منتشر شده‌است. مثال‌هایی از این کتابخانه‌ها عبارتند از: کتابخانه‌های مرکزی که شامل: کتابخانه‌هایی که برای ساختار داده کاربرد دارند. کتابخانهٔ پرداز XML (تجزیه، تغییر شکل، اعتبار) کتابخانه‌های موضعی و بین‌المللی کتابخانه‌های انتگرال‌گیری که امکان تایپ کردن توسط سیستم‌های بیرونی را می‌دهند. APIها برای ضبط صدا، پردازش و باز نواختی کاربردهای وابستهٔ پلتفرم ماشین‌های مجازی جاوا Plugins که توانایی اجرا شدن در مرورگرهای وب را به اپلت می‌دهد. حذف اشاره‌گرها در جاوا به دلیل مشکلاتی بوده که آن‌ها در طول تاریخ‌شان به وجود آورده‌اند (البته در زمان گذشته که در برنامه‌هایی مانند ++C برنامه‌نویس مستقیماً به مدیریت اشاره گر اقدام می‌نمود)، اگرچه این موارد در برنامه‌های سیستمی لازم به‌نظر می‌رسد ولی در محیط‌های تحت‌وب که بستر اصلی جاوا هستند می‌توانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامه‌های سیستمی دارند داشته باشند و باعث می‌شود که توجه برنامه‌نویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاس‌پذیری برنامه به تنظیم اشاره‌گرها معطوف گردد. تست برنامه‌های نوشته شده توسط جاوا جاوا امروزه به عنوان یک زبان پر کاربرد به خصوص در برنامه‌های کاربردی تجاری مطرح است و بسیاری از سازمان‌ها و شرکت‌های از این زبان و تکنولوژی‌های مربوط به آن استفاده می‌کنند. ابزارهای زیادی برای تست برنامه‌های نوشته شده توسط جاوا مورد استفاده قرار می‌گیرند. برای حل این مشکل و سایر مشکلات نیاز به تست نرم‌افزارهای نوشته شده در جاوا هستیم. بهتر از قبل از نوشتن برنامه‌های تجاری بزرگ به تست و نحوه تضمین کیفیت آن هم فکر شود. شباهت اسمی جاوا و جاوااسکریپت برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه می‌گیرند. درحالی‌که این دو زبان گرچه در ظاهر و کلمات شباهت دارند ولی به‌طور ساختاری با یکدیگر کاملاً متفاوت هستند. جاوا برای اجرا باید به زبان ماشین مجازی ترجمه شود اما جاوااسکریپت زبانی است که معمولاً در صفحات وب نوشته می‌شود و توسط مرورگر تفسیر می‌گردد. در جاوا متغیرها همگی بر اساس نوع آن‌ها معرفی می‌شوند ولی در جاواسکریپت نوع متغیرها به صورت ضمنی مشخص می‌شود. تغییرات مهم جاوا در نسخه ۸ جاوا در نسخه ۸ تغییرات بسیار مهم و گسترده‌ای داشته‌است. مفاهیمی مانند واسط‌های تابعی، عبارت‌های لامبدا، جویبار (Stream) و امکانات گسترده کتابخانه‌ای در این نسخه معرفی شده‌اند. جاوا نسخه ۹ و ماژولار شدن جاوا (پروژه Jigsaw) در نسخهٔ جاوا ۹ که در تاریخ ۲۱ سپتامبر ۲۰۱۷، به صورت عمومی عرضه شد، پروژه‌ای به نام Jigsaw به آن اضافه شد که قابلیت برنامه‌نویسی در قالب ماژول را در جاوا امکان‌پذیر کرد داشتن یک پلتفرم ماژولار و ماژولار شدن JDK به توسعه‌دهندگان آن کمک می‌کند چنین پلتفرم قدیمی، گنده و بزرگی را مدیریت کنند و به جلو حرکت دهند. آن‌طور که معماران آن می‌گویند، الان تنها فرصتی بود که به سمت ماژولار کردن JDK پیش بروند وگرنه در آینده هرگز چنین اتفاقی ممکن نمی‌شد. ماژولاریتی علاوه بر کمک کردن به توسعه‌دهندگان JDK برای حرکت آن رو به جلو، فرصتی استثنایی‌تر را برای ما ایجاد می‌کند. اما برای اجرا و توزیع برنامه‌تان نیاز به یک JRE کامل و حجیم دارید که احتمالاً راه انداختنش هم چندان ارزان نیست. اما با ماژولار شدن جاوا شما می‌توانید فقط ماژول‌هایی که استفاده کرده‌اید را در قالب یک Runtime Image داشته باشید که دیگر چیزهای اضافی‌ای که از آن‌ها استفاده نکرده‌اید را ندارد. با این قابلیت، حجم برنامه‌ها کم شده و شما می‌توانید از دستگاه‌های Embedded که حافظه محدودتری دارند هم استفاده کنید. هر ماژول دارای یک اسم است، کدهای مرتبط و پکیج‌ها را در درون خود نگه می‌دارد و کامل است به این معنی که یک کار مشخص را انجام می‌دهد و وظایفش را از طریق APIهای مشخص شده در دسترس دیگران قرار می‌دهد. یک ماژول به صورت صریح بیان می‌کند برای کار کردن به چه ماژول‌هایی نیاز دارد و کدام بخش از پکیج‌هایش برای دیگر ماژول‌ها قابل دسترسی است. این‌گونه به سادگی می‌توانیم وابستگی بین ماژول‌ها را تشخیص دهیم، بر روی Internal APIهایمان کنترل داشته باشیم و در صورت نبود یک ماژول در آغاز برنامه از نبود آن فوراً مطلع شویم و در صورت وجود هرگونه تداخلی به سرعت به خطا بربخوریم. به‌طور خلاصه باید گفت با استفاده از این قابلیت دیگر نیاز به تعیین دقیق نوع متغیرهای محلی نداریم. جاوا در سال ۲۰۲۰ در مقایسه با زبان‌های برنامه‌نویسی دیگر جاوا یکی دیگر از گزینه‌های محبوب در سازمان‌های بزرگ می‌باشد و ده‌ها سال است که به همان شکل باقی مانده‌است. جاوا به‌طور گسترده‌ای برای ساخت برنامه‌های تحت وب در مقیاس سازمانی استفاده می‌شود و مدت‌هاست که در لیست بهترین زبان‌های برنامه‌نویسی دیده می‌شود. | ## جمع‌بندی | اگر به دنبال شغل مبتنی بر توسعه در یک سازمان بزرگ هستید، جاوا زبانی است که شما باید یاد بگیرید.