برنامه نویسی 997 بازدید

زبان برنامه نویسی جاوا (JAVA) در 23 مه 1995 (برابر با 2 خرداد 1374) از سوی جیمز گاسلینگ (James Gosling) طراحی شده است. جاوا به گواهی سایت معتبر Tiobe از سال 2001 همواره به عنوان اولین یا دومین زبان برنامه‌نویسی دنیا مطرح بوده است. در تصویر زیر درصد رتبه کسب شده این زبان را بین همه زبان‌های برنامه‌نویسی در طی 18 سال اخیر مشاهده می‌کنید.

تا جایی که به جاوا مربوط می‌شود، همه چیز از اوایل دهه 1990 آغاز شد، یعنی زمانی که شرکت سان مایکروسیستمز (Sun Microsystems) شروع به توسعه نسخه بهتری از ++C کرد که بتواند به آسانی پرتابل شود، برای افراد مبتدی مطلوب باشد و به مدیریت خودکار حافظه بپردازد. تحقیقات این شرکت منجر به خلق یک زبان کاملاً جدید شد که نام آن از میان ده‌ها نام پیشنهادی در اتاق جلسه معرفیش انتخاب شد. امروزه لوگوی جاوا به صورت فنجان قهوه‌ای که از آن بخار می‌دمد، به نماد جهانی برنامه‌نویسی تبدیل شده است. در واقع دیگر کسی نمی‌داند که ارتباط برنامه‌نویس‌ها با کافئین قدیمی‌تر است؛ یا ارتباطشان با جاوا که امروزه مترادف با قهوه است.

در این نوشته به بررسی کامل و جامع این زبان برنامه‌نویسی، ویژگی‌ها، مزایا، معایب، بازار کار، کتابخانه‌ها، کاربردها و هر آنچه که ممکن است در مورد جاوا بخواهید بدانید می‌پردازیم.

جاوا چیست؟

جاوا یک زبان برنامه‌نویسی چندمنظوره و شی‌گرا است که تا حدودی زیادی به C و ++C شباهت دارد؛ اما استفاده از آن آسان‌تر است و امکان ساخت برنامه‌هایی قدرتمند با آن وجود دارد. البته تعریفی که شرکت سان مایکروسیستمز در سال 2000 ارائه کرده است، شاید از تعریف فوق گویاتر باشد:

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

در ادامه هر یک از خصوصیات فوق را به طرز جداگانه‌ای مورد بررسی قرار می‌دهیم:

  • جاوا یک زبان ساده است

جاوا در ابتدا بر اساس زبان‌های C و ++C و با حذف برخی ویژگی‌هایی که قابلیت سردرگم کننده داشتند مدلسازی شد. از جمله این ویژگی‌ها می‌توان به اشاره‌گرها، پیاده‌سازی چندباره وراثت و بارگذاری بیش از حد عملگرها اشاره کرد که در جاوا حذف شدند. یکی از ویژگی‌هایی که در C++/C وجود نداشت؛ اما جزو ویژگی‌های اساسی جاوا به شمار می‌آید، امکان بازیافت حافظه (garbage-collection) است که به طور خودکار اشیا و آرایه‌های بی استفاده را حذف می‌کند.

  • جاوا یک زبان شی‌گرا است

تمرکز شی‌گرایی جاوا موجب شده است که توسعه‌دهندگانی که از این زبان استفاده می‌کنند، از آن برای حل یک مسئله استفاده کنند و نه سروکله زدن با آن برای رفع محدودیت‌های مسئله. این وضعیت موجب تمایز بین جاوا و C شده است. برای نمونه اگر می‌خواهید برنامه‌ای برای یک حساب بانکی بنویسید، در جاوا تنها باید به ذخیره‌سازی شی حساب بانکی بپردازید؛ اما در C باید وضعیت حساب (تراز حساب) و رفتارهایی مانند واریز یا برداشت را به طور مستقل برنامه‌نویسی کنید.

  • جاوا یک زبان مبتنی بر شبکه است

کتابخانه وسیع شبکه در جاوا باعث شده است که امکان کار با پروتکل کنترل انتقال/پروتکل اینترنت (TCP/IP) و پروتکل‌های شبکه مانند HTTP (پروتکل انتقال ابرمتن) و FTP (پروتکل انتقال فایل) ساده‌تر شود و همچنین وظیفه ایجاد اتصال‌های شبکه آسان‌تر گشته است. به علاوه برنامه‌های جاوا می‌توانند از طریق شبکه TCP/IP، از طریق URLها، به اشیا دسترسی داشته باشند و این دسترسی به همان سادگی دسترسی روی سیستم فایل محلی است.

  • جاوا یک زبان تفسیر شده است

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

  • جاوا یک زبان مستحکم است

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

جنبه دیگری که موجب استحکام جاوا می‌شود، این است که حلقه‌ها به جای عبارت‌های عدد صحیح که در آن 0 برابر «نادرست» و مقادیر غیر صفر برابر با «درست» هستند، باید به وسیله عبارت‌های بولی کنترل شوند. برای مثال برخلاف C، در جاوا حلقه‌هایی مانند عبارت زیر

++while (x) x

مجاز نیستند؛ زیرا این حلقه ممکن است در جایی که انتظار می‌رود متوقف نشود. به جای آن باید عبارت‌های بولی صریحی مانند زیر

;++while (x!= 10) x

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

  • جاوا یک زبان امن است

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

  • جاوا یک زبان فارغ از معماری است

شبکه‌ها موجب اتصال پلتفرم‌هایی با معماری مختلف ریزپردازنده‌ها و سیستم‌های عامل می‌شوند. نمی‌توان انتظار داشت که جاوا دستورالعمل‌های خاص پلتفرم را ایجاد کند و انتظار داشته باشد که این دستورالعمل‌ها از سوی همه انواع پلتفرم‌هایی که بخشی از شبکه هستند درک شود. در عوض جاوا دستورالعمل‌های بایت‌کد مستقل از پلتفرم ایجاد می‌کند که تفسیر آن برای هر پلتفرم (از طریق پیاده‌سازی JVM) آسان است.

  • جاوا یک زبان پرتابل است

عدم وابستگی به معماری موجب پرتابل شدن جاوا شده است. با این حال پرتابل بودن جاوا چیزی فراتر از مستقل بودن دستورالعمل‌های بایت‌کدها از پلتفرم است. برای مثال در نظر بگیرید که اندازه نوع عدد صحیح روی پلتفرم‌های مختلف یکسان خواهد بود. برای نمونه یک نوع عدد صحیح 32 بیتی، صرف‌نظر از این که روی پلتفرم‌های با رجیسترهای 16 بیتی، 32 بیتی یا 64 بیتی پردازش شود؛ در هر حال به صورت علامت‌دار بوده و 32 بیت از حافظه را اشغال می‌کند. کتابخانه‌های جاوا نیز به پرتابل بودن آن کمک می‌کنند. این کتابخانه‌ها در موارد ضروری، انواع داده‌ای را ارائه می‌کنند که به روشی تا حد امکان پرتابل، کد جاوا را به قابلیت‌های خاص پلتفرم متصل می‌سازد.

  • جاوا یک زبان با عملکرد بالا است

ویژگی تفسیری بودن جاوا موجب شده است عملکرد بالایی داشته باشد که در اکثر موارد بیش از حد کفایت است. جاوا در مورد اپلیکیشن‌های با عملکرد بسیار بالا از کامپایل درجا (just-in-time) استفاده می‌کند یعنی دستورالعمل‌های بایت‌کد تفسیر شده را تحلیل می‌کند و دستورهای تفسیر شده با بسامد بالا را به دستورالعمل‌های خاص پلتفرم کامپایل می‌کند. تلاش‌های بعدی برای تفسیر این دستورالعمل‌های بایت‌کد موجب اجرای همان دستورالعمل‌های خاص پلتفرم می‌شود و به این ترتیب عملکرد نرم‌افزار را ارتقا می‌بخشد.

  • جاوا یک زبان چند نخی (multithread) است

