همه چیز درباره جاوا تاریخچه مزایا و معایب

java, آموزش java, آموزش جاوا, تاریخچه جاوا, جاوا, جاوا برای علم داده, جاوا چیست, کاربردهای زبان جاوا, معرفی جاوا, همه چیز درباره جاوا, همه چیز درباره جاوا تاریخچه مزایا و معایب

معرفی جاوا

جاوا یک زبان برنامه نویسی شی گرا همه منظوره مبتنی بر کلاس است و به گونه ای طراحی شده که تا حد امکان کمترین وابستگی به محیط اجرا را داشته باشد. جاوا به توسعه دهندگان برنامه کمک می کند تا یک بار کد را بنویسند و در هر نقطه اجرا کنند، به این معنی که کد کامپایل شده جاوا می تواند بر روی تمام سیستم عامل هایی که جاوا را پشتیبانی می کنند اجرا شود. برنامه های جاوا معمولاً با بایت کد ساخته شده اند که می تواند بدون توجه به معماری رایانه، روی هر دستگاه مجازی جاوا (JVM) اجرا شود. سینتکس جاوا شبیه سی و سی پلاس پلاس است اما امکانات کمتری نسبت به هرکدام از آنها دارد. در سال 2019، جاوا یکی از محبوب ترین زبان های برنامه نویسی بود که طبق برنامه گیت هاب (GitHub) مورد استفاده قرار می گرفت، به ویژه برای برنامه های وب سرویس دهنده-سرور، با 9 میلیون توسعه دهنده گزارش شده است.

جاوا در ابتدا توسط James Gosling در Sun Microsystems (که از آن زمان توسط اوراکل بدست آمده است) توسعه داده شد و در سال 1995 به عنوان یکی از اجزای اصلی پلتفرم جاوا منتشر شد. تهیه کننده اصلی و مرجع کامپایلرهای جاوا، ماشین های مجازی و کتابخانه های کلاس در ابتدا توسط Sun تحت مجوزهای اختصاصی منتشر شد. در همین حال، افراد دیگری پیاده سازی های جایگزین از این فناوری های Sun، مانند کامپایلر GNU برای جاوا (کامپایلر bytecode)، GNU Classpath (کتابخانه های استاندارد)، و IcedTea-Web (افزونه مرورگر برای اپلت ها) را ارائه داده اند.

آخرین نسخه جاوا 13 که در سپتامبر 2019 منتشر شد و Java 11 که نسخه پشتیبانی بلند مدت در حال حاضر است که در تاریخ 25 سپتامبر 2018 منتشر شد. اوراکل برای میراث جاوا 8 LTS آخرین نسخه به روزرسانی عمومی رایگان در ژانویه 2019 را برای استفاده تجاری منتشر کرد، در حالی که در غیر این صورت همچنان از Java 8 با بروزرسانی های عمومی برای استفاده شخصی تا حداقل دسامبر سال 2020 پشتیبانی می کند. از آنجا که جاوا 9 و 10 و 12 دیگر پشتیبانی نمی شود، اوراکل به کاربران خود توصیه می کند نسخه های جاوا به دلیل خطرات جدی ناشی از مشکلات امنیتی حل نشده و سریعاً به آخرین نسخه (در حال حاضر جاوا 13) یا نسخه LTS انتقال پیدا کنند.

تاریخچه جاوا

James Gosling ،Mike Sheridan و Patrick Naughton در ژوئن 1991 پروژه زبان جاوا را آغاز کردند. جاوا در ابتدا برای تلویزیون تعاملی طراحی شده بود اما در آن زمان صنعت تلویزیون کابلی دیجیتال نیز پیشرفت کرد. بعدها پروژه با نام Green نامگذاری شد و در نهایت به نام جاوا از Java coffee تغییر یافت. Sun Microsystems نخستین اجرای عمومی را به عنوان جاوا 1.0 در سال 1996 منتشر کرد و این وعده را داد که بدون هزینه در سیستم عامل های محبوب اجرا شود (WORA) و همچنین ساده و دارای امنیت قابل تنظیم، اجازه دسترسی محدود به شبکه و فایل را فراهم کند. مرورگرهای بزرگ وب به زودی توانایی اجرای اپلت های جاوا در صفحات وب را شامل شدند و جاوا به سرعت محبوب شد. کامپایلر جاوا 1.0 به وسیله آرتور ون هوف در جاوا نوشته شده بود تا با زبان جاوا 1.0 سازگار باشد.

