یک زبان برنامهنویسی شیءگرا From Wikipedia, the free encyclopedia
جاوا (به انگلیسی: Java) یک زبان برنامهنویسیِ شیءگرا است که نخستین بار توسط جیمز گاسلینگ در شرکت سانمایکروسیستمز ایجاد گردید و در سال ۱۹۹۱ به عنوان بخشی از سکوی جاوا منتشر شد.
پارادایم برنامهنویسی | چندالگویی: همگانی، شیءگرا (مبتنی بر شیء)، دستوری، پژواکی |
---|---|
طراحی شده توسط | جیمز گاسلینگ سان مایکروسیستمز |
توسعهدهنده | شرکت اوراکل |
ظهوریافته در | ۲۳ مه ۱۹۹۵[1] |
ایستا، نیرومند، ایمن، نامی، آشکار | |
زبان پیادهسازی | C و C++ |
سیستمعامل | چندسکویی (multi-platform) |
پروانه | پروانه عمومی همگانی گنو، فرایند انجمن جاوا |
.java , .class, .jar | |
وبگاه | |
پیادهسازیهای بزرگ | |
اوپنجیدیکی، GNU Compiler for Java(gcj), many others | |
گویش | |
Generic Java، Pizza | |
متأثر از | |
Ada 83, سی++, C#,[2] Eiffel,[3] Generic Java, Mesa,[4] ماجولا ۳,[5] Oberon,[6] آبجکتیو-سی،[7] UCSD Pascal,[8][9] اسمالتاک | |
تأثیر گذاشته بر | |
ایدا ۲۰۰۵، BeanShell، C#، کلوژر، دی، ECMAScript، گرووی، J#، جاوااسکریپت، Kotlin، پیاچپی، پایتون، اسکالا، Seed7، والا | |
زبان جاوا شبیه به سیپلاسپلاس است؛ اما مدل شیءگرایی آسانتری دارد و از قابلیتهای سطح پایین کمتری پشتیبانی میکند. ایدهٔ شیءگرایی جاوا از زبان اسمالتاک گرفته شدهاست. یکی از قابلیتهای بنیادین جاوا این است که مدیریت حافظه را بهطور خودکار انجام میدهد. ضریب اطمینان عملکرد برنامههای نوشتهشده به این زبان نسبت به زبانهای نسل اول C بالاتر است. برنامههای جاوا بهصورت بایت کد میشوند و توسط ماشین مجازی جاوا (JVM) به کدهای ماشین تبدیل و اجرا میشوند. در صورت وجود JVM مانند سایر زبانهای مبتنی بر آن که وابسته به سیستمعامل خاصی نیستند، برنامههای نوشته شده به جاوا بر روی هر نوع سیستمعامل و هرگونه وسیلهٔ الکترونیکی قابل اجرا میباشند. شعار جاوا «یکبار بنویس و همهجا اجرا کن» (Write once, Run anywhere) است که به همین ویژگی اشاره دارد.[10] این ویژگیِ جاوا را مستقل از سکو مینامند.[11][12][13][14]
در سال ۱۹۹۰ سانمایکروسیستمز در حال توسعه نرمافزاری برای استفاده ابزارهای الکترونیکی بود که مسئولیت تیم که آن را پروژه green نامیدند، جیمز گاسلینگ بر عهده گرفت. در سال ۱۹۹۱ تیم تصمیم گرفت که زبان جدید را OAK بنامند. در سال ۱۹۹۲ تیم پروژه green زبان جدیدی را معرفی کرد که با ابزارهای مختلف خانگی و لمسی کار میکرد. در سال ۱۹۹۳ وب جهانی توسعه یافت و زبان جدید با معرفی اپلت که قابلیتهای زیادی به کامپیوترهای متصل به وب میافزود مشهور شد. در سال ۱۹۹۵ زبان OAK به JAVA تغییر نام پیدا کرد و توسط مایکروسافت و نت اسکیپ پشتیبانی شد. در سال ۱۹۹۶ دیگر java زبانی بهصورت همهگیر چند منظوره شناخته شده بود. در سال ۲۰۰۷ زبانهایی با استاندارد JVM مانند groovy ایجاد شد و در سال ۲۰۱۴ جاوا سعی کرد با معرفی نسخه ۸ برخی از قابلیتهای زبانهای دیگر را به جاوا اضافه نماید.[15]
این زبان قسمتهای بسیاری از گرامر خود را از C و ++C گرفته اما دارای مدل شیگرایی سادهای است و امکانات سطح پایین کمی دارد. کاربرد جاوا در کامپایل بهصورت بایت کد است که صرف نظر از معماری و خصوصیات آن کامپیوتر، قابلیت اجرا روی تمامی ماشینهای شبیهسازی جاوا را دارد. اجزای اصلی کامپایلرهای جاوا، ماشینهای پیادهسازی و کتابخانههای آن توسط شرکت مذکور از سال ۱۹۹۵ منتشر شد. در مه ۱۹۹۷ این شرکت، نرمافزار رایگان این زبان را فراهم کرد. دیگران هم کاربردهای دیگری از این زبان مثل کامپایلر GNU برای جاوا یا OPENJDK را منتشر کردند.[16][17]
با پیدایش java 2، نسخهٔ جدید توانست ترکیبهای جدیدی را برای نوعهای مختلف سکوهای مختلف ایجاد کند. به عنوان مثال J2EE، با هدف کاربرد برای تشکیلات سازمانی، و نسخهٔ سکوی جاوا، نسخه میکرو برای تلفن همراه منتشر شد. در سال ۱۹۹۶ با هدف بازاریابی، این شرکت نسخهٔ جدید J2 را با نامهای سکوی جاوا، نسخه سازمانی، سکوی جاوا، نسخه میکرو و سکوی جاوا، نسخه استاندارد منتشر کرد. در سال ۱۹۹۷ شرکت سانمایکروسیستمز، ISO/IEC JTC1 standards body و Ecma International را به فرمول جاوا تغییر داد. شرکت Sun بسیاری از کاربردهای جاوا را بدون هیچ هزینهای فراهم آورد. شرکت Sun با فروش مجوز برای بعضی از کاربردهای خاصش مثل Java Enterprise System درآمدی را بهدستآورد. در ۱۳ نوامبر ۱۹۹۶ شرکت Sun نرمافزار جاوا را بهصورت رایگان و با مجوز عمومی برای همه منتشر کرد.[18][19][20]
در ایجاد زبان جاوا پنج هدف اصلی وجود داشت:
جاوای ۸، ۱۱ و ۱۷ به عنوان نسخههای دارای پشتیبانی بلندمدت میباشند.[24] نسخههای بزرگ منتشرشده، به همراه تاریخ انتشار آنها:
ماشین مجازی جاوا (JVM) برنامهای است که بایتکدهای زبان جاوا را مطابق با سیستمعاملی خاص کامپایل کرده و آنها را برای اجرا در سطح سیستمعامل آماده میکند، در حقیقت شعار اصلی زبان جاوا (یکبار بنویس و همهجا اجرا کن) با استفاده از این ماشین مجازی امکانپذیر شدهاست.[27]
مزایا و معایب: ماشین مجازی جاوا علاوه بر قابلیتهای بسیاری که در اختیار برنامهنویسان قرار میدهد، محدودیتهایی را هم ایجاد میکند که البته این محدودیتها به نوعی راهگشا هستند؛ چرا که منجر به ارتقاء امنیت نرمافزارهای نوشتهشده با جاوا میشوند؛ به عبارت دیگر، با بهکارگیری جِیویاِم دولوپرها به هیچ وجه نمیتوانند بخشی از حافظهٔ اختصاصیافته به دیگر قسمتهای برنامه را به زور تصاحب کنند تا بدین طریق بتوانند مثلاً آبجکتی جدید ساخته و فضای حافظه را به آن اختصاص دهند.[28][29][30]
یکی از مزایای کامپایل سورسکد و تبدیل آن به بایتکد این است که بدین طریق میتوان از دیگر زبانهای برنامهنویسی نیز در توسعهٔ اپلیکیشنهای نوشتهشده به زبان جاوا استفاده کرد؛ به عبارت دیگر، چنانچه یک زبان برنامهنویسی قابلیتی داشته باشد که بتوان در ابتدا سورسکد مد نظر را کامپایل کرده و آن را به بایتکدی قابلفهم برای جاوا تبدیل کرد، در چنین شرایطی ماشین مجازی جاوا امکان اجرای آن بخش از کد که به زبان دیگری نوشته شدهاست را در کنار کدهای جاوا دارا است.
جاوا برای نوشتن انواع برنامههای کاربردی مناسب است. با جاوا میتوان انواع برنامههای زیر را نوشت:
قابلیت خاصی در جاوا وجود دارد به نام اپلت. اپلتها امکانات فراوانی برای نوشتن برنامههای تحت وب در اختیار برنامهنویسان قرار میدهند. البته وجود ماشین مجازی جاوا برای اجرای اپلت لازم است. اپلتها نظیر فناوری سیلورلایت شرکت مایکروسافت هستند که برنامهنویسان را قادر میسازد تا امکاناتی را به مرورگر کاربر بیفزایند. البته تفاوت این دو در امنیت میباشد به گونهای که سیلورلایت به دلیل اینکه در محیطی به نام جعبه شنی (sandbox) اجرا میشوند امن هستند ولی اپلتها فاقد چنین امنیتی هستند و به سادگی هدف حملات استاندارد Social Engineering Toolkit واقع میشوند.[31]
یکی از ویژگیهای جاوا قابل حمل بودن آن است؛ یعنی برنامهٔ نوشته شده به زبان جاوا باید بهطور مشابهی در کامپیوترهای مختلف با سختافزارهای متفاوت اجرا شود؛ و باید این توانایی را داشته باشد که برنامه یک بار نوشته و کامپایل شده و سپس در همه کامپیوترها اجرا گردد. به این صورت که کد کامپایل شدهٔ جاوا ذخیره میشود، اما نه بهصورت کد ماشین بلکه بهصورت بایتکد جاوا. دستورالعملها شبیه کد ماشین هستند، اما با ماشینهای مجازی که بهطور خاص برای سختافزارهای مختلف نوشته شدهاند، اجرا میشوند. در نهایت کاربر از سکوی جاوا نصب شده روی ماشین خود یا مرورگر وب استفاده میکند. کتابخانههای استاندارد یک راه عمومی برای دسترسی به ویژگیهای خاص فراهم میکنند. مانند گرافیک، نخکشی و شبکه. در بعضی از نسخههای ماشین مجازی جاوا، بایتکدها میتوانند قبل و در زمان اجرای برنامه به کدهای محلی کامپایل شوند. فایدهٔ اصلی استفاده از بایتکد، قسمت کردن است. اما ترجمهٔ کلی یعنی برنامههای ترجمه شده (برنامههای نوشته شده به زبانهای Interpreter ای مثل جاوا) تقریباً همیشه کندتر از برنامههای کامپایل شدهٔ محلی اجرا میشوند. این شکاف میتواند با چند تکنیک خوشبینانه که در کاربردهای JVM قبلی معرفی شد، کم شود. یکی از این تکنیکها JIT است که بایتکد جاوا را به کد محلی ترجمه کرده و سپس آن را پنهان میکند. در نتیجه برنامه خیلی سریعتر نسبت به کدهای ترجمه شدهٔ خالص شروع و اجرا میشود. بیشتر JVMهای پیشرفته، بهصورت کامپایل مجدد پویا، در آنالیز JVM، رفتار برنامهٔ اجرا شده و کامپایل مجدد انتخاب شده و بهینهسازی قسمتهای برنامه، استفاده میشوند. کامپایل مجدد پویا میتواند کامپایل ایستا را بهینهسازی کند؛ زیرا میتواند قسمت hot spot برنامه و گاهی حلقههای داخلی که ممکن است زمان اجرای برنامه را افزایش دهند را تشخیص دهد. کامپایل JIT و کامپایل مجدد پویا به برنامههای جاوا اجازه میدهد که سرعت اجرای کدهای محلی بدون از دست دادن قابلیت انتقال افزایش پیدا کند.
تکنیک بعدی به عنوان کامپایل ایستا شناخته شدهاست؛ که کامپایل مستقیم به کدهای محلی است مانند بسیاری از کامپایلرهای قدیمی. کامپایلر ایستای جاوا، بایتکدها را به کدهای شیء محلی ترجمه میکند.
کارایی جاوا نسبت به نسخههای اولیه بیشتر شد. در تعدادی از تستها نشان داده شد که کارایی کامپایلر JIT کاملاً مشابه کامپایلر محلی شد. عملکرد کامپایلرها لزوماً کارایی کدهای کامپایل شده را نشان نمیدهند. یکی از پیشرفتهای بینظیر در در زمان اجرای ماشین این بود که خطاها ماشین را دچار اشکال نمیکردند. علاوه بر این در زمان اجرای ماشینی مانند جاوا وسایلی وجود دارد که به زمان اجرای ماشین متصل شده و هر زمانی که یک استثناء رخ میدهد، اطلاعات اشکال زدایی که در حافظه وجود دارد، ثبت میکنند.
شرکت سانمایکروسیستمز مجوز رسمی برای پلتفرم استاندارد جاوا را به مایکروسافت ویندوز، لینوکس و سولاریس دادهاست. همچنین محیطهای دیگری برای دیگر پلتفرمها فراهم آوردهاست. علامت تجاری مجوز شرکت سانمیکروسیستمز طوری بود که با همهٔ پیادهسازیها سازگار باشد. به علت اختلاف قانونی که با مایکروسافت پیدا کرد، زمانی که شرکت سان ادعا کرد که پیادهسازی مایکروسافت از RMI یا JNI پشتیبانی نکرده و ویژگیهای خاصی را برای خودش اضافه کردهاست. شرکت سان در سال ۱۹۹۷ پیگیری قانونی کرد و در سال ۲۰۰۱ در توافقی ۲۰ میلیون دلاری برنده شد. در نتیجه کمی بعد مایکروسافت جاوا را به ویندوز فرستاد. در نسخهٔ اخیر ویندوز، مرورگر اینترنت نمیتواند از جاوا پلت فرم پشتیبانی کند. شرکت سان و دیگران یک سیستم اجرای جاوای رایگان برای آنها و نسخههای دیگر ویندوز فراهم آوردند.[33]
شرکت اوراکل پس از خریداری Sun Microsystems در ۲۷ ژانویه ۲۰۱۰، مالک فعلی اجرای رسمی پلتفرم جاوا SE است. این پیادهسازی براساس اجرای اصلی جاوا توسط Sun است. پیادهسازی Oracle برای Microsoft Windows (هنوز برای XP کار میکند، در حالی که فقط نسخههای بعدی در حال حاضر بهطور رسمی پشتیبانی میشوند)، macOS ,Linux و Solaris در دسترس است. از آنجا که جاوا فاقد هرگونه استانداردسازی رسمی است که توسط Ecma International ,ISO / IEC ,ANSI یا سایر سازمانهای استاندارد شخص ثالث شناخته شده باشد، اجرای اوراکل استاندارد واقعی است.
پیادهسازی Oracle به دو توزیع مختلف بستهبندی شدهاست: Java Runtime Environment (JRE) که شامل قسمتهایی از سیستمعامل Java SE برای اجرای برنامههای جاوا است و برای کاربران نهایی در نظر گرفته شدهاست و کیت توسعهٔ جاوا (JDK) که در نظر گرفته شدهاست. برای توسعهدهندگان نرمافزار و شامل ابزارهای توسعه مانند کامپایلر جاوا، Javadoc ,Jar و رفع اشکال است. Oracle همچنین GraalVM، یک کامپایلر و مفسر پویای جاوا با کارایی بالا را منتشر کردهاست.[34]
OpenJDK یکی دیگر از برنامههای قابل توجه جاوا SE است که تحت GNU GPL مجوز دارد. زمانی که Sun شروع به انتشار کد منبع جاوا تحت GPL کرد، شروع به کار کرد. از Java SE 7 ،OpenJDK اجرای رسمی مرجع جاوا است.
هدف جاوا سازگاری کلیهٔ پیادهسازیهای جاوا است. از نظر تاریخی، مجوز مارک تجاری Sun برای استفاده از مارک جاوا اصرار دارد که همهٔ پیادهسازیها سازگار باشد. پس از آنکه Sun ادعا کرد که اجرای مایکروسافت از RMI یا JNI پشتیبانی نمیکند و ویژگیهای مختص پلتفرم را به خود اختصاص دادهاست، این منجر به اختلاف حقوقی با مایکروسافت شد. Sun در سال ۱۹۹۷ شکایت کرد و در سال ۲۰۰۱، به مبلغ ۲۰ میلیون دلار و همچنین حکم دادگاه برای اجرای شرایط مجوز از Sun پیروز شد.[35] در نتیجه، مایکروسافت دیگر جاوا را با ویندوز ارسال نمیکند.
جاوا مستقل از بسترهای نرمافزاری برای Java EE ضروری است و برای تأیید یک پیادهسازی اعتبار سنجی دقیقتری نیز لازم است. این محیط برنامههای قابل حمل در سمت سرور را فعال میکند.
جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شیء استفاده میکند. برنامهنویس زمانی که اشیاء به وجود میآیند، این حافظه را تعیین میکند؛ و در زمان اجرا نیز، زمانی که این اشیاء در استفادهٔ زیاد طولانی نباشند، برنامهنویس مسئول بازگرداندن این حافظهاست. زمانی که مرجعی برای شیهای باقیمانده نیست، شیهای غیرقابل دسترس برای آزاد شدن به صورت خودکار توسط بازیافت حافظه، انتخاب میشوند. اگر برنامهنویس مقداری از حافظه را برای شیهایی که زیاد طولانی نیستند، نگه دارد، چیزهایی شبیه سوراخ حافظه اتفاق میافتند.[36][37]
یکی از عقایدی که پشت سر مدل ادارهٔ حافظهٔ خودکار جاوا وجود دارد، این است که برنامهنویس هزینهٔ اجرای ادارهٔ دستی حافظه را نادیده میگیرد. در بعضی از زبانها حافظه لازم برای ایجاد یک شیء، به صورت ضمنی و بدون شرط، به پشته تخصیص داده میشود؛ یا بهطور صریح اختصاص داده شده و از heap بازگردانده میشود. در هر کدام از این راهها، مسئولیت ادارهٔ اقامت حافظه با برنامهنویس است. اگر برنامه شیء را برنگرداند، سوراخ حافظه اتفاق میافتد. اگر برنامه تلاش کند به حافظهای را که هماکنون بازگردانده شده، دستیابی پیدا کند یا برگرداند، نتیجه تعریف شده نیست و ممکن است برنامه بیثبات شده یا تخریب شود. این ممکن است با استفاده از اشارهگر مدتی باقی بماند، اما سرباری و پیچیدگی برنامه زیاد میشود. بازیافت حافظه اجازه دارد در هر زمانی اتفاق بیفتد. بهطوریکه این زمانی اتفاق میافتد که برنامه بیکار باشد. اگر حافظهٔ خالی کافی برای تخصیص شیء جدید در هیپ وجود نداشته باشد، ممکن است برنامه برای چند دقیقه متوقف شود. در جایی که زمان پاسخ یا اجرا مهم باشد، ادارهٔ حافظه و منابع اشیاء استفاده میشوند.
جاوا از نوع اشارهگر ریاضی C و ++C پشتیبانی نمیکند. در جایی که آدرس اشیاء و اعداد صحیح میتوانند به جای هم استفاده شوند. همانند ++C و بعضی زبانهای شیگرای دیگر، متغیرهای نوعهای اولیهٔ جاوا شیگرا نبودند. مقدار نوعهای اولیه، مستقیماً در فیلدها ذخیره میشوند. در فیلدها (برای اشیاء) و در پشته (برای توابع)، بیشتر از هیپ استفاده میشود. این یک تصمیم هوشیارانه توسط طراح جاوا برای اجرا است. به همین دلیل جاوا یک زبان شیگرای خالص به حساب میآید.
گرامر جاوا محدودتر از ++C است و برخلاف ++C که ترکیبی است از ساختارها و شیگرایی، زبان جاوا یک زبان شیگرای خالص میباشد. فقط نوع دادهٔ اصلی از این قاعده مستثنیٰ است. جاوا بسیاری از ویژگیها را پشتیبانی میکند و از کلاسها برای سادهتر کردن برنامهنویسی و کاهش خطا استفاده میکند.
در زیر نمونهای از برنامهای که در جاوا نوشته شدهاست آورده شدهاست. البته برای کامپایل کردن این برنامه بایستی JDK (کیت توسعهٔ جاوا) بر روی سیستم مورد نظر نصب شده باشد.
public class Test{
public static void main(String[] args) {
// java code
}
}
برنامههای جاوا بعد از کدنویسی باید توسط کیت توسعهٔ جاوا کامپایل شوند، این فرایند با خروجی فایلی با پسوند class. پایان میابد که بتواند با موتور مجازی جاوا، اجرا شود.
در کد پایین کامپایل فایل، و خروجی class. را انجام میدهیم.
$ javac Test.java
سپس یک فایل خروجی به نام Test.class دریافت میشود. بعد با استفاده از دستور زیر برنامه توسط موتور مجازی جاوا قابل اجرا است:
$ java Test
نکته: در هنگام اجرای برنامههای کامپایل شده جاوا (Filename.class) باید پسوند فایل آن را برداریم، مانند کد بالا.
برنامه «سلام، دنیا!» به این صورت در زبان جاوا میتواند نوشته شود:
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
بر طبق قرارداد فایلها باید هم نام کلاسهای عمومی نامگذاری شوند. سپس باید پسوند java را به این صورت به نام فایل اضافه کرد: "HelloWorld.java". این فایل اول باید با استفاده از کامپایلر جاوا به بایت کد کامپایل شود. در نتیجه فایل HelloWorld.class ایجاد میشود. این فایل قابل اجرا است. فایل جاوا ممکن است فقط یک کلاس عمومی داشته باشد. اما میتواند شامل چندین کلاس با دستیابی عمومی کمتر باشد.
کلاسی که بهصورت خصوصی تعریف میشود ممکن است در فایل java. ذخیره شود. کامپایلر برای هر کلاسی که در فایل اصلی تعریف میشود یک کلاس فایل تولید میکند؛ که نام این کلاس فایل همنام کلاس است با پسوند class.
کلمهٔ کلیدی public (عمومی) برای قسمتهایی که میتوانند از کدهای کلاسهای دیگر صدا زده شوند، به کار برده میشود. کلمهٔ کلیدی static (ایستا) در جلوی یک تابع، یک تابع ایستا را که فقط وابسته به کلاس است و نه قابل استفاده برای نمونههایی از کلاس، نشان میدهد. فقط تابعهای ایستا میتوانند توسط اشیاء بدون مرجع صدا زده شوند. دادههای ایستا به متغیرهایی که ایستا نیستند، نمیتوانند دسترسی داشته باشند.
کلمهٔ کلیدی void (تهی) نشان میدهد که تابع main هیچ مقداری را برنمیگرداند. اگر برنامهٔ جاوا بخواهد با خطا از برنامه خارج شود، باید ()System.exit صدا زده شود. کلمهٔ main یک کلمهٔ کلیدی در زبان جاوا نیست. این نام واقعی تابعی است که جاوا برای فرستادن کنترل به برنامه، صدا میزند. برنامهٔ جاوا ممکن است شامل چندین کلاس باشد که هر کدام دارای تابع main هستند.
تابع main باید آرایهای از اشیاء رشتهای را بپذیرد. تابع main میتواند از آرگومانهای متغیر به شکل public static void main(String… args) استفاده کند که به تابع main اجازه میدهد اعدادی دلخواه از اشیاء رشتهای را فراخوانی کند. پارامتر String[] args آرایهای از اشیاء رشتهای است که شامل تمام آرگومانهایی که به کلاس فرستاده میشود، است.
چاپ کردن، قسمتی از کتابخانهٔ استاندارد جاوا است. کلاس سیستم یک فیلد استاتیک عمومی به نام out تعریف کردهاست. شیء out یک نمونه از کلاس PrintStream است و شامل تعداد زیادی تابع برای چاپ کردن اطلاعات در خروجی استاندارد است. همچنین شامل println(string) برای اضافه کردن یک خط جدید برای رشتهٔ فرستاده شده اضافه میکند.
یک مثال دیگر به شرح زیر است:
public class Student{
private int code;
private String name;
public Student(int code, String name){
this.code = code;
this.name = name;
}
public int getCode(){
return this.code;
}
public String getName(){
return this.name;
}
public void setCode(int code){
this.code = code;
}
public void setName(String name){
this.name = name;
}
}
کامنت های جاوا به شرح زیر است:
//Single Line Comment
/*
Multi
Line
Comment
*/
/*
* Documentiation
* Comment (Java Docs)
*/
منظور از توزیع جاوا پیادهسازیهای مختلفی است که برای کامپایلر جاوا و همچنین مجموعه کتابخانههای استاندارد زبان جاوا (JDK) وجود دارد. در حال حاضر چهار توزیعکنندهٔ عمدهٔ جاوا وجود دارند:
اپلت جاواها برنامههایی هستند که برای کاربردهایی نظیر نمایش در صفحات وب، ایجاد شدهاند. واژهٔ import باعث میشود کامپایلر جاوا کلاسهای javaapplet.Applet وjava.awt.Graphics را به کامپایل برنامه اضافه کند. کلاس Hello کلاس Applet را توسعه میدهد. کلاس اپلت چارچوبی برای کاربردهای گروهی برای نمایش و کنترل چرخهٔ زندگی اپلت، درست میکند. کلاس اپلت یک تابع پنجرهای مجرد است که برنامههای کوچکی با قابلیت نشان دادن واسط گرافیکی برای کاربر را فراهم میکند. کلاس Hello تابع موروثی (print(Graphicsy را از سوپر کلاس container باطل میکند، برای اینکه کدی که اپلت را نمایش میدهد، فراهم کند. تابع paint شیهای گرافیکی را که شامل زمینههای گرافیکی هستند را میفرستد تا برای نمایش اپلتها استفاده شوند. تابع paint برای نمایش "Hello world!" تابع (drawstring(string,int,in را صدا میزند.
تکنولوژی servlet جاوا گسترش وب را به آسانی فراهم میکند؛ و شامل مکانیزمهایی برای توسعهٔ تابعی سرور وب و برای دسترسی به سیستمهای تجاری موجود است.servlet قسمتی از javaEE است که به درخواستهای مشتری پاسخ میدهد.
// Hello.java
import java.io. *;
import javax.servlet. *;
public class Hello extends GenericServlet {
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
final PrintWriter pw = response.getWriter();
pw.println("Hello, world!");
pw.close();
}
}
واژهٔ import کامپایلر جاوا را هدایت میکند که تمام کلاسهای عمومی و واسطها را از بستههای java.io وjava.servlet را در کامپایل وارد کند.
کلاس Hello کلاس Genericservlet را توسعه میدهد. کلاس Genericservlet واسطی برای سرور فراهم میکند تا درخواست را به servlet بفرستد و چرخهٔ زندگی servlet را کنترل کند.
صفحهٔ سرور جاوا قسمتی از سرور javaEE است که پاسخ تولید میکند. نوعاً صفحات HTML به درخواستهای HTTP از مشتری.JSPها کد جاوا در صفحهٔ HTML را با استفاده از حائل <%and%> اضافه میکنند.JSP به javaservlet کامپایل میشود.
Swing کتابخانهٔ واسط گرافیکی کاربر است برای پلتفرم javaSE. ابزاری مشابه پنجره، GTK و motif توسط شرکت sun فراهم شدهاند. این مثال کاربرد swing یک پنجرهٔ واحد همراه با Hello world را ایجاد میکند.
// Hello.java (Java SE 5)
import java.awt.BorderLayout;
import javax.swing. *;
public class Hello extends JFrame {
public Hello() {
super("hello");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(new JLabel("Hello, world!"));
pack();
}
public static void main(String[] args) {
new Hello().setVisible(true);
}
}
اولین جملهٔ import کامپایلر جاوا را هدایت میکند تا کلاس Borderlayout را از بستهٔ java.awt در جاوا به کامپایل اضافه کند؛ و import دوم همهٔ کلاسهای عمومی و واسط آنها را از بستهٔ javax.swing اضافه میکند. کلاس Hello کلاس Jframe را توسعه میدهد. کلاس Jframe یک پنجره با میلهٔ عنوان و کنترل بستن است.
زمانی که برنامه آغاز میشود، تابع main با JVM صدا زده میشود. این یک نمونهٔ جدید از کلاس Hello را ایجاد کرده و با صدا زدن تابع setvisible(boolean) با مقدار true نمایش داده میشود.
کتابخانههای جاوا که به صورت بایت کد از کد اصلی کامپایل شدهاند، برای پشتیبانی از بعضی از کاربردهای جاوا، توسط JRE منتشر شدهاست. مثالهایی از این کتابخانهها عبارتند از:
شرکت سان میکروسیستم، ۴ نوع ویرایش از کاربردهای مختلف جاوا را ارائه دادهاست:
مصرف حافظهٔ بالا و سختافزار در برنامههای نوشته شده و مدیریت غیر متوازن Thread Pool و عدم قابلیت توزیع پذیری.
حذف اشارهگرها در جاوا به دلیل مشکلاتی بوده که آنها در طول تاریخشان به وجود آوردهاند (البته در زمان گذشته که در برنامههایی مانند ++C برنامهنویس مستقیماً به مدیریت اشاره گر اقدام مینمود)، اگرچه این موارد در برنامههای سیستمی لازم بهنظر میرسد ولی در محیطهای تحتوب که بستر اصلی جاوا هستند میتوانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامههای سیستمی دارند داشته باشند و باعث میشود که توجه برنامهنویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاسپذیری برنامه به تنظیم اشارهگرها معطوف گردد.
از ابتدای به وجود آمدن جاوا، کتابخانه JNI - Java Native Interface در آن وجود داشته که قابلیت فراخوانی و دستکاری برنامههایی در ++C و… را میداده که از نمونههای آن میتوان به Jtwain که یک بستهای است که از کتابخانههای ویندوز برای اسکن عکس استفاده میکند، یا SWT که یک بسته نرمافزاریست که از کتابخانههای ویندوز و لینوکس (برحسب سیستمعامل) برای ساخت واسط کاربری (UI) استفاده میکند، نام برد.
جاوا امروزه به عنوان یک زبان پر کاربرد به خصوص در برنامههای کاربردی تجاری مطرح است و بسیاری از سازمانها و شرکتهای از این زبان و تکنولوژیهای مربوط به آن استفاده میکنند. ابزارهای زیادی برای تست برنامههای نوشته شده توسط جاوا مورد استفاده قرار میگیرند. برای مثال: در جاوا به دلیل مدیریت حافظه توسط Garbage collection ممکن است به دلیل نوشتن غیر استاندارد برنامه در حافظه نشتی داشته باشیم (memory leakage)که این امر سبب میشود حافظه گرفته شده آزاد نشود و با پر شدن حافظه برنامه دچار خلل شود. برای حل این مشکل و سایر مشکلات نیاز به تست نرمافزارهای نوشته شده در جاوا هستیم. با بزرگ شدن حجم نرمافزار تست آن نیز سختتر میشود. بهتر از قبل از نوشتن برنامههای تجاری بزرگ به تست و نحوه تضمین کیفیت آن هم فکر شود.[38]
برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه میگیرند. درحالیکه این دو زبان گرچه در ظاهر و کلمات شباهت دارند ولی بهطور ساختاری با یکدیگر کاملاً متفاوت هستند. جاوااسکریپت محصول شرکت نت اسکیپ است. جاوا برای اجرا باید به زبان ماشین مجازی ترجمه شود اما جاوااسکریپت زبانی است که معمولاً در صفحات وب نوشته میشود و توسط مرورگر تفسیر میگردد. در جاوا متغیرها همگی بر اساس نوع آنها معرفی میشوند ولی در جاواسکریپت نوع متغیرها به صورت ضمنی مشخص میشود.[39]
جاوا در نسخه ۸ تغییرات بسیار مهم و گستردهای داشتهاست. مفاهیمی مانند واسطهای تابعی، عبارتهای لامبدا، جویبار (Stream) و امکانات گسترده کتابخانهای در این نسخه معرفی شدهاند. در این نسخه، رویکرد برنامهنویسی تابعی، علاوه بر رویکرد شیءگرایی، ممکن شدهاست.
در نسخهٔ جاوا ۹ که در تاریخ ۲۱ سپتامبر ۲۰۱۷، به صورت عمومی عرضه شد، پروژهای به نام Jigsaw به آن اضافه شد که قابلیت برنامهنویسی در قالب ماژول را در جاوا امکانپذیر کرد
داشتن یک پلتفرم ماژولار و ماژولار شدن JDK به توسعهدهندگان آن کمک میکند چنین پلتفرم قدیمی، گنده و بزرگی را مدیریت کنند و به جلو حرکت دهند. آنطور که معماران آن میگویند، الان تنها فرصتی بود که به سمت ماژولار کردن JDK پیش بروند وگرنه در آینده هرگز چنین اتفاقی ممکن نمیشد. ماژولاریتی علاوه بر کمک کردن به توسعهدهندگان JDK برای حرکت آن رو به جلو، فرصتی استثناییتر را برای ما ایجاد میکند. تصور کنید که یک ماشین حساب ساده تحت کنسول نوشتهاید، نه از امکانات JavaEE استفاده میکنید، نه کاری به CORBA دارید، نه JPA. احتمالاً تنها چیزی که نیاز دارید موارد پایهای است. اما برای اجرا و توزیع برنامهتان نیاز به یک JRE کامل و حجیم دارید که احتمالاً راه انداختنش هم چندان ارزان نیست. اما با ماژولار شدن جاوا شما میتوانید فقط ماژولهایی که استفاده کردهاید را در قالب یک Runtime Image داشته باشید که دیگر چیزهای اضافیای که از آنها استفاده نکردهاید را ندارد. با این قابلیت، حجم برنامهها کم شده و شما میتوانید از دستگاههای Embedded که حافظه محدودتری دارند هم استفاده کنید.
هر ماژول دارای یک اسم است، کدهای مرتبط و پکیجها را در درون خود نگه میدارد و کامل است به این معنی که یک کار مشخص را انجام میدهد و وظایفش را از طریق APIهای مشخص شده در دسترس دیگران قرار میدهد. یک ماژول به صورت صریح بیان میکند برای کار کردن به چه ماژولهایی نیاز دارد و کدام بخش از پکیجهایش برای دیگر ماژولها قابل دسترسی است. اینگونه به سادگی میتوانیم وابستگی بین ماژولها را تشخیص دهیم، بر روی Internal APIهایمان کنترل داشته باشیم و در صورت نبود یک ماژول در آغاز برنامه از نبود آن فوراً مطلع شویم و در صورت وجود هرگونه تداخلی به سرعت به خطا بربخوریم.[40]
این نسخه که در نسخه ۲۰ مارس ۲۰۱۸ عرضه گردید، یک نسخه کوتاه مدت بوده و بیشتر شامل مجموعهای از بهینهسازیها میباشد. در این میان قابلیت جالبی به نام Local Variable Type Interface دیده میشود. اگر با زبان پایتون کد زده باشید این قابلیت شبیه به تعریف متغیر در این زبان است. بهطور خلاصه باید گفت با استفاده از این قابلیت دیگر نیاز به تعیین دقیق نوع متغیرهای محلی نداریم. این کامپایلر است که نوع متغیر را با توجه به مقداردهی تشخیص میدهد. تا به الان اگر میخواستیم لیستی از رشتهها بسازیم، کد مشابه پایین را میزدیم:
List<String> list = new ArrayList<>() ;
حال اگر بخواهیم از این قابلیت جدید استفاده کنیم کافیست به جای List (در اینجا نوع متغیر است) var را جایگزین کنیم. پس کد بالا به صورت زیر تغییر خواهد کرد:
var list = new ArrayList<String>() ;
var نه کلمهٔ کلیدی جدیدی است و نه هیچ بایت کد جدیدی برای آن تعریف شدهاست. براساس مقداری که به متغیر میدهیم تفسیر میشود.[41]
جاوا یکی دیگر از گزینههای محبوب در سازمانهای بزرگ میباشد و دهها سال است که به همان شکل باقی ماندهاست. جاوا بهطور گستردهای برای ساخت برنامههای تحت وب در مقیاس سازمانی استفاده میشود و مدتهاست که در لیست بهترین زبانهای برنامهنویسی دیده میشود. جاوا بسیار پایدار است و بنابراین، بسیاری از سازمانهای بزرگ آن را پذیرفتهاند. اگر به دنبال شغل مبتنی بر توسعه در یک سازمان بزرگ هستید، جاوا زبانی است که شما باید یاد بگیرید. جاوا همچنین در توسعه برنامه اندروید کاربرد گستردهای دارد. تقریباً هر شغلی امروز به یک برنامه اندروید نیاز دارد. با توجه به اینکه امروز میلیاردها کاربر اندروید وجود دارد و با توجه به این واقعیت که گوگل یک چارچوب عالی برای توسعه مبتنی بر جاوا (Android Studio) ایجاد کردهاست.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.