سیستم مدیریت کسب وکارها و ارتباطات

زبان برنامه‌نویسی Java

    مهندس برزویی
    • نمایش 7
    توسط مهندس برزویی
    زبان برنامه‌نویسی Java

    باید توجه داشته باشیم که زبان Java را با زبان JavaScript اشتباه نگیریم؛ به‌طور کلی، زبان برنامه‌نویسی Java یک زبان چندمنظوره و شیٔ‌گرا است. زبان برنامه‌نویسی جاوا شبیه به زبان سی‌پلاس‌پلاس است اما شیٔ‌گرایی در آن ساده‌تر شده است و از قابلیت‌های سطح پایین کمتری پشتیبانی می‌کند. یکی از قابلیت‌های زبان برنامه‌نویسی Java این است که مدیریت حافظه را به‌صورت خودکار انجام می‌دهد؛ علاوه‌بر این، شعار جالبی که دولوپرهای جاوا دارند این است که «یک بار بنویس و همه‌جا اجراش کن». زبان برنامه‌نویسی جاوا به‌عنوان یکی از زبان‌های اصلی توسعهٔ اپلیکیشن برای سیستم‌عامل محبوب و اپن‌سورس اندروید محسوب می‌گردد.

    زبان‌برنامه‌نویسی Java
    جاوا  یک زبان برنامه‌نویسیِ شیءگرا است. نخستین بار توسط جیمز گاسلینگ در شرکت سان مایکروسیستمز ایجاد گردید. در سال ۱۹۹۱ به عنوان بخشی از سکوی جاوا منتشر شد. زبان جاوا شبیه به ++C است اما مدل شیءگرایی آسان‌تری دارد و از قابلیت‌های سطح پایین کمتری پشتیبانی می‌کند. ایده شیء گرایی جاوا از زبان اسمال‌تاک گرفته شده‌است. یکی از قابلیت‌های بنیادین جاوا این است که مدیریت حافظه را بطور خودکار انجام می‌دهد. ضریب اطمینان عملکرد برنامه‌های نوشته‌شده به این زبان نسبت به زبان‌های نسل اول C بالا است. برنامه‌های جاوا به صورت بایت کد (کامپایل) می‌شوند و توسط JVM (ماشین مجازی جاوا) به کدهای ماشین تبدیل و اجرا می‌شوند. در صورت وجود JVM مانند سایر زبان‌های مبتنی بر آن که وابسته به سیستم‌عامل خاصی نیستند برنامه‌های نوشته شده به جاوا بر روی هر نوع سیستم عامل و هرگونه وسیلهٔ الکترونیکی قابل اجرا می‌باشند. شعار جاوا «یکبار بنویس و هر جایی اجرا کن» (Write once, Run anywhere) است که به همین ویژگی اشاره دارد.

    در سال ۱۹۹۰ سان میکروسیستم در حال توسعه نرم‌افزاری برای استفاده ابزارهای الکترونیکی بود که مسئولیت تیم که آن را تیم پروژه گرین نامیدند جیمز کاسلینگ بر عهده گرفت. در سال ۱۹۹۱ تیم تصمیم گرفت که زبان جدید را OAK بنامند. در سال ۱۹۹۲ تیم پروژه گرین زبان جدیدی را معرفی کرد که با ابزارهای مختلف خانگی و لمسی کار می‌کرد. در سال ۱۹۹۳ وب جهانی توسعه یافت و زبان جدید با معرفی اپلت که قابلیت‌های زیادی به کامپیوترهای متصل به وب می‌افزود مشهور شد. در سال ۱۹۹۵ زبان OAK به JAVA تغیر نام پیدا کرد و توسط مایکروسافت و نت اسکیپ پشتیبانی شد. در سال ۱۹۹۶ دیگر java زبانی به صورت همه گیر چند منظوره شناخته شده بود. در سال ۲۰۰۷ زبان‌هایی با استاندارد JVM مانند groovy ایجاد شد و در سال ۲۰۱۴ جاوا سعی کرد با معرفی نسخه ۸ برخی از قابلیتهای زبان‌های دیگر را به جاوا اضافه نماید.

    نسخه‌ها

    از سال ۲۰۱۷، هر دو جاوا ۸ و ۹ به‌طور رسمی پشتیبانی می‌شوند. نسخه‌های عمده نسخه جاوا همراه با تاریخ انتشار آنها:

    • JDK 1.0، انتشار در ۲۱ ژانویهٔ ۱۹۹۶
    • JDK 1.1، انتشار در ۱۹ فوریهٔ ۱۹۹۷
    • J2SE 1.2، انتشار در ۸ دسامبر ۱۹۹۸
    • J2SE 1.3، انتشار در ۸ می ۲۰۰۰
    • J2SE 1.4، انتشار در ۶ فوریهٔ ۲۰۰۲
    • J2SE 5.0، انتشار در ۳۰ سپتامبر ۲۰۰۴
    • Java SE 6، انتشار در ۱۱ دسامبر ۲۰۰۶
    • Java SE 7، انتشار در ۲۱۲۸ ژوئیه ۲۰۱۱
    • Java SE 8، انتشار در ۱۸ مارس ۲۰۱۴
    • Java SE 9، انتشار در ۲۱ سپتامبر ۲۰۱۷

    برنامه‌های جاوا و اپلت‌ها

    جاوا برای نوشتن انواع برنامه‌های کاربردی مناسب است. با جاوا می‌توان انواع برنامه‌های زیر را نوشت:

    • برنامه‌های تحت وب
    • برنامه‌نویسی سیستم‌های کوچک مانند تلفن همراه، رایانه جیبی و …
    • برنامه‌های کاربردی بزرگ (Enterprise)
    • برنامه‌های رومیزی (Desktop)
    • و…

    قابلیت خاصی در جاوا وجود دارد به نام اپلت. اپلت‌ها امکانات فراوانی برای نوشتن برنامه‌های تحت وب در اختیار برنامه‌نویسان قرار می‌دهند. البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است. اپلت‌ها نظیر فناوری سیلورلایت شرکت مایکروسافت هستند که برنامه‌نویسان را قادر می‌سازد تا امکاناتی را به مرورگر کاربر بیفزایند. البته تفاوت این دو در امنیت می‌باشد به گونه‌ای که سیلورلایت به دلیل اینکه در محیطی به نام جعبه شنی (sandbox) اجرا می‌شوند امن هستند ولی اپلتها فاقد چنین امنیتی هستند و به سادگی هدف حملات استاندارد Social Engineering Toolkit واقع می‌شوند.

    1. سیستم‌عامل: تا سال ۲۰۰۴ net. تنها بر روی پلت فرم ویندوز اجرا می‌شد و برخی ویندوز را سیستم‌عامل غیرقابل اعتمادی در برنامه‌نویسی Enterprise می‌دانستند. ولی جاوا از این نظر انتخاب خوبی محسوب می‌شد.
    2. قابلیت حمل: جاوا بر روی سکوهای رایانش گوناگونی قابل اجرا است، از ATM و ماشین رختشویی گرفته تا سرورهای سولاریس با قابلیت پشتیبانی از ۱۰۲۴ پردازنده (CPU) برای پردازش.

    خط مشی جاوا

    یکی از ویژگی‌های جاوا قابل حمل بودن آن است. یعنی برنامهٔ نوشته شده به زبان جاوا باید به‌طور مشابهی در کامپیوترهای مختلف با سخت‌افزارهای متفاوت اجرا شود؛ و باید این توانایی را داشته باشد که برنامه یک بار نوشته و کامپایل شده و سپس در همه کامپیوترها اجرا گردد. به این صورت که کد کامپایل شدهٔ جاوا ذخیره می‌شود، اما نه به‌صورت کد ماشین بلکه به‌صورت بایت‌کد جاوا. دستورالعمل‌ها شبیه کد ماشین هستند، اما با ماشین‌های مجازی که به‌طور خاص برای سخت‌افزارهای مختلف نوشته شده‌اند، اجرا می‌شوند. در نهایت کاربر از سکوی جاوا نصب شده روی ماشین خود یا مرورگر وب استفاده می‌کند. کتابخانه‌های استاندارد یک راه عمومی برای دسترسی به ویژگی‌های خاص فراهم می‌کنند. مانند گرافیک، نخ‌کشی و شبکه. در بعضی از نسخه‌های ماشین مجازی جاوا، بایت‌کدها می‌توانند قبل و در زمان اجرای برنامه به کدهای محلی کامپایل شوند. فایدهٔ اصلی استفاده از بایت‌کد، قسمت کردن است. اما ترجمهٔ کلی یعنی برنامه‌های ترجمه شده تقریباً همیشه کندتر از برنامه‌های کامپایل شدهٔ محلی اجرا می‌شوند. این شکاف می‌تواند با چند تکنیک خوش‌بینانه که در کاربردهای JVM قبلی معرفی شد، کم شود. یکی از این تکنیک‌ها JIT است که بایت‌کد جاوا را به کد محلی ترجمه کرده و سپس آن را پنهان می‌کند. در نتیجه برنامه خیلی سریع‌تر نسبت به کدهای ترجمه شدهٔ خالص شروع و اجرا می‌شود. بیشتر JVMهای پیشرفته، به‌صورت کامپایل مجدد پویا، در آنالیز JVM، رفتار برنامهٔ اجرا شده و کامپایل مجدد انتخاب شده و بهینه‌سازی قسمت‌های برنامه، استفاده می‌شوند. کامپایل مجدد پویا می‌تواند کامپایل ایستا را بهینه‌سازی کند. زیرا می‌تواند قسمت hot spot برنامه و گاهی حلقه‌های داخلی که ممکن است زمان اجرای برنامه را افزایش دهند را تشخیص دهد. کامپایل JIT و کامپایل مجدد پویا به برنامه‌های جاوا اجازه می‌دهد که سرعت اجرای کدهای محلی بدون از دست دادن قابلیت انتقال افزایش پیدا کند.

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

    کارایی جاوا نسبت به نسخه‌های اولیه بیشتر شد. در تعدادی از تست‌ها نشان داده شد که کارایی کامپایلرJIT کاملاً مشابه کامپایلر محلی شد. عملکرد کامپایلرها لزوماً کارایی کدهای کامپایل شده را نشان نمی‌دهند. یکی از پیشرفت‌های بی‌نظیر در در زمان اجرای ماشین این بود که خطاها ماشین را دچار اشکال نمی‌کردند. علاوه بر این در زمان اجرای ماشینی مانند جاوا وسایلی وجود دارد که به زمان اجرای ماشین متصل شده و هر زمانی که یک استثناء رخ می‌دهد، اطلاعات اشکال زدایی که در حافظه وجود دارد، ثبت می‌کنند.

    جاوا امروزه به عنوان یک زبان پر کاربرد به خصوص در برنامه‌های کاربردی تجاری مطرح است و بسیاری از سازمان‌ها و شرکت‌های از این زبان و تکنولوژی‌های مربوط به آن استفاده می‌کنند. ابزارهای زیادی برای تست برنامه‌های نوشته شده توسط جاوا مورد استفاده قرار می‌گیرند. برای مثال: در جاوا به دلیل مدیریت حافظه توسط Garbage collection ممکن است به دلیل نوشتن غیر استاندارد برنامه در حافظه نشتی داشته باشیم (memory leakage)که این امر سبب می‌شود حافظه گرفته شده آزاد نشود و با پر شدن حافظه برنامه دچار خلل شود. برای حل این مشکل و سایر مشکلات نیاز به تست نرم‌افزارهای نوشته شده در جاوا هستیم. با بزرگ شدن حجم نرم‌افزار تست آن نیز سخت‌تر می‌شود. بهتر از قبل از نوشتن برنامه‌های تجاری بزرگ به تست و نحوه تضمین کیفیت آن هم فکر شود.

    شباهت اسمی جاوا و جاوااسکریپت

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

    تغییرات مهم جاوا در نسخه ۸

    جاوا در نسخه ۸ تغییرات بسیار مهم و گسترده‌ای داشته‌است. مفاهیمی مانند واسط‌های تابعی، عبارت‌های لامبدا، جویبار (Stream) و امکانات گسترده کتابخانه‌ای در این نسخه معرفی شده‌اند. در این نسخه، رویکرد برنامه‌نویسی تابعی، علاوه بر رویکرد شیءگرایی، ممکن شده‌است.

    جاوا نسخه ۹ و ماژولار شدن جاوا (پروژه Jigsaw)

    در نسخهٔ جاوا ۹ که در تاریخ ۲۱ سپتامبر ۲۰۱۷، به صورت عمومی عرضه شد، پروژه‌ای به نام Jigsaw به آن اضافه شد که قابلیت برنامه‌نویسی در قالب ماژول را در جاوا امکان‌پذیر کرد

    داشتن یک پلتفرم ماژولار و ماژولار شدن JDK به توسعه‌دهندگان آن کمک می‌کند چنین پلتفرم قدیمی، گنده و بزرگی را مدیریت کنند و به جلو حرکت دهند. آن‌طور که معماران آن می‌گویند، الان تنها فرصتی بود که به سمت ماژولار کردن JDK پیش بروند وگرنه در آینده هرگز چنین اتفاقی ممکن نمی‌شد. ماژولاریتی علاوه بر کمک کردن به توسعه‌دهندگان JDK برای حرکت آن رو به جلو، فرصتی استثنایی‌تر را برای ما ایجاد می‌کند. تصور کنید که یک ماشین حساب ساده تحت کنسول نوشته‌اید، نه از امکانات JavaEE استفاده می‌کنید، نه کاری به CORBA دارید، نه JPA. احتمالاً تنها چیزی که نیاز دارید موارد پایه‌ای است. اما برای اجرا و توزیع برنامه‌تان نیاز به یک JRE کامل و حجیم دارید که احتمالاً راه انداختنش هم چندان ارزان نیست. اما با ماژولار شدن جاوا شما می‌توانید فقط ماژول‌هایی که استفاده کرده‌اید را در قالب یک Runtime Image داشته باشید که دیگر چیزهای اضافی‌ای که از آن‌ها استفاده نکرده‌اید را ندارد. با این قابلیت، حجم برنامه‌ها کم شده و شما می‌توانید از دستگاه‌های Embedded که حافظه محدودتری دارند هم استفاده کنید.

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

    جاوا ۱۰ و Local Variable Type inference

    این نسخه که در نسخه ۲۰ مارس ۲۰۱۸ عرضه گردید، یک نسخه کوتاه مدت بوده و بیشتر شامل مجموعه‌ای از بهینه‌سازی‌ها می‌باشد. در این میان قابلیت جالبی به نام Local Variable Type Interface دیده می‌شود. اگر با زبان پایتون کد زده باشید این قابلیت شبیه به تعریف متغیر در این زبان است. به‌طور خلاصه باید گفت با استفاده از این قابلیت دیگر نیاز به تعیین دقیق نوع متغیرهای محلی نداریم. این کامپایلر است که نوع متغیر را با توجه به مقداردهی تشخیص می‌دهد. تا به الان اگر می‌خواستیم لیستی از رشته‌ها بسازیم، کد مشابه پایین را می‌زدیم:

     List<String> list =  new ArrayList<>() ;
    

    حال اگر بخواهیم از این قابلیت جدید استفاده کنیم کافیست به جای List (در اینجا نوع متغیر است) var را جایگزین کنیم. پس کد بالا به صورت زیر تغییر خواهد کرد:

     var list =  new ArrayList<String>() ;
    

    var نه کلمهٔ کلیدی جدیدی است و نه هیچ بایت کد جدیدی برای آن تعریف شده‌است. براساس مقداری که به متغیر می‌دهیم تفسیر می‌شود