با ظهور جاوا 2 (در ابتدا به عنوان J2SE 1.2 در دسامبر 1998 تا 1999 منتشر شد)، نسخه های جدید دارای پیکربندی های متعدد برای انواع مختلف سیستم عامل ها بودند. J2EE شامل فناوری ها و API ها برای برنامه های سازمانی معمولا در محیط های سرور اجرا می شود، در حالی که J2ME دارای API ها بهینه سازی شده برای برنامه های تلفن همراه است. نسخه دسکتاپ به J2SE تغییر نام یافت. در سال 2006، برای اهداف بازاریابی، Sun Microsystems نسخه های جدید J2 را به ترتیب جاوا EE ،Java ME و Java SE تغییر داد. در تاریخ 13 نوامبر 2006، بزرگترین مجوز ماشین جاوا (JVM) را به عنوان نرم افزار رایگان و اوپن سورس (FOSS) تحت شرایط مجوز عمومی GNU (GPL) منتشر کرد.

ویژگی های جاوا

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

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

شی گرا: جاوا یک زبان برنامه نویسی شی گرا است و همه چیز در جاوا یک شی است. Object-oriented به این معنی است که ما نرم افزار خود را به عنوان ترکیبی از انواع مختلف اشیائی که هر دو داده و رفتار را شامل می شوند، سازماندهی می کنیم. برنامه نویسی شی گرا (OOPs) یک روشی است که توسعه و نگهداری نرم افزار را با ارائه برخی از قوانین ساده می کند. مفاهیم پایه OOP ها عبارتند از:

  • شی
  • کلاس
  • وراثت
  • پلی مورفیسم
  • انتزاع
  • کپسوله سازی

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

  • محیط ران تایم
  • رابط برنامه نویسی برنامه (API)

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

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

  • برنامه های جاوا اشاره گر صریح نیستند.
  • در داخل ابزار ماشین مجازی اجرا می شود.

Classloader در جاوا بخشی از JRE است که برای دانلود کلاس های جاوا در ماشین مجازی جاوا به صورت پویا استفاده می شود. این ویژگی امنیت را با جداسازی بسته برای کلاس های سیستم فایل محلی از آنهایی که از منابع شبکه وارد می شوند، اضافه می کند. قابلیت Bytecode Verifier، قطعه کد را برای کد غیرقانونی که ممکن است حق دسترسی به اشیا را نقض کند، بررسی می کند. ویژگی مدیر امنیت تعیین می کند که چه منابع یک کلاس می تواند به خواندن و نوشتن روی دیسک محلی دسترسی پیدا کند. زبان جاوا این امنیت را به طور پیش فرض فراهم می کند. همچنین برخی از موارد امنیتی توسط توسعه دهنده نرم افزار از طریق SSL ،JAAS، رمزنگاری و غیره فراهم می شود.

قدرتمند: جاوا قوی است زیرا:

  • از مدیریت حافظه قوی استفاده می کند.
  • مجموعه جمع آوری زباله خودکار در جاوا وجود دارد که در ماشین مجازی جاوا اجرا می شود تا از اشیائی که در برنامه جاوا استفاده نمی شود خلاص شوند.
  • دستورالعمل استثنایی و مکانیزم چک کردن تایپ در جاوا وجود دارد.

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

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

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

توزیع شده:جاوا توزیع شده است زیرا به کاربران برای ایجاد برنامه های توزیع شده در جاوا کمک می کند. RMI و EJB برای ایجاد برنامه های توزیع شده استفاده می شود. این ویژگی جاوا ما را قادر به دسترسی به فایل ها با فراخوانی متد ها از هر دستگاهی در اینترنت می کند.

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

پویا: جاوا یک زبان دینامیک است. این موضوع از بارگذاری دینامیکی کلاس ها پشتیبانی میکند. به این معنی است که کلاس ها براساس تقاضا بارگذاری میشوند. همچنین از توابع زبان های مادری خود، یعنی C و ++C پشتیبانی می کند.

معماری جاوا

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

محیط های جاوا (Java Environments)

