با طی مراحل زیر میتوانید یک پروژه جدید جاوا ایجاد کنید:
1- بر روی File > New > Java Project کلیک کنید تا ویزارد یک پروژه جدید جاوا آغاز شود. تصویر مربوطه در شکل زیر قابلمشاهده است:
ویزارد پروژه جدید جاوا
2- نام Tutorial را برای پروژه وارد کنید و از فضای کاری که در زمان باز کردن ایکلیپس معرفی کردید استفاده کنید.
3- JDKی که استفاده میکنید را تأیید کنید.
4- بر روی Finish کلیک کنید و تنظیمات پروژه را تأیید کنید تا پروژه ایجاد شود.
اینک یک پروژه جاوا و پوشه منبع در ایکلیپس ایجاد کردهاید. محیط توسعه آماده کار است. با این حال داشتن درکی از پارادایم شیءگرایی OOP که در بخش سوم به آن میپردازیم ضروری است.
بخش مقدمه ی آموزش برنامه نویسی جاوا امروز به پایان می رسد .
من از فردا بخش اول آموزش خودم را آغاز می کنم .
توجه : آموزش های من بصورت مجله هستند .
توجه : برای دریافت آموزش های ویدیویی می توانید آنها را خریداری کنید .
توجه : برای خریداری و دریافت لینک دانلود فیلم ها به صورت آنی به ایمیل من پیام بفرستید .
در این بخش برخی از انتقادهایی که معمولاً به زبان جاوا وارد میشود را مطرح کرده و آنها را بررسی میکنیم.
برخی بر این باور هستند که جاوا قدیمی است و کمکم از روند زبانهای محبوب خارج میشود. جاوا در سال 1995 متولد شده است و شاید اینک حتی از برخی از برنامهنویسانش نیز سن بیشتری داشته باشد؛ اما زبانهای بسیار قدیمیتری نیز وجود دارند که همچنان در صدر زبانهای محبوب برنامهنویسی هستند. واقعیت این است که زبان برنامهنویسی جاوا همچنان در صدر لیست معتبر Tiobe قرار دارد و به نظر نمیرسد به این زودیها هم آنجا را ترک کند و در واقع به طور مداوم نیز بر محبوبیت آن افزوده میشود. البته زبانهای دیگری هستند که میزان رشد محبوبیت بالاتری از جاوا دارند؛ ولی این نکته که جاوا در حال خروج از رده زبانهای محبوب است واقعیت ندارد.
این نکته جالبی است و با توجه به این که کاتلین به سرعت در حال رشد است، شاید برای بسیاری از افراد این سؤال را مطرح کند که آیا باید شروع به یادگیری جاوا بکنند یا کاتلین را بیاموزند؟
پاسخ این است که یادگیری جاوا در صورتی که بخواهید یک توسعهدهنده JVM باشید، یک ضرورت محسوب میشود. البته شما میتوانید زبانهای دیگری که از JVM استفاده میکنند را نیز بیاموزید؛ اما در صورتی که جاوا را یاد نگرفته باشید، چیز مهمی را از دست دادهاید. اغلب این زبانها به طور گستردهای به کتابخانههای جاوا اتکا دارند و عدم یادگیری جاوا به مهارتهای ما لطمه خواهد زد.
دانستن جاوا یک مزیت عمده محسوب میشود و پایهای برای زبانهای دیگر محسوب میشود. در واقع JVM با وجود زبانهایی مانند Groovy، Scala، Clojure و Kotlin بسیار غنیتر شده است؛ اما همه آنها علاوه بر JVM، به نوعی از جاوا الهام گرفتهاند یا با آن رابطه دارند.
بررسی زبانهای JVM دیگر به جز جاوا بسیار مناسب است، چون موجب بروز و ظهور ابداعها و نوآوریها میشود؛ اما این دلیل نمیشود که کسی یادگیری جاوا را کنار بگذارد، چون جاوا نقش بنیادینی برای همه این زبانها دارد و یادگیری آن سرمایهگذاری ارزشمندی محسوب میشود.
این سؤال را میتوان به همه توسعهدهندههای فرانتاند تعمیم داد و پرسید آیا ضرورتی برای یادگیری یک زبان سمت سرور مانند جاوا برای آنها وجود دارد؟
NodeJS بسیار عملی و محبوب است و با آن میتوان سرویسها را با سرعت و به طرز کارآمدی ایجاد کرد. با این حال جاوا در سمت سرور گزینه تثبیتشدهتری محسوب میشود.
پاسخ به سؤال فوق تا حدودی زیادی به شخص برنامهنویس بستگی دارد که آیا میخواهد برای همیشه یک توسعهدهنده فرانتاند بماند و یا ترجیح میدهد با برنامهنویسی سمت سرور نیز آشنا شود. کدهای سمت سرور زیادی با جاوا نوشته شدهاند و حتی اگر کسی قصد نداشته باشد خودش کد جاوا بنویسد؛ اگر به یادگیری جاوا نپردازد از خواندن این کدها نیز محروم خواهد شد.
اگر شما روی یک پروژه NodeJS با استفاده از جاوا اسکریپت هم در سمت سرور و هم کلاینت کار میکنید، یادگیری جاوا برای شما بسیار مناسب خواهد بود و یک سرمایهگذاری ارزشمند برای آینده محسوب میشود.
نسخه Enterprise جاوا به دلیل استفاده از XML برای پیکربندی bean شهرتی منفی کسب کرد و این شهرت منفی سالها با آن همراه بوده است؛ گرچه نکته فوق دیگر صحت ندارد.
امروزه فریمورکهای زیادی برای نوشتن پروژههای جاوا معرفی شدهاند که ما نیز در بخشهای پیشین این نوشته برخی از آنها را معرفی کردیم.
جاوا روی ماشین مجازی جاوا (JVM) اجرا میشود و از این رو زمان راهاندازی کندتری دارد. بدیهی است که در قیاس با برنامه نوشته شده به زبان C که ماهیتی شبیه به bash دارد، زمانی که برای شروع به کار JVM مورد نیاز است بسیار طولانی محسوب میشود. مسلم است که اپلیکیشنهای بسیار کوچک و سبک که به زبان بومی پلتفرم نوشته شدهاند در رقابت با JVM برنده خواهند بود. اما آیا این دلیلی بر عدم استفاده از JVM است؟ اگر هم چنین باشد، فقط در همین مواردی که اشاره کردیم خواهد بود.
سؤال دیگر این است که پس جاوا برای چه چیزی مناسب است؟ و آیا این روزها سریعتر شده است؟
جاوا زبانی شگفتانگیز است. جاوا به عنوان محبوبترین زبان برنامهنویسی دنیا در این لحظه یکی از مهارتهای اصلی برای توسعه نرمافزار محسوب میشود.
البته شما مجبور نیستید به جای هر زبان دیگری جاوا بیاموزید. برای اغلب افراد تبدیل شدن به یک برنامهنویس چه به صورت سرگرمی و چه حرفهای ماهها زمان میبرد. بنابراین نباید خود را به جاوا محدود کنید. اما عدم یادگیری جاوا باعث میشود از جامعه عظیم و دینامیک آن محروم شوید.
از طرف دیگر فرایند توسعه جاوا نیز سرعت بیشتری یافته است و انتشار نسخههای اصلی از سالی یک بار به سالی دو بار افزایش یافته است. در نهایت باید اشاره کرد جاوا امروزه بیدلیل به عنوان محبوبترین زبان برنامهنویسی دنیا مطرح نشده است. دلیل این محبوبیت، سادگی، مدرن بودن، سریع بودن و فرایند تکامل مداوم آن است. همچنین کتابخانههای بیشماری هستند که به نوشتن کدهای جذاب کمک میکنند و دسترسی گستردهای به منابع آموزشی و کمکی وجود دارد. در ادامه برخی از دورههایی که برای یادگیری جاوا میتوانید مورد استفاده قرار دهید معرفی میکنیم.
یک اصل مهم در مورد یادگیری زبانهای برنامهنویسی وجود دارد که هرگز نباید فراموش کرد، و آن این است که یادگیری یک زبان برنامهنویسی خاص مانند جاوا، صرفاً یادگیری آن زبان نیست؛ بلکه بدین ترتیب شما با همه زبانهای دیگر برنامهنویسی نیز آشنا میشوید. بنابراین جاوا به عنوان یک زبان با مشخصاتی که در بخشهای پیشین اشاره کردیم یک زبان خوب برای شروع یادگیری برنامهنویسی محسوب میشود. کسانی که جاوا را به خوبی یاد میگیرند، میتوانند هر زبان دیگری شامل C#، پایتون و حتی روبی را نیز به سادگی بیاموزند. بنابراین باید این نکته را به خاطر داشته باشید که یادگیری جاوا به عنوان زبان برنامهنویسی شماره یک دنیا در طی قریب به دو دهه اخیر ضرورتی فراتر از یافتن شغل مرتبط دارد.
برنامهنویسان جاوا به طور عمده از جاوا برای طراحی اپلیکیشنها و وبسایتهایی استفاده میکنند که اجزای دینامیک دارند. برخی از آنها روی اپلیکیشنها و برخی دیگر روی وبسایتها کار میکنند اما در هر صورت اغلب توسعهدهندگان جاوا باید با مفهوم پروژه بودن کارشان آشنا باشند.
بر اساس آخرین پیمایش وبسایت معتبر StackOverflow از میان 64000 برنامهنویس در سال 2018 میانگین حقوق کاربرانی که به زبان جاوا برنامهنویسی میکنند در سرتاسر دنیا برابر با 52000 دلار/سالانه بوده است. همچنین بر اساس پیمایش سال 1396 وبسایت jadi.net از میان 1950 برنامهنویس ایرانی، 1365 نفر اعلام کردهاند که به زبان جاوا نیز برنامهنویسی میکنند. بدین ترتیب جاوا با 70% محبوبیت، در میان توسعهدهندگان ایرانی نیز محبوبترین زبان محسوب میشود. وضعیت درآمد اعلامی از سوی برنامهنویسان ایرانی جاوا نیز مطابق تصویر زیر بوده است:
میانگین وزنی دستههای مختلف نشان میدهد که میانگین حقوق ماهانه برنامهنویسان جاوا در ایران در سال 1396 برابر با 2،932،000 تومان بوده است.
اغلب سازمانها از جاوا به روشهای مختلف بهره میگیرند. گستره وسیع استفاده از جاوا باعث شده است که این کاربردها تقریباً از چشم پنهان بمانند و به همین دلیل غالباً پرسیده میشود که از جاوا در کجا میتوان استفاده کرد. در ادامه برخی از زمینههای کاربرد جاوا را فهرست کردهایم:
با وجود رشد گسترده کاتلین (Kotlin)؛ جاوا همچنان زبان پیشفرض برای اپلیکیشنهای اندرویدی محسوب میشود که به طور خودکار جمع عظیمی از توسعهدهندگان جاوا را به برنامهنویسان اندروید تبدیل کرده است. با این که اندروید از Android SDK به جای JDK استفاده میکند؛ اما کد آن همچنان به صورت جاوا نوشته میشود.
علاوه بر Hadoop و Apache Storm، جاوا برای ایجاد Eclipse، OpenOffice، Gmail، Atlassian و بسیاری از موارد دیگر مورد استفاده قرار گرفته است.
جاوا با توجه به این که یکی از پر تقاضاترین مهارتهای زبان در بخش مالی محسوب میشود، هم در سمت سرور و هم کلاینت برای ساخت وبسایتهای مطمئن، سریع و ساده مورد استفاده قرار میگیرد. از جاوا به عنوان زبان برنامهنویسی مناسب برای شبیهسازی و مدلسازی دادهها نیز یاد میشود.
بسیاری از کسب و کارها از جاوا برای ایجاد سیستمهای PoS استفاده میکنند، زیرا چنین سیستمهایی معمولاً نیازمند عدم وابستگی به پلتفرم و منابع گسترده هستند.
Murex یک برنامه مدیریت بانکی محبوب برای اتصال فرانت و بکاند است که به زبان جاوا نوشته شده است.
Hadopp به زبان جاوا نوشته شده است. Scala، Kafka و Spark از JVM استفاده میکنند. ضمناً جاوا امکان دسترسی به هزاران کتابخانه، دیباگر و ابزارهای نظارتی کاملاً تست شده را فراهم ساخته است.
با این که جاوا دیگر تنها زبانی نیست که برای توسعه اپلیکیشنهای اندرویدی استفاده میشود؛ و دیگر به هیچ وجه تنها گزینه برای برنامهنویسی وب محسوب نمیشود؛ اما جاوا همچنان در این عرصهها حضور دارد. همه این توفیق را نمیتوان صرفاً به قدمت آن نسبت داد، فلذا در ادامه برخی از مزیتهای جاوا را بررسی میکنیم
جاوا، برنامهنویسی شیگرا (Object-oriented) را کاملاً پذیرفته است. منظور از برنامهنویسی شیگرا سبکی از کدنویسی است که در آن نه تنها انواع داده و ساختمان داده تعریف میشوند؛ بلکه مجموعه توابع مورد استفاده این دادهها نیز تعریف میشوند. بدین ترتیب ساختمان داده تبدیل به یک شی میشود که میتوان آن را برای ایجاد روابطی بین شیهای مختلف دستکاری کرد.
برخلاف رویکرد متضادش یعنی برنامهنویسی رویهای (procedural programming) که در آن یک توالی از دستورالعملها با استفاده از متغیرها و توابع استفاده میشوند؛ در برنامهنویسی شیگرا امکان گروهبندی این متغیرها و توزیع بر اساس زمینه ارائه شده است و از این رو میتوان آنها را بر اساس زمینههایی که هر شی خاص دارد، نامگذاری کرده و مورد ارجاع قرار داد.
جاوا یک زبان سطح بالا است، یعنی شباهت زیادی با زبان انسان دارد. برخلاف زبانهای سطح پایین که به کد ماشینی شبیه هستند، زبانهای سطح بالا باید با استفاده از کامپایلرها و مفسرها تبدیل شوند. این فرایند سادهسازی موجب میشود که نوشتن، خواندن و نگهداری زبان آسانتر شود.
جاوا دستور زبان (به معنی قواعد و ساختارهای مورد استفاده از سوی برنامهنویسان) خود را از ++C اخذ کرده است و به همین دلیل ساختاری شبیه به کد C دارد. با این وجود بسیار سادهتر است و به افراد مبتدی امکان یادگیری سریعتر فناوری و کدنویسی مؤثرتر برای رسیدن به نتایج مشخص را ارائه میکند.
جاوا ممکن است به قدر پایتون برای افراد مبتدی مطلوب نباشد؛ اما هر توسعهدهندهای با درکی مقدماتی از فریمورکها، بستهها، کلاسها و اشیا میتواند الگوی آن را خیلی زود متوجه شود. جاوا سرراست و دارای نوعهای کاملاً تعریف شده است که انتظارات کاملاً مشخصی دارد و بدین سبب باعث میشود خیلی زود تفکر شما در مسیر صحیح قرار گیرد. علاوه بر آن راهنماها و دورههای آموزشی رایگان بسیار زیادی روی اینترنت وجود دارد که به افراد مبتدی کمک میکند جاوا را بسیار سریع بیاموزند.
اپلیکیشنهای سازمانی (Enterprise) بزرگترین دارایی جاوا هستند. این روند به دهه 90 میلادی باز میگردد که سازمانها شروع به جستجوی ابزارهای برنامهنویسی مستحکمی کردند که از جنس C نباشند. جاوا از کتابخانههای زیادی پشتیبانی میکند که بلوکهای سازنده هر سیستم سازمانی هستند و این مسئله به توسعهدهندگان کمک کرد تا هر کارکردی که یک شرکت لازم داشت را با استفاده از جاوا بنویسند. البته افراد با استعداد زیادی که جاوا میدانستند نیز بیتأثیر نبود. جاوا زبانی است که در اغلب مدارس و دانشگاهها به عنوان یک مقدمه برای برنامهنویسی رایانهای محسوب میشود. علاوه بر این قابلیتهای یکپارچه شدن جاوا بسیار وسیع است، چون اغلب ارائهدهندههای خدمات میزبانی از جاوا پشتیبانی میکنند. نکته آخر این که نگهداری جاوا نسبتاً ارزان است، چون به سختافزار خاصی وابسته نیست و میتواند روی سرورهایی از هر نوع اجرا شود.
ممکن است شنیده باشید که جاوا زبان برنامهنویسی امنی است؛ اما این گزاره کاملاً صحیح نیست. خود زبان نمیتواند در برابر آسیبپذیریها حفاظتی ایجاد کند، بلکه برخی از ویژگیهای آن هستند که میتوانند شما را در برابر رخنههای امنیتی رایج محافظت کنند. نخستین ویژگی در قیاس با C این است که جاوا از اشارهگرها استفاده نمیکند. اشارهگر شیئی است که آدرس حافظه یک مقدار دیگر را نگهداری میکند و موجب میشود که دسترسی ناخواستهای به حافظه ایجاد شود. ویژگی دوم است که جاوا یک ابزار مدیریت امنیت دارد که نوعی ت امنیتی برای هر اپلیکیشن است و در آن قواعد دسترسی خاصی تعریف میشود. بدین ترتیب امکان اجرای اپلیکیشنهای جاوا درون یک sandbox وجود دارد و بدین ترتیب ریسک آسیب حذف میشود.
شعار یک بار بنویس، همه جا اجرا کن» به اختصار WORA یک عبارت مشهور برنامهنویسی است که شرکت سان مایکروسیستمز معرفی کرد تا قابلیتهای چند پلتفرمی جاوا را توصیف کند. معنی این شعار آن است که میتوان برنامه جاوا را برای مثال روی ویندوز نوشت، آن را به بایتکد تبدیل کرد و این اپلیکیشن را روی هر پلتفرم دیگری که از ماشین مجازی جاوا (JVM) پشتیبانی میکند، اجرا کرد. در این حالت JVM یک سطح تجرید بین کد و سختافزار ایجاد میکند.
همه سیستمهای عامل عمده شامل ویندوز، مکاواس، و لینوکس از JVM پشتیبانی میکنند. به جز در مواردی که برنامه شما تکیه زیادی روی ویژگیهای خاص پلتفرم و UI داشته باشد، میتوانید اگر چه نه همه؛ اما بخش عمدهای از بایتکد را روی همه این سیستمهای عامل به اجرا بگذارید.
جاوا به عنوان یک زبان توزیع یافته طراحی شده است، یعنی سازوکاری درونی برای اشتراک دادهها و برنامهها میان چند رایانه برای بهبود عملکرد و کارایی دارد.
برخلاف زبانهای دیگر که باید از API های بیرونی برای توزیع استفاده شود، جاوا این فناوری را در هسته خود ارائه کرده است. روش خاص جاوا برای محاسبات توزیع یافته به نام فراخوانی متد از راه دور یا Remote Method Invocation» (RMO) نامیده میشود. با استفاده از RMI میتوان همه مزیتهای جاوا مانند امنیت، عدم وابستگی به پلتفرم، و برنامهنویسی شیگرا را در محاسبات توزیع یافته وارد کرد. علاوه بر این جاوا از برنامهنویسی Socket و روش توزیع CORBA برای اشتراک شیها بین برنامههای نوشته شده به زبانهای مختلف، پشتیبانی میکند.
توسعهدهندههای جاوا به لطف مدیریت حافظه خودکار آن (AMM) که در زبان برنامهنویسی سوئیفت (Swift) نیز استفاده میشود، نباید نگران نوشتن دستی کد برای وظایف مدیریت حافظه باشند. ضمناً بازیافت حافظه (garbage collection) اپلیکیشنی است که به طور خودکار تخصیص و آزادسازی حافظه را مدیریت میکند. شاید بپرسید بازیافت حافظه دقیقاً به چه معنا است؟
کارایی یک برنامه به طور مستقیم با حافظه ارتباط دارد و حافظه محدود است. هنگام استفاده از زبانهای برنامهنویسی با مدیریت دستی حافظه، توسعهدهندگان با ریسک فراموش کردن تخصیص حافظه مواجه هستند که منجر به افزایش استفاده از حافظه و کند شدن برنامه و سیستم میشود. بازیاب حافظه (garbage collector) میتواند شیهایی که دیگر از سوی برنامه شما ارجاعی ندارند را شناسایی کرده و حذفشان کند. علیرغم این واقعیت که این وضعیت روی جنبه CPU برنامه تأثیر منفی میگذارد؛ اما میتوان با بهینهسازی یا تنظیم دقیق این تأثر منفی را کاهش داده یا به کلی از آن جلوگیری کرد.
نخ (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» به جای عملگرهای &&»، ||» و !» در جاوا به عنوان عملگر استفاده میکند. به طور کلی پایتون تشریفات کمتری مانند پرانتز و آکولاد دارد.
جاوا یک زبان برنامهنویسی چندمنظوره و شیگرا است که تا حدودی زیادی به C و ++C شباهت دارد؛ اما استفاده از آن آسانتر است و امکان ساخت برنامههایی قدرتمند با آن وجود دارد. البته تعریفی که شرکت سان مایکروسیستمز در سال 2000 ارائه کرده است، شاید از تعریف فوق گویاتر باشد .
جاوا زبان رایانه ای ساده ، شی گرا ، مناسب شبکه ، تفسیر نشدنی ، مستحکم ، امن ، فارغ از معماری ، پرتابل ، با عملکرد بالا ، چندنخی و دینامیک است .
در ادامه هر یک از خصوصیات فوق را به طرز جداگانهای مورد بررسی قرار میدهیم:
جاوا در ابتدا بر اساس زبانهای C و ++C و با حذف برخی ویژگیهایی که قابلیت سردرگم کننده داشتند مدلسازی شد. از جمله این ویژگیها میتوان به اشارهگرها، پیادهسازی چندباره وراثت و بارگذاری بیش از حد عملگرها اشاره کرد که در جاوا حذف شدند. یکی از ویژگیهایی که در C++/C وجود نداشت؛ اما جزو ویژگیهای اساسی جاوا به شمار میآید، امکان بازیافت حافظه (garbage-collection) است که به طور خودکار اشیا و آرایههای بی استفاده را حذف میکند.
اشاره کرد که در جاوا حذف شدند. یکی از ویژگیهایی که در 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) استفاده میکند یعنی دستورالعملهای بایتکد تفسیر شده را تحلیل میکند و دستورهای تفسیر شده با بسامد بالا را به دستورالعملهای خاص پلتفرم کامپایل میکند. تلاشهای بعدی برای تفسیر این دستورالعملهای بایتکد موجب اجرای همان دستورالعملهای خاص پلتفرم میشود و به این ترتیب عملکرد نرمافزار را ارتقا میبخشد.
جاوا برای بهبود عملکرد برنامههایی که چندین وظیفه را به یک باره اجرا میکنند، از مفهوم اجرای چند نخی پشتیبانی میکند. برای نمونه برنامهای که رابط گرافیکی کاربر (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 پلتفرم اصلی جاوا است و پلتفرمهای دیگر بر مبنای آن طراحی شدهاند.
جاوا هم یک زبان برنامهنویسی و هم پلتفرمی برای اجرای کد جاوای کامپایل شده است. این پلتفرم به طور عمده شامل JVM است؛ اما محیط اجرایی را نیز شامل میشود که از اجرای JVM روی پلتفرمهای زیرساختی بومی پشتیبانی میکند. JVM خود شامل چند جزء برای بارگذاری، تأیید و اجرای کد جاوا است. در تصویر زیر شیوه اجرای یک کد جاوا روی این پلتفرم را مشاهده میکنید.
در بخش فوقانی نمودار فوق یک سری از فایلهای کلاس برنامه را مشاهده میکنید که یکی از آنها به نام فایل کلاس اصلی نامیده شده است. برنامه جاوا دست کم باید یک فایل کلاس اصلی داشته باشد که نخستین کلاسی است که بارگذاری، تأیید و اجرا خواهد شد.
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 از الگوی طراحی نرمافزار MVC یعنی مدل-نما-کنترلر» (Model-View-Controller) استفاده میکند. درک طراحی این فریمورک آسان است، چون به هیچ کتابخانه شخص ثالث وابسته نیست و لایههای زیادی را نیز شامل نمیشود. blade بر مبنای جاوا 8 طراحیشده است و یک وبسرور Netty و موتور templete نیز در داخل فریمورک جاسازی شده است. این فریمورک اثرات جانبی کمی دارد و کل کد منبع آن کمتر از 500 کیلوبایت است.
شما با استفاده از blade به رابط مسیریابی به سبک RESTful دسترسی مییابید و میتوانید اپلیکیشن خود را به عنوان یک پروژه movn ابتدایی توزیع کنید. این فریمورک ویژگیهای امنیتی داخلی دارد که برای مثال از دفاع CSRF و XSS استفاده میکند. blade فریمورک کارآمدی است چون از افزونهها و منابع webjar پشتیبانی میکند. مستندات روی سایت اصلی (https://lets-blade.com) به زبان چینی است. با این حال روی ریپو گیتهاب (https://github.com/lets-blade/blade) مستندات به زبان انگلیسی نیز وجود دارد.
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 یک زبان شیگرا برای پلتفرم جاوا است که به منظور بهبود بهرهوری توسعهدهندگان طراحی شده است. دستور زبان آن با جاوا مطابقت دارد و به بایتکد 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 که گیویت» نیز تلفظ میشود، یک فریمورک پایدار و با نگهداری مناسب جاوا است. برای بیان این پایداری چیزی بهتر از این نیست که این فریمورک در چند مورد از محصولهای گوگل مانند AdWords، AdSense، Blogger و Google Wallet مورد استفاده قرار میگیرد. کیت ابزار وب گوگل یک وبسایت خاص است که همه ابزارها و منابعی مانند راهنماها، یک اپلیکیشن اولیه و افزونه ایکلیپس که ممکن است نیاز داشته باشید را ارائه میکند.
نکته جالب در مورد GWT این است که با آن میتوانید اپلیکیشنهای کاملاً مبتنی بر مرورگر را بدون تخصصی در فناوریهای فرانتاند مانند بهینهسازی جاوا اسکریپت یا طراحی واکنشگرا بنویسید. بدین ترتیب میتوانید از GWT به جای فریمورکهای سمت کلاینت جاوا اسکریپت که گاهی با سرعت وارد بازار شده و با همان سرعت آن را ترک میکنند، استفاده کنید. GWT ویژگیهای پیشرفته زیادی مانند بینالمللی سازی، پرتابل بودن میان مرورگرهای مختلف، تجرید UI، بوکمارک کردن، و مدیریت تاریخچه دارد.
Hibernate یک فریمورک نگاشت شی -رابطهای است که ارتباط بهتر بین زبان برنامهنویسی جاوا و سیستمهای مدیریت پایگاه داده رابطهای (RDBMS) را ارائه میکند.
هنگامی که با زبانهای برنامهنویسی شیگرایی مانند جاوا کار میکنیم، با مشکلی به نام عدم مطابقت امپدانس شی-رابطهای (که در برخی موارد پارادایم عدم مطابقت نیز نامیده میشود) مواجه میشویم. زبانهای شیگرا و RDBMS ها دادهها را به طرز متفاوتی مدیریت میکنند که این امر میتواند منجر به مسائل عدم تطبیق شود. با این که زبانهای شیگرا دادهها را به شکل سلسله مراتبی از اشیا سازماندهی میکنند؛ اما پایگاههای داده رابطهای دادهها را در قالب جدول ارائه میکنند. برای نمونه یکی از مسائل عدم مطابقت هنگامی روی میدهد که مدل شی کلاسهایی بیش از تعداد جدولهای موجود در پایگاههای داده رابطهای داشته باشد.
Hibernate فریمورکی ارائه کرده است که بر مسائل عدم مطابقت جاوا فائق میآید. منظور از ارائه Hibernate دستیابی به ثبات (Persistence) بوده است، یعنی دادههایی که توسط اپلیکیشن تولید یا استفاده میشوند باید عمری بلندتر از پردازشی که آنها را تولید کرده است داشته باشند. با این که Hibernate برای پایگاههای داده رابطهای ساخته شده است؛ اما نسخه جدیدتر آن از انبارهای دادهای NoSQL نیز پشتیبانی میکند. همچنین ابزارهای توسعهای خوبی مانند ویرایشگر نگاشت، کنسول Hibernate و یک ابزار جالب مهندسی مع پایگاه داده دارد.
JavaServer Faces یا به اختصار JSF از سوی اوراکل به عنوان یک شاخص برای ساخت رابطهای کاربر برای وب اپلیکیشنهای جاوا ارائه شده است. این استاندارد رسمی برای ابتکار پردازش جامعه جاوا (JCP) نیز محسوب میشود.
نسخه اول JavaServer Faces در سال 2004 منتشر شده است و از این رو فریمورک کاملاً پایداری محسوب میشود. این فریمورک از الگوی طراحی نرمافزار MVC پشتیبانی میکند و یک معماری مبتنی بر مولفه دارد. با استفاده از JavaServer Faces میتوان رابطهای کاربری برای مولفههای قابل استفاده مجدد ساخت، وضعیت مولفهها را مدیریت کرد، آنها را به منابع داده متصل ساخت و رویدادهای ایجاد شده از سوی کاربر را به شنوندههای رویداد در سمت سرور اتصال داد.
سیستم قالببندی پیشفرض JSF به صورت Facelet است که به طور مشخص برای این پروژه ساخته شده است. با استفاده از Facelet میتوان از XML به جای جاوا برای مدیریت view استفاده کرد. با این حال، میتوان view ها را با استفاده از فناوریهای دیگر مانند XUL (زبان رابط کاربری XML) و جاوای خالی نیز ساخت. وب اپلیکیشنهای ایجاد شده از سوی JavaServer Faces پرتابل هستند و روی سرورهای مختلف اپلیکیشن JAVA EE نیز کار میکنند.
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 استفاده میکنند.
IDE ایکلیپس بر روی JDK به عنوان یک انتزاع مفید نصب میشود، اما هنوز نیاز است که به JDK و ابزارهای مختلف آن دسترسی داشته باشد. پیش از آنکه بتوانید از ایکلیپس برای نوشتن کد جاوا استفاده کنید باید مکان JDK را به آن بگویید.
برای راهاندازی محیط توسعه ایکلیپس:
1- برنامه ایکلیپس را باز کنید.
2- وقتی در مورد فضای کاری سؤالی پرسیده میشود مقدار پیشفرض (default) را انتخاب کنید.
3- پنجره خوشامدگویی را ببندید (این پنجره هر بار که یک فضای کاری جدید باز میکنید دیده میشود. با برداشتن تیک Always show Welcome at start up» میتوانید این حالت را غیرفعال کنید.)
4- تنظیمات Preferences > Java > Installed JREs را انتخاب کنید. شکل زیر این تنظیمات را در پنجره راهاندازی ایکلیپس برای JRE نمایش میدهد.
پیکربندی JDK برای استفاده ایکلیپس
مطمئن شوید که ایکلیپس مسیر JRE که همراه با JDK دانلود کردهاید را میشناسد. اگر ایکلیپس بهطور خودکار JDL که نصب شده است را تشخیص نداد بر روی Add کلیک کنید و سپس در صفحه بعدی بر روی Standard VM و سپس Next کلیک کنید.
6- پوشه اصلی JDK را تعیین کنید و بر روی Finish کلیک کنید.
7- بررسی کنید JDKی که میخواستید انتخاب شده است و بر روی OK کلیک کنید.
اینک ایکلیپس نصب شده است و آماده ایجاد پروژه، کامپایل و اجرای کد جاوا است. در بخش بعدی با ایکلیپس بیشتر آشنا میشویم.
برای دانلود و نصب ایکلیپس مراحل زیر را باید طی کنید:
1- به صفحه
دانلود بسته های ایکلیپس مراجعه کنید.
2- بر روی Eclipse IDE for Java Developers کلیک کنید.
3- در بخش لینکهای دانلود در سمت راست، پلتفرم موردنظر خود را انتخاب کنید (ممکن است وبسایت قبلاً سیستمعامل شما را تشخیص داده باشد.)
4- بر روی سروری که میخواهید از آن دانلود کنید کلیک کنید و سپس فایل را بر روی هارددیسک ذخیره کنید.
5- زمانی که دانلود پایان یافت، فایل را باز کنید و برنامه نصب را اجرا کنید.
مراحل زیر را برای دانلود و نصب JDK دنبال کنید:
1- به وبسایت
Java SE Downloads بروید و بر روی Java Platform کلیک کنید تا صفحه دانلود آخرین نسخه JDK ظاهر شود.
2- شرایط استفاده را تأیید کنید.
3- نسخهای را که با سیستمعامل و معماری تراشه پردازنده شما هماهنگ است، انتخاب کنید.
JDK شامل مجموعهای از ابزارهای خط فرمان برای کامپایل و اجرای کد جاوا است. JDK حاوی نسخه کاملی از JRE است که میتوانید از این ابزارها برای توسعه برنامههای خود استفاده کنید. اما اغلب توسعهدهندگان ترجیح میدهند که از کارکردهای بیشتر یک IDE که شامل مدیریت وظایف و رابط بصری میشود استفاده نمایند.
ایکلیپس یک IDE اوپنسورس رایج برای توسعه جاواست. ایکلیپس وظایف اولیه مانند کامپایل کردن و دیباگ کد را انجام میدهد، بنابراین میتوانید بر روی نوشتن و تست کد متمرکز شوید. به علاوه میتوانید از ایکلیپس برای سازماندهی فایلهای سورسکد در پروژهها، کامپایل و تست آن پروژهها، ذخیره فایلهای پروژه در هر تعداد از مخازن(ریپازیتوری)های سورس استفاده کنید. برای اینکه بتوانید از ایکلیپس برای توسعه جاوا استفاده کنید باید قبلاً JDK را نصب کرده باشید. اگر یکی از نسخههای ایکلیپس را دانلود کردهاید، JDK را درون خود دارد.
بخش مقدمه ی آموزش برنامه نویسی جاوا امروز به پایان می رسد .
من از فردا بخش اول آموزش خودم را آغاز می کنم .
توجه : آموزش های من بصورت مجله هستند .
توجه : برای دریافت آموزش های ویدیویی می توانید آنها را خریداری کنید .
توجه : برای خریداری و دریافت لینک دانلود فیلم ها به صورت آنی دو روش وجود دارد :
1-از بخش منو به صفحه تماس با ما مراجعه کنید و از آنجا درخواست بدهید .
2-به ایمیل من پیام بفرستید .
درباره این سایت