جاوا برای بهبود عملکرد برنامه‌هایی که چندین وظیفه را به یک باره اجرا می‌کنند، از مفهوم اجرای چند نخی پشتیبانی می‌کند. برای نمونه برنامه‌ای که رابط گرافیکی کاربر (GUI) را مدیریت می‌کند و در همین حال منتظر ورودی از یک اتصال شبکه است، از نخ (thread) دیگری به جای نخ GUI برای این انتظار استفاده می‌کند. بدین ترتیب رابط گرافیکی برنامه همچنان پاسخگو است. ابتکارهای همگام‌سازی جاوا به نخ‌ها اجازه می‌دهد که داده‌ها را بدون هیچ تأثیر مخربی بین خود مبادله کنند.

  • جاوا یک زبان پویا (دینامیک) است

به دلیل ارتباط‌های متقابل بین کد برنامه و کتابخانه‌ها که در زمان اجرا به صورت دینامیک صورت می‌پذیرند، نیازی به ایجاد لینک صریح بین آن‌ها وجود ندارد. در نتیجه زمانی که یک برنامه یا یکی از کتابخانه‌های آن تکامل می‌یابد (برای مثال باگ اصلاح می‌شود یا عملکرد بهبود می‌یابد) توسعه‌دهنده تنها باید برنامه یا کتابخانه به‌روزرسانی شده را منتشر سازد. با این که رفتار دینامیک جاوا موجب شده است به کد کمتری هنگام تغییر کد نیاز باشد؛ اما این روش انتشار می‌تواند موجب تداخل‌هایی نیز بشود. برای نمونه یک توسعه‌دهنده ممکن است یک نوع کلاس را از یک کتابخانه حذف کند یا نام آن را تغییر دهد. وقتی شرکتی کتابخانه به روز شده را منتشر می‌کند، برنامه‌های موجود که به آن نوع کلاس وابسته هستند از کار می‌افتند. برای حل این مشکل جاوا از نوع رابط (interface type) پشتیبانی می‌کند که مانند تعامل بین دو طرف است.

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

ریشه‌های پیدایش جاوا

جاوا از سوی تیمی در شرکت سان مایکروسیستمز به رهبری جیمز گاسلینگ توسعه یافته و در سال 1995 منتشر شد. این زبان متعاقباً از سوی شرکت اوراکل خریداری شده است.

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

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

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

نسخه‌های مختلف جاوا

شرکت سان مایکروسیستمز، کیت توسعه نرم‌افزاری (JDK) شماره 1.0 جاوا را در سال 1995 منتشر کرده است. این JDK نخست برای توسعه اپلیکیشن‌های دسکتاپ و اَپلت (applet) مورد استفاده قرار گرفت. متعاقباً جاوا برنامه‌نویسی دستگاه‌های موبایل و سرورهای تجاری را نیز در این کیت میسر ساخت. ذخیره‌سازی همه کتابخانه‌ها در یک JDK منفرد باعث شده که این کیت بسیار بزرگ‌تر از حد مناسب برای توزیع شود. البته باید این نکته را در نظر داشته باشید که توزیع نرم‌افزارها در دهه 1990 توسط CD های اندازه کوچک و یا از طریق سرعت‌های پایین شبکه صورت می‌گرفته است. از آنجا که اغلب توسعه‌دهندگان به همه API ها نیاز نداشتند (یک توسعه‌دهنده اپلیکیشن‌های دسکتاپ به ندرت به API های سرورهای تجاری نیاز پیدا می‌کند) شرکت Sun این مشکل توزیع را با تقسیم جاوا به سه نسخه حل کرد. این نسخه‌ها نهایتاً به نام JAVA SE، JAVA EE و JAVA ME نامیده شدند که در ادامه هر کدام را توضیح داده‌ایم.

  • پلتفرم جاوا، نسخه استاندارد (Java SE)- این نسخه از جاوا برای توسعه اپلیکیشن‌های سمت کلاینت که روی رایانه‌های رومیزی اجرا می‌شوند، و اپلت‌ها که روی مرورگرهای وب اجرا می‌شوند، طراحی شده است.
  • پلتفرم جاوا نسخه انترپرایز (Java EE)- این نسخه از جاوا بر مبنای JAVA SE طراحی شده و به طور انحصاری برای توسعه اپلیکیشن‌های سرور با گرایش سازمانی استفاده می‌شود. اپلیکیشن‌های سمت سرور شامل سرولت‌ها (Servlet) می‌شود که برنامه‌های جاوای مشابه اپلت هستند؛ اما به جای کلاینت روی سرور اجرا می‌شوند. سرولت‌ها از API Java EE Servlet استفاده می‌کنند.
  • پلتفرم جاوا، نسخه میکرو (Java ME) – این نسخه از جاوا بر مبنای JAVA SE طراحی شده است. این پلتفرم برای توسعه میدلت‌ها (MIDlet) استفاده می‌شود که برنامه‌های جاوایی هستند که روی دستگاه‌های اطلاعاتی موبایل اجرا می‌شوند. ایکس‌لت (Xlet) ها نیز برنامه‌های جاوایی هستند که روی دستگاه‌های مونتاژی اجرا می‌شوند.

JAVA SE پلتفرم اصلی جاوا است و پلتفرم‌های دیگر بر مبنای آن طراحی شده‌اند.

مروری بر پلتفرم جاوا

جاوا هم یک زبان برنامه‌نویسی و هم پلتفرمی برای اجرای کد جاوای کامپایل شده است. این پلتفرم به طور عمده شامل JVM است؛ اما محیط اجرایی را نیز شامل می‌شود که از اجرای JVM روی پلتفرم‌های زیرساختی بومی پشتیبانی می‌کند. JVM خود شامل چند جزء برای بارگذاری، تأیید و اجرای کد جاوا است. در تصویر زیر شیوه اجرای یک کد جاوا روی این پلتفرم را مشاهده می‌کنید.

JVM شامل یک مولفه (کامپوننت) classloader، verifier بایت‌کد و یک مفسر و کامپایلر در جا برای بارگذاری، تأیید و اجرای یک فایل کلاس است.

در بخش فوقانی نمودار فوق یک سری از فایل‌های کلاس برنامه را مشاهده می‌کنید که یکی از آن‌ها به نام فایل کلاس اصلی نامیده شده است. برنامه جاوا دست کم باید یک فایل کلاس اصلی داشته باشد که نخستین کلاسی است که بارگذاری، تأیید و اجرا خواهد شد.

JVM بارگذاری کلاس را به مولفه classloader می‌سپارد. Classloader فایل‌های کلاس را از منابع مختلف مانند سیستم‌های فایل، شبکه‌ها و فایل‌های فشرده بارگذاری می‌کند. این مولفه، JVM را از مسائل و مشکلات مرتبط با بارگذاری کلاس بر حذر می‌دارد.

یک فایل کلاس بارگذاری شده در حافظه نگهداری می‌شود و به صورت یک شی ایجاد شده از کلاس Class نمایش می‌یابد. هنگام بارگذاری، bytecode verifier دستورالعمل‌های مختلف بایت‌کد را بررسی می‌کند تا مطمئن شود که معتبر هستند و امنیت را به مخاطره نمی‌اندازند.

اگر بایت‌کد فایل کلاس معتبر نباشد، JVM خاتمه می‌یابد. در غیر این صورت مولفه مفسر آن، بایت‌کد را یک به یک به دستورالعمل‌ها تفسیر می‌کند. در این فرایند تفسیر، دستورالعمل‌های بایت‌کد شناسایی شده و دستورالعمل‌های بومی معادل آن‌ها اجرا می‌شوند.

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

در زمان اجرا، مفسر معمولاً با درخواستی برای اجرای بایت‌کد فایل کلاس دیگر مواجه می‌شود که به این برنامه یا یک کتابخانه تعلق دارد. در چنین مواردی classloader فایل کلاس را بارگذاری می‌کند و bytecode verifier بایت‌کد فایل کلاس بارگذاری شده را پیش از اجرا تأیید می‌کند. همچنین در زمان اجرا نیز دستورالعمل‌های بایت‌کد ممکن است از JVM بخواهند که یک فایل را باز کند، چیزی را روی صفحه نمایش دهد، صدایی ایجاد کند یا وظیفه دیگری انجام دهد که نیازمند همکاری با پلتفرم بومی است. در این موارد JVM با استفاده از رابط بومی جاوا (JNI) که یک پل فناوری برای تعامل با پلتفرم بومی برای اجرای وظایف است این کار را انجام می‌دهد.