تقریباً برای هر زبان برنامه نویسی، به یک محیط خاص نیاز دارید که شامل تمام مؤلفه های لازم، رابط های برنامه نویسی و کتابخانه ها جهت تهیه، تدوین، تنظیم برنامه های آن باشد. جاوا دارای 2 محیط مشابه است و هرکسی که با Java کار می کند مجبور است بعد از تنظیم یکی از این محیط ها روی سیستم عامل های محلی یا تولید محلی خود، کار خود را شروع کند.

  • JRE (Java Runtime Environment): حداقل محیط مورد نیاز برای اجرای برنامه جاوا (پشتیبانی از توسعه). این برنامه شامل JVM (ماشین مجازی جاوا) و ابزار استقرار است.
  • JDK (کیت توسعه جاوا): محیط کامل توسعه که برای توسعه و اجرای برنامه های جاوا مورد استفاده قرار می گیرد. این شامل هر دو JRE و ابزار توسعه است.
  • JRE برای کاربران در نظر گرفته شده است، در حالی که JDK برای برنامه نویسان منظور شده است.

می توانید نوشتن یک برنامه جاوا ساده را با هر ویرایشگر ترمینال (vim، nano) یا ویرایشگر گرافیکی (gedit، sublime) شروع کنید. برای یک برنامه جاوا پیچیده، ممکن است شما به یک IDE (محیط توسعه یکپارچه) مانند IntelliJ IDEA، Eclipse یا Netbeans نیاز داشته باشید. یک برنامه جاوا معمولی باید حاوی سینتکس صحیح زبان و فرمت java. باشد. توصیه می شود از مفاهیم برنامه نویسی مانند OOP (برنامه نویسی شی گرا) و الگوهای معماری مناسب برای راحتی در ساختار و حفظ برنامه های جاوا استفاده کنید.

سیستم اجرایی جاوا

جاوا JVM و بایت کد

یکی از اهداف طراحی جاوا قابلیت حمل و نقل است، به این معنی که برنامه هایی که برای پلتفرم جاوا نوشته شده اند باید به طور مشابه روی هر ترکیبی از سخت افزار و سیستم عامل با پشتیبانی کافی از ران تایم اجرا شوند. این کار با کامپایل کردن کد زبان جاوا به جای اینکه مستقیماً به کد دستگاه مخصوص معماری تبدیل شود، به نمایه واسطه ای به نام کد bytecode جاوا بدست می آید. دستورالعمل های bytecode جاوا شبیه به کد ماشین هستند، اما قرار است توسط یک ماشین مجازی (VM) که مخصوص سخت افزار میزبان نوشته شده، اجرا شود. کاربران نهایی معمولاً از یک Java Runtime Environment (JRE) نصب شده بر روی دستگاه خود برای برنامه های کاربردی Java مستقل یا در یک مرورگر وب برای برنامه های Java استفاده می کنند. کتابخانه های استاندارد روشی کلی برای دستیابی به ویژگی های خاص میزبان مانند گرافیک، رشته و شبکه دارند.

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

Non-JVM

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

مدیریت خودکار حافظه

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

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

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

جاوا شامل چندین نوع جمع آوری زباله است. به طور پیش فرض، HotSpot از جمع آوری زباله موازی استفاده می کند. با این وجود چندین جمع آوری زباله دیگر نیز وجود دارد که می توان از آنها برای مدیریت پشته استفاده کرد. برای 90 درصد برنامه های کاربردی در جاوا، جمع آوری زباله همزمان (Mark-Sweep) (CMS) کافی است.

سینتکس جاوا

سینتکس جاوا تا حد زیادی تحت تأثیر ++C است. بر خلاف ++C، که ترکیبی از برنامه نویسی ساختاری، عمومی و شی گرا است، جاوا تقریباً منحصراً به عنوان یک زبان شی گرا ساخته شده است. همه کد ها در داخل کلاس ها نوشته شده اند، و هر مورد داده به جزء انواع داده های اولیه، (به عنوان مثال اعداد صحیح، اعداد نقطه شناور، مقادیر بولین و کاراکترها) یک شی است، بجز انواع داده ها، که به دلایلی تابع نیستند. جاوا از برخی جنبه های محبوب ++C (مانند روش printf) استفاده می کند. بر خلاف ++C، جاوا از بارگذاری بیش از حد اپراتور یا وراثت های چندگانه برای کلاس ها پشتیبانی نمی کند، اگرچه ارث چندگانه برای واسط ها پشتیبانی می شود.

الگوهای طراحی (Design Patterns) در جاوا

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

پیمایش به بالا