1. مقدمه
1.1. Contexte
PDF در سند را میتوان در |ICI| یافت.
نمونههای موجود در سند در |ICI| در دسترس هستند.
این سند هم بهعنوان یک دوره و هم بهعنوان یک TD دانشگاهی (مأموریت تحت نظارت) عمل میکند. این سند برای مبتدیان در نظر گرفته شده است. این سند از منابع زیر بهره میبرد:
مراجع:
ما به این مراجع به ترتیب [ref1] و [ref2] خواهیم گفت. منبع [ref1] مربوط به سال (۲۰۰۲) است اما برای این سند کافی است، جایی که صرفاً به دلیل ارائه نحو زبان جاوا و عملیات پایهای آن استفاده میشود. محتوای باقیمانده مورد نیاز برای تولید TD در این سند در فصلهایی با عنوان [Cours] ارائه شده است. این فصلها مستقیماً از [ref2] (۲۰۱۵) گرفته شده و در برخی موارد سادهسازی شدهاند.
هدف این سند آموزش زبان جاوا از دیدگاه حرفهای است. به همین دلیل، ما به شدت بر فریمورک Spring [http://spring.io/] تکیه میکنیم، که در توسعه JEE (نسخه سازمانی جاوا) به طور گسترده استفاده میشود. منطقی است که این دوره با یک دوره JEE دنبال شود. این امر در ایستیا (دانشگاه آنژ) صادق است. JEE در حال حاضر (نوامبر ۲۰۱۵) منبع اصلی اشتغال برای توسعهدهندگان جوان دارای مدرک تحصیلات تکمیلی پنج ساله است. در دنیای JEE فناوریهای بسیاری غیر از Spring وجود دارند. Spring این مزیت را دارد که درک آن آسان است و مهمتر از همه، شیوههای کدنویسی خوبی را ارائه میدهد که میتوان آنها را خارج از اکوسیستم Spring نیز به کار برد. این موضوع توضیح میدهد که چرا در اینجا این فناوری انتخاب شده است.
این TD بیش از ۱۰ سال است که مورد استفاده قرار میگیرد و در کنار پیشرفتهای فناوری تکامل یافته است. پس از آن (IstiA) به ترتیب TD، JEE و [مقدمهای بر Java EE با استفاده از IDE نتبینز و سرور برنامهای گلسفیش (۲۰۱۲)] قرار دارند. این نسخهٔ اخیر، TD، مربوط به سال ۲۰۱۲ است (ما اکنون در سال ۲۰۱۵ هستیم) و نیازمند بهروزرسانی است. این رویکرد JEE را از طریق چارچوب وب JSF2 (Java Server Faces) و EJB3 (Enterprise Java Bean) ارائه میدهد. در مجموع، این دو TD به بسیاری از دانشجویان امکان دادهاند تا موقعیتهای کاری JEE را در ESN (شرکتهای خدمات دیجیتال) به دست آورند و بلافاصله پس از آن توسط آنها استخدام شوند.
این سند مروری رسمی بر تمام جنبههای جاوا ارائه نمیدهد. در طول سالها، رویکرد توسعهدهندگان تازهکار به یک مسئله به طور قابل توجهی تغییر کرده است. امروزه، آنها تقریباً همیشه برای یافتن تکههای کد از اینترنت استفاده میکنند که با کنار هم قرار گرفتن، یک برنامه را تشکیل میدهند. اگر دورهای برایشان فراهم شود، استفاده کمی از آن میکنند و ترجیح میدهند بار دیگر به اینترنت مراجعه کنند. اگرچه من در ابتدا نسبت به این روش کار شک داشتم، اما با این وجود از نتایج حاصل شگفتزده شدم. بدین ترتیب، دانشجویان ضعیفتر توانستند برنامههایی تولید کنند که کار میکردند، در حالی که بدون کمک اینترنت احتمالاً موفق نمیشدند. اکنون من به این روش کار تکیه میکنم.
قطعات کد، نمای کلی از معماری یک راهحل را ارائه نمیدهند و یکی از اهداف این سند، ارائه دقیقاً همین است. دانشجویان به همان شیوهای که با TP کار میکنند، به صورت مستقل روی این TD کار میکنند. هیچ کلاسی وجود ندارد. برنامهای وجود دارد که پیشرفت مورد انتظار آنها را در طول جلسات مشخص میکند. آنها ممکن است از این برنامه عقب یا جلو بمانند. پیشرفت آنها از طریق تعدادی ارزیابی که باید به استاد تحویل دهند، نظارت میشود. استاد هم برای ارائه توضیحات در صورت درخواست و هم برای ارزیابی کار آنها حضور دارد. همه با سرعت خود کار میکنند. در پایان ۳۶ ساعت تعیینشده برای این TD، برخی ۵۰ درصد بیشتر از دیگران ارزیابیها را تکمیل کرده خواهند بود، اما همه – حداقل این هدف است – آنچه را که به طور مستقل انجام دادهاند، درک خواهند کرده باشند. این TD را میتوان بدون راهنمایی معلم تکمیل کرد. به همین دلیل است که در [https://stahe.github.io] در دسترس است.
این سند برای کسانی که به دنبال یک دوره آکادمیک در مورد جاوا هستند مناسب نیست – دورهای که جاوا را به صورت گام به گام و ساختاریافته توضیح دهد و در آن هر جزئیات نحوی تشریح و موجه شود. بلکه، آنچه در اینجا پیشنهاد میشود یک رویکرد تجربی است. احتمالاً دانشآموز همه مطالب ارائهشده در این سند را درک نخواهد کرد، اما احتمالاً قادر خواهد بود از محتوای آن بهرهبرداری خوبی کند و درک جزئیات با کسب تجربه به دست خواهد آمد.
این سند یک دوره الگوریتمها نیز نیست. الگوریتم TD پایهای است و میتواند توسط هر مبتدی که اولین دورههای خود را در الگوریتمها میگذراند، حل شود. این سند بر محیط توسعه حرفهای جاوا، با کتابخانهها و فریمورکهای متعدد آن، و بر معماری کد تمرکز دارد. بیشتر دانشجویانی که من میبینم در الگوریتمها ضعف دارند، که این موضوع بعداً توسط سرپرستان کارورزی آنها تأیید میشود. بنابراین بله، تسلط خوب بر الگوریتمها مهم است، اما هدف این آموزشگاه این نیست.
در نهایت، این سند (دسامبر ۲۰۱۵) جدیدترین تحولات جاوا، بهویژه استریمها و توابع لامبدا را پوشش نمیدهد. با این حال، این سند از برخی عناصر آخرین نسخههای JDK، JDK 1.8 استفاده میکند و کدی که در ادامه میآید باید با استفاده از این JDK کامپایل شود.
1.2. Contenu
فصل ۲ موضوع TD، محاسبه نتایج انتخابات را معرفی میکند. مسئله ساده است. فصل ۲ میخواهد راهحل در دو زبان C# و Java که شباهت زیادی به هم دارند، پیادهسازی شود. پیادهسازی بدون استفاده از کلاسها انجام میشود. هدف معرفی نحو زبان جاوا، دستورات پایه آن و محیط توسعه یکپارچه اکلیپس (IDE) است که برای ساخت پروژههای جاوا استفاده میشود.
فصل ۳ از شما میخواهد که راهحل TD را با استفاده از کلاسها در جاوا پیادهسازی کنید. هدف معرفی مفاهیم کلاسها، ارثبری، اینترفیسها و کلاسهای عمومی (generic) است. مفهوم تست واحد JUnit نیز معرفی میشود.
فصل ۴ مفاهیم زیربنایی فصلهای بعدی را معرفی میکند:
- معماریهای لایهای؛
- برنامهنویسی از طریق رابطها؛
- استفاده از Spring برای پیادهسازی دو مفهوم قبلی؛

فصل ۵ چارچوب Spring را از طریق چهار پروژه ارائه میدهد.
فصل ۶ رابط دسترسی به پایگاه داده API JDBC را معرفی میکند.
فصل ۷ لایه [DAO] (Data Access Object) از TD را با استفاده از API JDBC و Spring پیادهسازی میکند.

فصل ۸ لایه [métier] از TD را پیادهسازی میکند:

فصل ۹ لایه [ui] از TD را با یک برنامه کنسول پیادهسازی میکند:

فصل ۱۰ لایه [ui] از TD را با یک برنامه گرافیکی با استفاده از کتابخانه کامپوننت Swing پیادهسازی میکند:


فصل ۱۱ به مدیریت پایگاه داده با استفاده از چارچوب [Spring Data]، شاخهای از اکوسیستم Spring، میپردازد. این استاندارد JPA (Java Persistence API) را معرفی میکند که به لایه [DAO] امکان میدهد اشیاء را به جای SQL دستکاری کند (زبان پرسوجوی ساختیافته). معماری لایهای به شرح زیر تکامل مییابد:

فصل ۱۲ با پیادهسازی دسترسی به پایگاه داده TD با استفاده از [Spring Data]، مفاهیم فصل ۱۱ را به کار میگیرد.
فصل ۱۳ نشان میدهد چگونه با استفاده از [Spring MVC]، که شاخهٔ دیگری از اکوسیستم Spring است، یک پایگاه داده را در وب ارائه کنیم. معماری به معماری کلاینت/سرور تبدیل میشود:

فصول ۱۴ و ۱۵ برنامه را از TD به یک برنامه کلاینت/سرور تبدیل میکنند:

فصل ۱۶ نشان میدهد چگونه با استفاده از [Spring Security]، شاخه دیگری از اکوسیستم اسپرینگ، دسترسی به یک برنامه وب را ایمنسازی کنیم.

فصل ۱۷ بار دیگر به TD میپردازد و سرویس وب انتخابات را ایمن میسازد.
فصل ۱۸ به مسئله درخواستهای بیندامنهای میپردازد:
![]() |
- در [1]، یک برنامه وب صفحات HTML / جاوااسکریپت را ارائه میدهد؛
- در [2]، مرورگر جاوااسکریپت جاسازیشده در صفحات HTML را برای پرسوجو از سرویس وب امن [3-4] اجرا میکند؛
فرض کنید D1=http://machine1:port1 دامنهٔ سرور [1] و D4=http://machine4:port4 دامنهٔ سرور [4] باشد. اگر سرورها [1] و [4] در همان دامنه [D1!=D4] نباشند، در این صورت، درخواستها از [3] به [4] به عنوان درخواستهای بیندامنهای (cross-domain requests) شناخته میشوند. به دلیل محدودیتهای امنیتی اعمالشده توسط مرورگرها، راهاندازی این موارد میتواند مشکلساز باشد. ما یک راهحل را بررسی خواهیم کرد.
فصل ۱۹ درخواستهای بیندامنهای را با استفاده از اپلیکیشن انتخابات پیادهسازی میکند.
1.3. ابزارهای مورد استفاده
مثالهای زیر در محیط زیر آزمایش شدهاند:
- ماشین ویندوز ۱۰ پرو ۶۴ بیتی؛
- JDK 1.8 (بخش 22.1);
- IDE Spring Tool Suite 3.6.3 (بخش 1);
- NetBeans 8.1 (بخش 22.4);
- مرورگر کروم (از سایر مرورگرها استفاده نشده است)؛
- افزونه کروم [Advanced Rest Client] (بند ۱);
- WampServer، که شامل SGBD، MySQL و ابزار [PhpMyAdmin] برای مدیریت آن است (بند 22.7);
مهم است که از نسخهٔ 1.8 JDK استفاده شود. برخی مثالها از عناصر این JDK استفاده میکنند. اکثر مثالها پروژههای Maven هستند که میتوان آنها را با استفاده از Eclipse IDE یا نسخهٔ Community Edition IntellijIDEA، [https://www.jetbrains.com/idea/download/] و NetBeans [https://netbeans.org/]. در ادامه، اسکرینشاتها از IDE Spring Tool Suite، یک نسخهٔ تغییریافته از Eclipse، گرفته شدهاند.
1.4. پشتیبانی
پروژههای Eclipse که در این سند ذکر شدهاند، در وبسایت [https://tahe.developpez.com/tutoriels-cours/intro-java-spring/serge-tahe-introduction-au-langage-java-et-a-l-ecosysteme-spring/] در دسترس هستند.
![]() |
برای وارد کردن پروژهها از یک فصل، مراحل را در Eclipse همانطور که در [1-8] نشان داده شده است دنبال کنید:
![]() |
اکثر پروژهها، پروژههای Maven هستند. اگر پس از بارگذاری، خطاهایی رخ داد، [Alt-F5] را اجرا کرده و مراحل موجود در [9-10] را دنبال کنید. پروژههای Maven انتخابشده مجدداً ساخته خواهند شد.
![]() |