نوع دینامیک یا نوع استاتیک

جاوا یک زبان برنامه‌نویسی با نوع استاتیک است در حالی که زبان‌های برنامه‌نویسی دیگری مانند روبی (Ruby)، پایتون (Python)، و جاوا اسکریپت زبان‌هایی از نوع دینامیک محسوب می‌شوند. اکثر افراد به بحث تفاوت بین زبان‌های با نوع استاتیک و دینامیک علاقه‌مند هستند.

نوع دینامیک

اگر تاکنون تجربه عملی برنامه‌نویسی داشته باشید، با مفهوم متغیر آشنا هستید. در زبان‌های با نوع دینامیک مانند روبی یا جاوا اسکریپت می‌توان متغیری را بدون این که نوع داده ذخیره شده‌اش معین باشد، اعلان کرد. این متغیر از نوع دینامیک است و مقدار آن می‌تواند هر چیزی مانند یک عدد، جمله و یا غیره باشد.

نوع استاتیک

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

بدین ترتیب در زبان‌های برنامه‌نویسی از نوع استاتیک یک لایه اضافی از کدنویسی وجود دارد که باید انواع همه متغیرها از قبل مورد تفکر قرار گرفته و مشخص شود. بنابراین یادگیری زبان‌های از نوع دینامیک برای کسانی که اولین زبان برنامه‌نویسی‌شان از نوع استاتیک بوده است، بسیار آسان‌تر از مسیر معکوس آن خواهد بود.

چه زبان‌هایی از جاوا مشتق شده‌اند؟

برخی زبان‌ها مانند اسکالا (Scala) و گرووی (Groovy) وجود دارند که برای اجرا روی JVM طراحی شده‌اند و یا زبان‌هایی هستند که برای اجرا روی محیط جاوا توسعه یافته‌اند. همچنین ممکن است برخی افراد ادعا کنند که زبان C# تا حدود زیادی تحت تأثیر جاوا توسعه یافته است. زبان سی شارپ مایکروسافت پس از جاوا توسعه یافت و به طور خاص به مقدار زیادی از جاوا الهام گرفته است. سی شارپ موجب برخی بهبودها در جاوا نیز شده است و از این رو این دو زبان به طور متقابل بر هم تأثیرگذار بوده‌اند.

جاوا چه تفاوتی با جاوا اسکریپت دارد؟

هیچ رابطه فنی بین جاوا و جاوا اسکریپت وجود ندارد. جاوا اسکریپت از سوی نت اسکیپ (Netscape) در دهه 90 میلادی توسعه یافته است و در ابتدا LiveScript نامیده می‌شد. زمانی که نت اسکیپ دید هیچ کس از LiveScript استفاده نمی‌کند و جاوا محبوبیت روزافزونی دارد، نام آن را به جاوا اسکریپت تغییر داد تا بتوانند از این موج محبوبیت جاوا بهره‌مند شوند. در واقع این ایده موفق بود و جاوا اسکریپت نیز محبوب شد؛ اما از منظر فنی هیچ رابطه‌ای بین این دو وجود ندارد و صرفاً دارای تشابه اسمی هستند. شاید تنها مشابهت فنی بین جاوا و جاوا اسکریپت را در این بدانیم که هر دو آن‌ها دستور زبانشان را از زبان برنامه‌نویسی C گرفته‌اند. به همین دلیل اگر با جاوا آشنا باشید، در این صورت یادگیری جاوا اسکریپت آسان خواهد بود و برعکس.

فریمورک‌های جاوا

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

با این که جاوا شاید زبان چندان سرراستی نباشد؛ اما شما مجبور نیستید کدهای جاوا را از صفر بنویسید. فریمورک‌های عالی زیادی برای جاوا وجود دارند که با آن‌ها می‌توان اپلیکیشن‌های وب، موبایل، میکروسرویس و REST API هایی نوشت که روی ماشین مجازی جاوا اجرا می‌شوند.

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

BLADE: فریمورک ساده اپلیکیشن با کمترین اثرات جانبی

blade یک فریمورک سبک و با عملکرد بالا برای جاوا است که امکان ساخت اپلیکیشن‌های وب سریع به روشی سرراست را فراهم می‌سازد. خالقان این فریمورک هدفشان این بوده است که کاربران آن بتوانند در طی یک روز آن را درک کنند. از این رو blade روی سادگی و ظرافت متمرکز شده است.

فریمورک blade از الگوی طراحی نرم‌افزار MVC یعنی «مدل-نما-کنترلر» (Model-View-Controller) استفاده می‌کند. درک طراحی این فریمورک آسان است، چون به هیچ کتابخانه شخص ثالث وابسته نیست و لایه‌های زیادی را نیز شامل نمی‌شود. blade بر مبنای جاوا 8 طراحی‌شده است و یک وب‌سرور Netty و موتور templete نیز در داخل فریمورک جاسازی شده است. این فریمورک اثرات جانبی کمی دارد و کل کد منبع آن کمتر از 500 کیلوبایت است.

شما با استفاده از blade به رابط مسیریابی به سبک RESTful دسترسی می‌یابید و می‌توانید اپلیکیشن خود را به عنوان یک پروژه maven ابتدایی توزیع کنید. این فریمورک ویژگی‌های امنیتی داخلی دارد که برای مثال از دفاع CSRF و XSS استفاده می‌کند. blade فریمورک کارآمدی است چون از افزونه‌ها و منابع webjar پشتیبانی می‌کند. مستندات روی سایت اصلی (https://lets-blade.com) به زبان چینی است. با این حال روی ریپو گیت‌هاب (https://github.com/lets-blade/blade) مستندات به زبان انگلیسی نیز وجود دارد.

Dropwizard: سرویس‌های وب RESTful آماده Production

Dropwizard یک فریمورک با عملکرد بالا؛ اما سرراست محسوب می‌شود که برای توسعه سریع سرویس‌های وب RESTful مورد استفاده قرار می‌گیرد. این فریمورک به طور خاص برای ایجاد میکروسرویس‌های جاوا مناسب است.

این فریمورک Dropwizard چند کتابخانه جاوا کاملاً تثبیت شده برای ارائه پلتفرمی سریع و بدون مزاحمت را گرد هم آورده است. این فریمورک به همراه یک سرور jetty توکار، Google Guava، Logback، Hibernate Validator، Joda Time و بسیاری کتابخانه‌های محبوب دیگر جاوا ارائه شده است. به علاوه Dropwizard شامل jersey نیز هست که با آن می‌توان وب‌سرویس‌های RESTful ساخت و Jackson که برای پردازش JSON مورد استفاده قرار می‌گیرد. Dropwizard را می‌توان به عنوان یک اکوسیستم مجزا در نظر گرفت که شامل همه وابستگی‌های اشاره شده بالا است که در یک بسته منفرد گرد هم آمده‌اند.

اگر می‌خواهید از Dropwizard استفاده کنید، دیگر نیاز نیست زمان زیادی را صرف کارکردهای ثانویه‌ای مانند نوشتن کد برای پیکربندی، معیارها، یا گزارش‌گیری بکنید. به جای آن می‌توانید روی منطق تجاری اولیه اپلیکیشن تمرکز کنید و به بالاترین بهره‌وری دست یابید. به همین دلیل است که Dropwizard در اغلب موارد به صورت یک فریمورک جاوای دوستدار عملیات یاد می‌شود. آغاز کار با آن در صورتی که قبلاً کد جاوا نوشته باشید، دشوار نیست چون مستندات Dropwizard مثال Hello World ساده‌ای ارائه کرده است که می‌تواند در گام‌های نخست به شما کمک کند.

Grails – فریمورک وب اپلیکیشن مبتنی بر Groovy

Grails یک فریمورک وب اپلیکیشن است که از زبان برنامه‌نویسی Groovy استفاده می‌کند. Grails یک زبان شی‌گرا برای پلتفرم جاوا است که به منظور بهبود بهره‌وری توسعه‌دهندگان طراحی شده است. دستور زبان آن با جاوا مطابقت دارد و به بایت‌کد JVM (ماشین مجازی جاوا) کامپایل می‌شود.

با این که در Grails مجبور هستیم کد خود را به زبان Groovy بنویسیم؛ اما Grails با فناوری‌های دیگر جاوا مانند کیت توسعه جاوا، کانتینرهای JAVE EE، Hibernate یا Spring سازگار است. Grails در لایه‌های زیرین خود بر مبنای SPRING BOOT ساخته شده است و می‌تواند از ویژگی‌هایی از قبیل تزریق وابستگی SPRING که به بهره‌وری کمک می‌کنند بهره بجوید. شاید بهترین نکته در مورد Grails این است که به لطف زبان Groovy در آن می‌توان نتایج یکسانی با فریمورک‌های دیگر را در کدهای کمتری به دست آورد.

Grails از تعدادی از مفاهیم مدرن توسعه نرم‌افزار پیروی می‌کند که شامل اصل ترجیح قرارداد بر پیکربندی (convention over configuration)، API opinionated برای الزام به بهترین رویه‌ها و مقادیر پیش‌فرض ملموس است. همچنین بسیار محیط مناسبی برای توسعه‌دهنده دارد، چون به همراه مستندات، راهنمای گام به گام و کتابخانه گسترده افزونه ارائه شده است. شما می‌توانید افزونه‌های خودتان را نیز بسازید و از پشتیبانی IDE برای ایکلیپس (Eclipse)، سابلایم (Sublime)، تکست‌میت (TextMate)، انتلیج (IntelliJ IDEA) و دیگر پلتفرم‌ها استفاده کنید.

GWT: کیت ابزار وب گوگل – اپلیکیشن‌های سمت کلاینت جاوا که به وسیله جاوا اسکریپت توزیع می‌شوند

GWT یا کیت ابزار وب گوگل یک فریمورک وب عالی ایجاد شده از سوی گوگل است. در واقع GWT رویای هر توسعه‌دهنده‌ای که می‌خواهد اپلیکیشن‌های جاوا را برای وب بسازد برآورده ساخته است، چون امکان نوشتن کدهای سمت کلاینت جاوا و توزیع آن به صورت جاوا اسکریپت روی مرورگر را فراهم می‌سازد.

GWT که «گیویت» نیز تلفظ می‌شود، یک فریمورک پایدار و با نگهداری مناسب جاوا است. برای بیان این پایداری چیزی بهتر از این نیست که این فریمورک در چند مورد از محصول‌های گوگل مانند AdWords، AdSense، Blogger و Google Wallet مورد استفاده قرار می‌گیرد. کیت ابزار وب گوگل یک وب‌سایت خاص است که همه ابزارها و منابعی مانند راهنماها، یک اپلیکیشن اولیه و افزونه ایکلیپس که ممکن است نیاز داشته باشید را ارائه می‌کند.

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

Hibernate: فریمورک نگاشت شی-رابطه‌ای برای ارتباط بهتر با پایگاه داده

Hibernate یک فریمورک نگاشت شی -رابطه‌ای است که ارتباط بهتر بین زبان برنامه‌نویسی جاوا و سیستم‌های مدیریت پایگاه داده رابطه‌ای (RDBMS) را ارائه می‌کند.

هنگامی که با زبان‌های برنامه‌نویسی شی‌گرایی مانند جاوا کار می‌کنیم، با مشکلی به نام عدم مطابقت امپدانس شی-رابطه‌ای (که در برخی موارد پارادایم عدم مطابقت نیز نامیده می‌شود) مواجه می‌شویم. زبان‌های شی‌گرا و RDBMS ها داده‌ها را به طرز متفاوتی مدیریت می‌کنند که این امر می‌تواند منجر به مسائل عدم تطبیق شود. با این که زبان‌های شی‌گرا داده‌ها را به شکل سلسله مراتبی از اشیا سازماندهی می‌کنند؛ اما پایگاه‌های داده رابطه‌ای داده‌ها را در قالب جدول ارائه می‌کنند. برای نمونه یکی از مسائل عدم مطابقت هنگامی روی می‌دهد که مدل شی کلاس‌هایی بیش از تعداد جدول‌های موجود در پایگاه‌های داده رابطه‌ای داشته باشد.

Hibernate فریمورکی ارائه کرده است که بر مسائل عدم مطابقت جاوا فائق می‌آید. منظور از ارائه Hibernate دستیابی به ثبات (Persistence) بوده است، یعنی داده‌هایی که توسط اپلیکیشن تولید یا استفاده می‌شوند باید عمری بلندتر از پردازشی که آن‌ها را تولید کرده است داشته باشند. با این که Hibernate برای پایگاه‌های داده رابطه‌ای ساخته شده است؛ اما نسخه جدیدتر آن از انبارهای داده‌ای NoSQL نیز پشتیبانی می‌کند. همچنین ابزارهای توسعه‌ای خوبی مانند ویرایشگر نگاشت، کنسول Hibernate و یک ابزار جالب مهندسی معکوس پایگاه داده دارد.

JavaServer Faces یا (JSF): فریمورک UI مبتنی بر مولفه

JavaServer Faces یا به اختصار JSF از سوی اوراکل به عنوان یک شاخص برای ساخت رابط‌های کاربر برای وب اپلیکیشن‌های جاوا ارائه شده است. این استاندارد رسمی برای ابتکار پردازش جامعه جاوا (JCP) نیز محسوب می‌شود.

نسخه اول JavaServer Faces در سال 2004 منتشر شده است و از این رو فریمورک کاملاً پایداری محسوب می‌شود. این فریمورک از الگوی طراحی نرم‌افزار MVC پشتیبانی می‌کند و یک معماری مبتنی بر مولفه دارد. با استفاده از JavaServer Faces می‌توان رابط‌های کاربری برای مولفه‌های قابل استفاده مجدد ساخت، وضعیت مولفه‌ها را مدیریت کرد، آن‌ها را به منابع داده متصل ساخت و رویدادهای ایجاد شده از سوی کاربر را به شنونده‌های رویداد در سمت سرور اتصال داد.

سیستم قالب‌بندی پیش‌فرض JSF به صورت Facelet است که به طور مشخص برای این پروژه ساخته شده است. با استفاده از Facelet می‌توان از XML به جای جاوا برای مدیریت view استفاده کرد. با این حال، می‌توان view ها را با استفاده از فناوری‌های دیگر مانند XUL (زبان رابط کاربری XML) و جاوای خالی نیز ساخت. وب اپلیکیشن‌های ایجاد شده از سوی JavaServer Faces پرتابل هستند و روی سرورهای مختلف اپلیکیشن JAVA EE نیز کار می‌کنند.

JHipster: اپلیکیشن‌های وب و میکروسرویس‌ها با Spring Boot و Angular/React

JHipster یک فریمورک نسبتاً جدیدتر (در سال 2013 انتشار یافته) جاوا است که Spring Boot و دو فریمورک محبوب فرانت‌اند یعنی Angular و React را در یک نرم‌افزار تولید اپلیکیشن کنار هم گردآورده است. با استفاده از JHipster می‌توانید به سرعت اپلیکیشن‌ها و میکروسرویس‌های مدرن وب مبتنی بر جاوا بسازید.

Spring Boot امکان ایجاد اپلیکیشن‌های مبتنی بر Spring در رده production را ارائه می‌کند که با کمترین پیکربندی کار می‌کنند. JHipster این وضعیت را با انگولار، ری‌اکت و بوت‌استرپ (Bootstrap) در سمت کلاینت ترکیب کرده است تا یک معماری فول‌استک را در اختیار شما قرار دهد. اگر می‌خواهید ببینید که اپلیکیشن‌های JHipster در دنیای واقعی چگونه به نظر می‌رسند برخی از نمونه اپلیکیشن‌ها برای انگولار و ری‌اکت را که هر دو از سوی تیم JHipster توسعه یافته‌اند ملاحظه کنید.

JHipster امکان انتخاب از میان دو سبک معماری را می‌دهد. نخست می‌توانید از معماری monolithic استفاده کنید که در آن بخش‌های فرانت‌اند و بک‌اند اپلیکیشن در یک اپلیکیشن منفرد ترکیب شده‌اند. در روش دوم می‌توانید از معماری میکروسرویس استفاده کنید که فرانت‌اند را از بک‌اند جدا می‌کند. JHipster شامل چندین ابزار نیز می‌شود و گزینه‌های بسیار زیادی برای کدنویسی سمت کلاینت و سرور، بسته‌بندی، به همراه وظایف مختلف DevOps ارائه کرده است. در نهایت باید گفت که تصادفی نیست که همه برندهای مشهوری مانند Adobe، Siemens، Bosch، HBO و Google از JHipster استفاده می‌کنند.

مزیت‌های جاوا

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

  • برنامه‌نویسی شی‌گرا

جاوا، برنامه‌نویسی شی‌گرا (Object-oriented) را کاملاً پذیرفته است. منظور از برنامه‌نویسی شی‌گرا سبکی از کدنویسی است که در آن نه تنها انواع داده و ساختمان داده تعریف می‌شوند؛ بلکه مجموعه توابع مورد استفاده این داده‌ها نیز تعریف می‌شوند. بدین ترتیب ساختمان داده تبدیل به یک شی می‌شود که می‌توان آن را برای ایجاد روابطی بین شی‌های مختلف دستکاری کرد.

برخلاف رویکرد متضادش یعنی برنامه‌نویسی رویه‌ای (procedural programming) که در آن یک توالی از دستورالعمل‌ها با استفاده از متغیرها و توابع استفاده می‌شوند؛ در برنامه‌نویسی شی‌گرا امکان گروه‌بندی این متغیرها و توزیع بر اساس زمینه ارائه شده است و از این رو می‌توان آن‌ها را بر اساس زمینه‌هایی که هر شی خاص دارد، نامگذاری کرده و مورد ارجاع قرار داد.

مقایسه برنامه‌نویسی رویه‌ای با برنامه‌نویسی شی‌گرا

چرا شی‌گرایی یک مزیت محسوب می‌شود؟

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

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

کد Hello World در زبان جاوا

جاوا دستور زبان (به معنی قواعد و ساختارهای مورد استفاده از سوی برنامه‌نویسان) خود را از ++C اخذ کرده است و به همین دلیل ساختاری شبیه به کد C دارد. با این وجود بسیار ساده‌تر است و به افراد مبتدی امکان یادگیری سریع‌تر فناوری و کدنویسی مؤثرتر برای رسیدن به نتایج مشخص را ارائه می‌کند.

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

  • استاندارد برای محاسبات سازمانی

اپلیکیشن‌های سازمانی (Enterprise) بزرگ‌ترین دارایی جاوا هستند. این روند به دهه 90 میلادی باز می‌گردد که سازمان‌ها شروع به جستجوی ابزارهای برنامه‌نویسی مستحکمی کردند که از جنس C نباشند. جاوا از کتابخانه‌های زیادی پشتیبانی می‌کند که بلوک‌های سازنده هر سیستم سازمانی هستند و این مسئله به توسعه‌دهندگان کمک کرد تا هر کارکردی که یک شرکت لازم داشت را با استفاده از جاوا بنویسند. البته افراد با استعداد زیادی که جاوا می‌دانستند نیز بی‌تأثیر نبود. جاوا زبانی است که در اغلب مدارس و دانشگاه‌ها به عنوان یک مقدمه برای برنامه‌نویسی رایانه‌ای محسوب می‌شود. علاوه بر این قابلیت‌های یکپارچه شدن جاوا بسیار وسیع است، چون اغلب ارائه‌دهنده‌های خدمات میزبانی از جاوا پشتیبانی می‌کنند. نکته آخر این که نگهداری جاوا نسبتاً ارزان است، چون به سخت‌افزار خاصی وابسته نیست و می‌تواند روی سرورهایی از هر نوع اجرا شود.

  • کاهش ریسک‌های امنیتی

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

  • عدم وابستگی به پلتفرم (یک بار بنویس، همه جا اجرا کن)

شعار «یک بار بنویس، همه جا اجرا کن» به اختصار WORA یک عبارت مشهور برنامه‌نویسی است که شرکت سان مایکروسیستمز معرفی کرد تا قابلیت‌های چند پلتفرمی جاوا را توصیف کند. معنی این شعار آن است که می‌توان برنامه جاوا را برای مثال روی ویندوز نوشت، آن را به بایت‌کد تبدیل کرد و این اپلیکیشن را روی هر پلتفرم دیگری که از ماشین مجازی جاوا (JVM) پشتیبانی می‌کند، اجرا کرد. در این حالت JVM یک سطح تجرید بین کد و سخت‌افزار ایجاد می‌کند.

طرز کار WORA در جاوا

همه سیستم‌های عامل عمده شامل ویندوز، مک‌اواس، و لینوکس از JVM پشتیبانی می‌کنند. به جز در مواردی که برنامه شما تکیه زیادی روی ویژگی‌های خاص پلتفرم و UI داشته باشد، می‌توانید اگر چه نه همه؛ اما بخش عمده‌ای از بایت‌کد را روی همه این سیستم‌های عامل به اجرا بگذارید.

  • زبان توزیع یافته برای همکاری ریموت آسان

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

محاسبات توزیع یافته در برابر محاسبات موازی

برخلاف زبان‌های دیگر که باید از API های بیرونی برای توزیع استفاده شود، جاوا این فناوری را در هسته خود ارائه کرده است. روش خاص جاوا برای محاسبات توزیع یافته به نام فراخوانی متد از راه دور یا «Remote Method Invocation» (RMO) نامیده می‌شود. با استفاده از RMI می‌توان همه مزیت‌های جاوا مانند امنیت، عدم وابستگی به پلتفرم، و برنامه‌نویسی شی‌گرا را در محاسبات توزیع یافته وارد کرد. علاوه بر این جاوا از برنامه‌نویسی Socket و روش توزیع CORBA برای اشتراک شی‌ها بین برنامه‌های نوشته شده به زبان‌های مختلف، پشتیبانی می‌کند.

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

توسعه‌دهنده‌های جاوا به لطف مدیریت حافظه خودکار آن (AMM) که در زبان برنامه‌نویسی سوئیفت (Swift) نیز استفاده می‌شود، نباید نگران نوشتن دستی کد برای وظایف مدیریت حافظه باشند. ضمناً بازیافت حافظه (garbage collection) اپلیکیشنی است که به طور خودکار تخصیص و آزادسازی حافظه را مدیریت می‌کند. شاید بپرسید بازیافت حافظه دقیقاً به چه معنا است؟

کارایی یک برنامه به طور مستقیم با حافظه ارتباط دارد و حافظه محدود است. هنگام استفاده از زبان‌های برنامه‌نویسی با مدیریت دستی حافظه، توسعه‌دهندگان با ریسک فراموش کردن تخصیص حافظه مواجه هستند که منجر به افزایش استفاده از حافظه و کند شدن برنامه و سیستم می‌شود. بازیاب حافظه (garbage collector) می‌تواند شی‌هایی که دیگر از سوی برنامه شما ارجاعی ندارند را شناسایی کرده و حذفشان کند. علی‌رغم این واقعیت که این وضعیت روی جنبه CPU برنامه تأثیر منفی می‌گذارد؛ اما می‌توان با بهینه‌سازی یا تنظیم دقیق این تأثر منفی را کاهش داده یا به کلی از آن جلوگیری کرد.

  • چندنخی (Multithreading)

نخ (thread) در برنامه‌نویسی به کوچک‌ترین واحد پردازشی گفت می‌شود. جاوا برای بیشینه ساختن بهره‌برداری از زمان CPU امکان اجرای همزمان نخ‌ها را می‌دهد و این فرایند اجرای چند نخی نام دارد.

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

مثالی از چند نخی
  • ثبات و جامعه عظیم

جاوا به لطف جامعه بزرگ پشتیبانی‌کننده، حمایت اوراکل و همچنین نعمت اپلیکیشن‌ها و زبان‌هایی که همچنان روی JVM اجرا می‌شوند چنین عمر درازی یافته است. علاوه بر این، نسخه‌های جدیدتر جاوا با ویژگی‌های جدید و جذاب به طور منظمی منتشر می‌شوند.

جامعه توسعه‌دهنده‌های جاوا نیز بی‌همتا است. در حدود 45 درصد از افرادی که در پیمایش سال 2018 استک‌اورفلو شرکت کرده‌اند از جاوا استفاده می‌کنند. جاوا اکوسیستم بزرگی از کتابخانه‌ها و فریمورک‌های کاملاً تست شده برای هر نوع کاربردی دارد. به احتمال بالا جاوا نخستین زبانی است که اغلب توسعه‌دهندگان می‌آموزند، چون بیش از 1000 دوره آموزشی مرتبط با جاوا روی Udemy و بیش از 300 مورد روی Coursera وجود دارد.

معایب برنامه‌نویسی جاوا

اگر همه مزایای جاوا را تا اینجا خوانده باشید، شاید مشتاقانه قصد دارید در پروژه بعدی خود از زبان برنامه‌نویسی جاوا استفاده کنید؛ اما از آنجا که هیچ گلی بی‌خار نیست، باید گفت که جاوا نیز معایبی دارد که در ادامه به برخی از آن‌ها اشاره کرده‌ایم.

  • لایسنس تجاری پولی

شرکت اوراکل اخیراً اعلام کرده است که از ابتدای سال 2019 استفاده از نسخه JAVE SE 8 در محیط‌های تجاری، کسب و کار یا production نیازمند پرداخت هزینه خواهد بود. بدین ترتیب برای دریافت همه اصلاحیه‌های باگ و به‌روزرسانی‌ها باید بر اساس تعداد کاربران یا تعداد پردازنده‌ها هزینه‌ای پرداخت کنید.

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

  • عملکرد پایین

هر زبان سطح بالایی خواه‌ناخواه به دلیل مسئله کامپایل و سطح تجرید به یک ماشین مجازی باید با مشکل عملکرد پایین دست و پنجه نرم کند. با این وجود، این تنها دلیل انتقاد عمومی از سرعت پایین جاوا نیست. ابزار بازیاب حافظه (garbage collector) جاوا یک ویژگی مفید است؛ اما متأسفانه در صورتی که بیش از 20 درصد زمان CPU را اشغال کند، می‌تواند منجر به مسائل مهم عملکردی بشود. پیکربندی کَش بد نیز می‌تواند منجر به استفاده بیش از حد از حافظه و کاربرد زیاد ابزار بازیابی حافظه شود. همچنین برخی بن‌بست‌های نخ وجود دارند که وقتی چند نخ سعی می‌کنند به منابع یکسانی دسترسی یابند رخ می‌دهند و در این وضعیت کابوس هر توسعه‌دهنده جاوا یعنی خطاهای «خارج از حافظه» (out-of-memory) رخ می‌دهند. با این که هر یک از این مسائل با برنامه‌ریزی ماهرانه قابل پیشگیری هستند؛ اما در برخی موارد روی هم جمع می‌شوند و آسیب‌های مختلفی ایجاد می‌کنند.

  • جاوا روی دسکتاپ ظاهر و شمایل یکسانی ندارد

توسعه‌دهندگان برای ایجاد رابط گرافیکی برنامه (GUI) از ابزارهای مختلفی که خاص هر زبان استفاده می‌کنند. بدین ترتیب برای اپلیکیشن‌های اندروید نرم‌افزار اندروید استودیو وجود دارد که به ایجاد اپلیکیشن‌هایی که حس و ظاهر بومی دارند کمک می‌کند. با این حال وقتی در مورد UI اپلیکیشن‌های دسکتاپ صحبت می‌کنیم، جاوا فاقد شکل و شمایل شایان ذکری است.

چند سازنده UI مانند Swing، SWT، JavaFX، JSF وجود دارند که برنامه‌نویس‌های جاوا می‌توانند از میان آن‌ها انتخاب کنند و این مورد آخر از همه محبوب‌تر است. Swing یک سازنده GUI قدیمی؛ اما مطمئن چند پلتفرمی و ادغام شده در چندین IDE شامل ایکلیپس و NetBeans است. اما به جز در موارد استفاده از قالب‌های از پیش‌ساخته مواردی از ناسازگاری در رابط مشاهده خواهید کرد. SWT از مولفه‌های بومی استفاده می‌کند؛ اما برای UI های پیچیده مناسب نیست. JAVAFX ظاهر تمیز و مدرنی دارد؛ اما چندان به بلوغ نرسیده است. در مجموع انتخاب یک رویکرد کاملاً مناسب برای ساخت GUI اپلیکیشن نیازمند تحقیقات بیشتری است.

  • کد طولانی و پیچیده

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

اگر جاوا را با رقیبش پایتون مقایسه کنیم، می‌بینیم که کد پایتون نیاز به نقطه‌ویرگول انتهایی ندارد و از «and»، «or» و «not» به جای عملگرهای «&&»، «||» و «!» در جاوا به عنوان عملگر استفاده می‌کند. به طور کلی پایتون تشریفات کمتری مانند پرانتز و آکولاد دارد.

کد جاوا در برابر کد پایتون

جاوا کجا استفاده می‌شود؟

اغلب سازمان‌ها از جاوا به روش‌های مختلف بهره می‌گیرند. گستره وسیع استفاده از جاوا باعث شده است که این کاربردها تقریباً از چشم پنهان بمانند و به همین دلیل غالباً پرسیده می‌شود که از جاوا در کجا می‌توان استفاده کرد. در ادامه برخی از زمینه‌های کاربرد جاوا را فهرست کرده‌ایم:

  • اپلیکیشن‌های اندرویدی

با وجود رشد گسترده کاتلین (Kotlin)؛ جاوا همچنان زبان پیش‌فرض برای اپلیکیشن‌های اندرویدی محسوب می‌شود که به طور خودکار جمع عظیمی از توسعه‌دهندگان جاوا را به برنامه‌نویسان اندروید تبدیل کرده است. با این که اندروید از Android SDK به جای JDK استفاده می‌کند؛ اما کد آن همچنان به صورت جاوا نوشته می‌شود.

  • محصولات نرم‌افزاری

علاوه بر Hadoop و Apache Storm، جاوا برای ایجاد Eclipse، OpenOffice، Gmail، Atlassian و بسیاری از موارد دیگر مورد استفاده قرار گرفته است.

  • برنامه‌های مالی

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

  • سیستم‌های نقطه فروش

بسیاری از کسب و کارها از جاوا برای ایجاد سیستم‌های PoS استفاده می‌کنند، زیرا چنین سیستم‌هایی معمولاً نیازمند عدم وابستگی به پلتفرم و منابع گسترده هستند.

  • اپلیکیشن‌های تجاری

Murex یک برنامه مدیریت بانکی محبوب برای اتصال فرانت و بک‌اند است که به زبان جاوا نوشته شده است.

  • برنامه‌های کلان‌داده

Hadopp به زبان جاوا نوشته شده است. Scala، Kafka و Spark از JVM استفاده می‌کنند. ضمناً جاوا امکان دسترسی به هزاران کتابخانه، دیباگر و ابزارهای نظارتی کاملاً تست شده را فراهم ساخته است.

موقعیت‌های شغلی برای برنامه‌نویسان جاوا

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

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

وضعیت درآمد

بر اساس آخرین پیمایش وب‌سایت معتبر StackOverflow از میان 64000 برنامه‌نویس در سال 2018 میانگین حقوق کاربرانی که به زبان جاوا برنامه‌نویسی می‌کنند در سرتاسر دنیا برابر با 52000 دلار/سالانه بوده است. همچنین بر اساس پیمایش سال 1396 وب‌سایت jadi.net از میان 1950 برنامه‌نویس ایرانی، 1365 نفر اعلام کرده‌اند که به زبان جاوا نیز برنامه‌نویسی می‌کنند. بدین ترتیب جاوا با 70% محبوبیت، در میان توسعه‌دهندگان ایرانی نیز محبوب‌ترین زبان محسوب می‌شود. وضعیت درآمد اعلامی از سوی برنامه‌نویسان ایرانی جاوا نیز مطابق تصویر زیر بوده است:

میانگین وزنی دسته‌های مختلف نشان می‌دهد که میانگین حقوق ماهانه برنامه‌نویسان جاوا در ایران در سال 1396 برابر با 2،932،000 تومان بوده است.

جمع‌بندی زبان برنامه‌نویسی جاوا

در این بخش برخی از انتقادهایی که معمولاً به زبان جاوا وارد می‌شود را مطرح کرده و آن‌ها را بررسی می‌کنیم.

  • جاوا قدیمی است

برخی بر این باور هستند که جاوا قدیمی است و کم‌کم از روند زبان‌های محبوب خارج می‌شود. جاوا در سال 1995 متولد شده است و شاید اینک حتی از برخی از برنامه‌نویسانش نیز سن بیشتری داشته باشد؛ اما زبان‌های بسیار قدیمی‌تری نیز وجود دارند که همچنان در صدر زبان‌های محبوب برنامه‌نویسی هستند. واقعیت این است که زبان برنامه‌نویسی جاوا همچنان در صدر لیست معتبر Tiobe قرار دارد و به نظر نمی‌رسد به این زودی‌ها هم آنجا را ترک کند و در واقع به طور مداوم نیز بر محبوبیت آن افزوده می‌شود. البته زبان‌های دیگری هستند که میزان رشد محبوبیت بالاتری از جاوا دارند؛ ولی این نکته که جاوا در حال خروج از رده زبان‌های محبوب است واقعیت ندارد.

  • زبان‌های JVM بهتری مانند Scala ،Clojure و Kotlin وجود دارند

این نکته جالبی است و با توجه به این که کاتلین به سرعت در حال رشد است، شاید برای بسیاری از افراد این سؤال را مطرح کند که آیا باید شروع به یادگیری جاوا بکنند یا کاتلین را بیاموزند؟

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

دانستن جاوا یک مزیت عمده محسوب می‌شود و پایه‌ای برای زبان‌های دیگر محسوب می‌شود. در واقع JVM با وجود زبان‌هایی مانند Groovy، Scala، Clojure و Kotlin بسیار غنی‌تر شده است؛ اما همه آن‌ها علاوه بر JVM، به نوعی از جاوا الهام گرفته‌اند یا با آن رابطه دارند.

بررسی زبان‌های JVM دیگر به جز جاوا بسیار مناسب است، چون موجب بروز و ظهور ابداع‌ها و نوآوری‌ها می‌شود؛ اما این دلیل نمی‌شود که کسی یادگیری جاوا را کنار بگذارد، چون جاوا نقش بنیادینی برای همه این زبان‌ها دارد و یادگیری آن سرمایه‌گذاری ارزشمندی محسوب می‌شود.

  • آیا NodeJS برای برنامه‌نویسان فرانت‌اند بهتر نیست؟

این سؤال را می‌توان به همه توسعه‌دهنده‌های فرانت‌اند تعمیم داد و پرسید آیا ضرورتی برای یادگیری یک زبان سمت سرور مانند جاوا برای آن‌ها وجود دارد؟

NodeJS بسیار عملی و محبوب است و با آن می‌توان سرویس‌ها را با سرعت و به طرز کارآمدی ایجاد کرد. با این حال جاوا در سمت سرور گزینه تثبیت‌شده‌تری محسوب می‌شود.

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

اگر شما روی یک پروژه NodeJS با استفاده از جاوا اسکریپت هم در سمت سرور و هم کلاینت کار می‌کنید، یادگیری جاوا برای شما بسیار مناسب خواهد بود و یک سرمایه‌گذاری ارزشمند برای آینده محسوب می‌شود.

  • کار با جاوا راحت نیست

نسخه Enterprise جاوا به دلیل استفاده از XML برای پیکربندی bean شهرتی منفی کسب کرد و این شهرت منفی سال‌ها با آن همراه بوده است؛ گرچه نکته فوق دیگر صحت ندارد.

امروزه فریمورک‌های زیادی برای نوشتن پروژه‌های جاوا معرفی شده‌اند که ما نیز در بخش‌های پیشین این نوشته برخی از آن‌ها را معرفی کردیم. بدین ترتیب نوشتن کدهای جاوا دیگر کار دشواری محسوب نمی‌شود. برای مثال در قطعه کد زیر برنامه Hello World را با استفاده از Spark JAVA نوشته‌ایم:

احتمالاً شما نیز بر این باور هستید که کد فوق به هیچ وجه ناخوشایند نیست و تا حدود زیادی جالب هم به نظر می‌رسد. با استفاده از Spring Boot این کد می‌تواند از این هم جذاب‌تر نوشته شود. نکته دیگری که باید اشاره کرد این است که جاوا ابزارهای با کیفیت، مواد آمورشی و پشتیبانی زیادی دارد که باعث می‌شود حل بسیاری از این مسائل در جاوا کار آسانی باشد.

  • جاوا خیلی کُند است و حافظه زیادی مصرف می‌کند

جاوا روی ماشین مجازی جاوا (JVM) اجرا می‌شود و از این رو زمان راه‌اندازی کندتری دارد. بدیهی است که در قیاس با برنامه نوشته شده به زبان C که ماهیتی شبیه به bash دارد، زمانی که برای شروع به کار JVM مورد نیاز است بسیار طولانی محسوب می‌شود. مسلم است که اپلیکیشن‌های بسیار کوچک و سبک که به زبان بومی پلتفرم نوشته شده‌اند در رقابت با JVM برنده خواهند بود. اما آیا این دلیلی بر عدم استفاده از JVM است؟ اگر هم چنین باشد، فقط در همین مواردی که اشاره کردیم خواهد بود.

سؤال دیگر این است که پس جاوا برای چه چیزی مناسب است؟ و آیا این روزها سریع‌تر شده است؟

  • جاوا در فضای کلان‌داده استفاده گسترده‌ای دارد. برای نمونه در ابزارهایی مانند Apache Hadoop که در عمل به زبان جاوا نوشته شده است، مورد استفاده قرار می‌گیرد.
  • سازمان‌های بزرگ مالی و بانک‌های بزرگ دنیا از جاوا برای برنامه‌های بک‌اند خود بهره می‌گیرند.
  • جاوا در اپلیکیشن‌های تجاری که کارکردهایی با بسامد بالا دارند، استفاده می‌شود و در این حوزه عملکردی مشابه ++C دارد.
  • جاوا به طور گسترده روی دستگاه‌های اندرویدی استفاده می‌شود.
  • جاوا در فضای دستگاه‌های مختلف استفاده گسترده‌ای دارد.
  • البته اگر بخواهید بازی‌های ویدئویی بنویسید، شاید جاوا گزینه مناسبی نباشد؛ در واقع جاوا آن قدر کاربردهای زیادی دارد که شاید عملکرد اصلاً در اولویت اهمیت نباشد.
  • چرا باید به جای هر زبان برنامه‌نویسی دیگری جاوا آموخت؟

جاوا زبانی شگفت‌انگیز است. جاوا به عنوان محبوب‌ترین زبان برنامه‌نویسی دنیا در این لحظه یکی از مهارت‌های اصلی برای توسعه نرم‌افزار محسوب می‌شود.

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

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

یادگیری جاوا

برای یادگیری جاوا منابع آموزشی زیادی وجود دارند؛ اما در حوزه آموزش‌های زبان فارسی یکی از بهترین دوره‌های آموزشی را می‌توانید در وب‌سایت فرادرس به عنوان بزرگ‌ترین پلتفرم آموزش آنلاین ایران بیابید.

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

آموزش‌های ویدئویی جاوا

در ادامه مجموعه‌ای از آموزش‌های ویدئویی جاوا به ترتیب از سطح مقدماتی تا پیشرفته را مشاهده می‌کنید.

  • آموزش برنامه‌نویسی جاوا‎‬

آقای دکتر سید مصطفی کلامی هریس در این مجموعه آموزشی جامع به معرفی و آموزش زبان برنامه‌نویسی جاوا 8 پرداخته‌اند. در این دوره آمورشی شما ابتدا با مباحث مقدماتی زبان جاوا آشنا می‌شوید. سپس اجزای سازنده برنامه‌ها و انواع داده‌ها معرفی شده‌اند. در ادامه ساختارهای کنترلی و حلقه‌ها آموزش داده می‌شوند. همچنین مبانی برنامه‌نویسی شی‌گرا و روش نوشتن رابط‌های گرافیکی GUI مورد بحث و بررسی قرار گرفته است. در ادامه درس‌های این مجموعه آموزش ویدئویی، متدها و توابع کلاس و آرایه‌ها برسی شده‌اند. در ادامه به بررسی حالت‌های استثنا و مدیریت خطاها در جاوا پرداخته شده است و بحث وراثت مورد بررسی قرار گرفته است. مباحث چندریختی و شیوه پاسخ‌دهی به رویدادهای ماوس و صفحه‌کلید از جمله مواردی است که در ادامه درس‌های این مجموعه آموزشی بدان پرداخته شده است. در مراحل پیشرفته‌تر این دوره آموزشی با طراحی رابط‌های گرافیکی با JavaFX و همچنین طراحی پروژه‌هایی مانند برنامه محاسبه کننده مبلغ اقساط وام بانکی، پیاده‌سازی یک ماشین حساب و پیاده‌سازی بازی دوز یا TicTacToe در جاوا نیز آشنا می‌شوید. دقت کنید که برای استفاده از این دوره آموزشی نیاز به هیچ آشنایی قبلی با جاوا ندارید و با مراجعه به «آموزش برنامه‌نویسی جاوا» می‌توانید جاوا را از صفر تا صد بیاموزید.

  • آموزش پایگاه داده‌ها در جاوا

در این دوره آموزشی مهندس سید رضا هاشمیان به آموزش مبحث پایگاه داده در جاوا پرداخته‌اند.

در این دوره آموزشی شما با شی JDBC آشنا می‌شوید. در ادامه روش کار با پایگاه داده My SQL شامل مباحث اتصال به پایگاه داده، خواندن اطلاعات، نوشتن اطلاعات، به‌روزرسانی اطلاعات و حذف اطلاعات را خواهید آموخت. در ادامه روش کار با پایگاه داده Access آموزش داده شده است که مباحث فوق را این بار در مورد این پایگاه داده می‌آموزید. در نهایت در درس پایانی این دوره آموزشی روش کار با پایگاه داده SQL SERVER آموزش داده شده است. «آموزش پایگاه داده‌ها در جاوا» با زمان بالغ بر 2 ساعت، تاکنون از سوی نزدیک به 300 نفر از کاربران سایت فرادرس مورد استفاده قرار گرفته است.

  • آموزش فریمورک Spring در جاوا

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

در این آموزش ابتدا با مقدمه‌ای از فریمورک اسپرینگ آشنا می‌شوید که شامل مراحل نصب و راه‌اندازی آن است. سپس مباحث مرتبط با Inversion of Control، پیکربندی متا دیتا و همچنین چرخه حیات Bean مورد بررسی قرار می‌گیرند. در ادامه روش دسترسی به پایگاه داده در فریمورک Spring آموزش داده شده است. در نهایت درس آخر این دوره آموزشی به نوشتن یک کتابخانه با معماری Spring اختصاص دارد. «آموزش فریمورک Spring در جاوا» با مدت بالغ بر 6 ساعت تاکنون از سوی 650 نفر از کاربران فرادرس مورد استفاده قرار گرفته است.

  • آموزش کار با فایل‌ها در جاوا با پکیج Java/IO (به همراه پروژه دفترچه یادداشت)

زبان برنامه‌نویسی جاوا نیز به عنوان یک زبان برنامه‌نویسی جامع و کاربردی، کلاس‌ها و پکیج‌های متفاوتی را به منظور مدیریت و کار با فایل‌ها در نظر گرفته است که با استفاده از این پکیج‌ها می‌توان امور مورد نظر، جهت ایجاد، ذخیره و بازیابی اطلاعات داخل فایل‌ها را انجام داد. در این دوره آموزشی پکیج Java I/O که بدین منظور استفاده می‌شود آموزش داده شده است.

از جمله سرفصل‌های این دوره آموزشی در ابتدا شامل آشنایی با پکیج Java I/O است. سپس روش‌های خواندن و نوشتن یک فایل مورد بررسی قرار گرفته است. در ادامه کلاس File در این پکیج به طور دقیق‌تری بررسی شده است. در درس بعدی روش کار با فایل‌های تصادفی ارائه شده است و در نهایت درس آخر این دوره آموزشی به ذخیره و بازیابی شی‌ها در فایل اختصاص دارد. «آموزش کار با فایل‌ها در جاوا» با زمان 3 و نیم ساعت، تاکنون از سوی 144 نفر از کاربران وب‌سایت فرادرس مورد استفاده قرار گرفته است.

  • آموزش ORM هایبرنیت (Hibernate) جاوا (Java)

در این دوره آموزشی آقای مصطفی عنبرمو به بررسی ORM هایبرنت می‌پردازند. ORM به معنی «نگاشت شی –رابطه‌ای» (Object-relational mapping) به عنوان واسطی برای اتصال زبان جاوا به پایگاه‌های داده رابطه‌ای مورد استفاده قرار می‌گیرد.

در این مجموعه آموزشی که به بررسی ORM هایبرنیت پرداخته است از روش آموزش پروژه محور استفاده شده و سرفصل‌های موجود با ارائه مثال‌هایی مناسب مورد بحث و بررسی قرار گرفته است. در ابتدا یک سری مفاهیم و مقدمات جهت آشنایی با مفاهیم DBMS، SQL، ORM، JPA ارائه شده است سپس خود ORM هایبرنت معرفی شده است. در ادامه روش نصب و راه‌اندازی این ORM آموزش داده شده است. در ادامه مراحل پیکربندی هایبرنت به تفصیل مورد بررسی قرار گرفته است. انواع نگاشت‌های شی-رابطه‌ای موضوع درس بعدی این دوره آموزشی محسوب می‌شود. در ادامه عملیات CRUD با استفاده از هایبرنت آموزش داده شده است. مباحث وراثت و کش کردن جزو سرفصل‌هایی است که در درس‌های پیشرفته این دوره آموزش داده می‌شود. سپس بحث ادغام هایبرنت با فریمورک Spring مورد بررسی قرار گرفته است. در انتهای مجموعه «آموزش ORM هایبرنیت» نیز یک سیستم اطلاعاتی برای جمع‌بندی مطالب با فنّاوری Hibernate پیاده‌سازی شده است.

  • آموزش پروژه محور جاوا – تولید QR code و ایجاد و اسکن بارکد (Barcode)

یکی از بهترین روش‌های یادگیری هر زبان برنامه‌نویسی روش آموزش پروژه محور است و زبان برنامه‌نویسی جاوا نیز از این قاعده مستثنی نیست.

در این دوره آموزشی ابتدا به معرفی فناوری بارکد و انواع مختلف آن پرداخته شده است. در ادامه QR CODE به عنوان نسل جدید بارکدها معرفی شده و کاربردهای آن مورد بررسی قرار گرفته است. در ادامه یک پروژه جاوا در محیط NetBeans ایجاد می‌شود و با افزودن کتابخانه‌های موردنیاز کدنویسی پروژه اسکن بارکد به زبان جاوا صورت می‌پذیرد. بدین ترتیب در این «آموزش پروژه محور جاوا» با استفاده از یک پروژه نسبتاً ساده روش کدنویسی یک پروژه به زبان جاوا از صفر تا صد آموزش داده شده است.

سخن پایانی

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

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

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

آیا این مطلب برای شما مفید بود؟

یک نظر ثبت شده در “زبان برنامه نویسی جاوا (Java) — از صفر تا صد

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برچسب‌ها