1. مقدمة
1.1. الخلفية
يمكن الاطلاع على نسخة PDF من الوثيقة |هنا|.
الأمثلة الواردة في الوثيقة متاحة |هنا|.
يُستخدم هذا المستند كمحاضرة وكرشد جامعي (TD) على حد سواء. وهو مخصص للمبتدئين. ويستخدم المصادر التالية:
المراجع:
سنشير إلى هذه المصادر بـ [ref1] و [ref2] على التوالي. المصدر [ref1] قديم (2002) ولكنه كافٍ لهذا المستند، حيث يتم استخدامه فقط لعرض قواعد لغة Java وعملياتها الأساسية. يتم عرض باقي المواد اللازمة لإكمال المهمة في هذا المستند في فصول بعنوان [Course]. هذه الفصول مأخوذة مباشرة من [ref2] (2015) وتم تبسيطها في بعض الحالات.
الهدف من هذا المستند هو تعليم لغة Java من منظور احترافي. لهذا السبب، نعتمد بشكل كبير على إطار عمل Spring [http://spring.io/]، الذي يستخدم على نطاق واسع في تطوير JEE (Java Enterprise Edition). منطقياً، يجب أن يتبع هذه الدورة دورة JEE. وهذا هو الحال في Istia (جامعة أنجيه). يعد JEE حاليًا (نوفمبر 2015) المصدر الرئيسي للتوظيف للمطورين الشباب الحاصلين على درجة الماجستير. هناك العديد من التقنيات الأخرى إلى جانب Spring في عالم JEE. يتميز Spring بسهولة فهمه، وقبل كل شيء، بتوفيره لأفضل ممارسات البرمجة التي يمكن إعادة استخدامها خارج نظام Spring. وهذا يفسر سبب اختياره هنا.
يتم استخدام هذا المختبر منذ أكثر من 10 سنوات وقد تطور مع التكنولوجيات. ويليه (في IstiA) مختبر JEE [مقدمة إلى Java EE]. يعود تاريخ هذا المختبر الأخير إلى عام 2012 (نحن الآن في عام 2015) ويمكن تحديثه. وهو يعرض معيار JEE من خلال إطار عمل الويب JSF2 (Java Server Faces) و EJB3 (Enterprise Java Bean). وقد مكن هذان البرنامجان التعليميان معًا العديد من الطلاب من الحصول على تدريبات JEE في شركات الخدمات الرقمية (ESN) والتوظيف فيها فورًا بعد ذلك.
لن تجد في هذا المستند عرضًا رسميًا لجميع جوانب Java. على مر السنين، تغيرت طريقة تعامل المطورين المبتدئين مع المشكلات بشكل كبير. في الوقت الحاضر، يلجأون دائمًا تقريبًا إلى الإنترنت للعثور على مقتطفات من الكود التي تشكل برنامجًا عند تجميعها. إذا قدمنا لهم دورة تدريبية، فإنهم يستخدمونها قليلاً للغاية ويفضلون العودة إلى الإنترنت. على الرغم من أنني كنت متشككًا في البداية في هذا النهج، إلا أنني فوجئت بالنتائج. تمكن الطلاب الضعفاء من إنتاج برامج تعمل، في حين أنه بدون مساعدة الإنترنت، ربما لم يكونوا ليحققوا النجاح. أنا الآن أعتمد على هذا النهج.
لا توفر مقتطفات الأكواد نظرة عامة على بنية الحل، ويُعد تقديم هذه النظرة العامة أحد أهداف هذا المستند. يكمل الطلاب هذا البرنامج التعليمي كتمرين عملي، ويعملون بشكل مستقل. لا توجد محاضرة. هناك جدول زمني يحدد التقدم المتوقع منهم على مدار الجلسات. قد يتأخرون أو يتقدمون على هذا الجدول. يتم التحقق من تقدمهم من خلال سلسلة من نقاط التحقق التي يجب عليهم تقديمها إلى المدرب. يتواجد المدرب لتقديم التفسيرات عند الطلب وللتحقق من صحة عملهم. يعمل الجميع وفقًا لسرعتهم الخاصة. في نهاية الـ 36 ساعة المخصصة لهذا المختبر، سيكون البعض قد أكمل 50٪ من عمليات التحقق أكثر من الآخرين، ولكن الجميع — على الأقل هذا هو الهدف — سيكونون قد فهموا ما فعلوه بأنفسهم. يمكن إكمال هذا المختبر دون توجيه من المعلم. ولهذا السبب فهو متاح على [https://stahe.github.io].
هذا المستند غير مناسب لمن يبحثون عن دورة أكاديمية حول Java — أي شيء يشرح Java بطريقة منظمة خطوة بخطوة، حيث يتم شرح كل تفاصيل بناء الجملة وتبريرها. بل إن ما يُقترح هنا هو نهج تجريبي. من المحتمل ألا يفهم الطالب كل ما هو معروض في المستند، لكنه سيتمكن على الأرجح من الاستفادة من محتواه، وسيأتي فهم التفاصيل مع الخبرة.
هذا المستند ليس أيضًا دورة في الخوارزميات. الخوارزمية في التمرين أساسية ويمكن حلها من قبل أي مبتدئ يدرس دوراته الأولى في الخوارزميات. يركز المستند على بيئة تطوير Java الاحترافية بمكتباتها وأطر عملها العديدة، بالإضافة إلى بنية الكود. معظم الطلاب الذين أراهم يعانون من نقاط ضعف في الخوارزميات، وهو ما يؤكده لاحقًا مشرفو تدريبهم. لذا نعم، إتقان الخوارزميات مهم، لكنه ليس محور هذا البرنامج التعليمي.
أخيرًا، لا يغطي هذا المستند (ديسمبر 2015) أحدث ميزات Java، ولا سيما التدفقات ووظائف lambda. ومع ذلك، فإنه يستخدم بعض عناصر أحدث إصدار من JDK، وهو JDK 1.8، ويجب ترجمة الكود التالي باستخدام هذا الإصدار من JDK.
1.2. المحتويات
يقدم الفصل 2 موضوع البرنامج التعليمي: حساب نتائج الانتخابات. المشكلة بسيطة. يطلب منك الفصل 2 تنفيذ الحل باستخدام لغتين متشابهتين جدًا، هما C# و Java. يتم التنفيذ بدون فئات. الهدف هو تقديم بناء جملة Java، وعباراتها الأساسية، وبيئة التطوير المتكاملة (Eclipse IDE) المستخدمة لإنشاء مشاريع Java.
يطلب منك الفصل 3 تنفيذ حل المهمة في Java باستخدام الفئات. الهدف هو تقديم مفاهيم الفئات، والوراثة، والواجهات، والفئات العامة. يتم تقديم مفهوم اختبار الوحدة JUnit.
يقدم الفصل 4 المفاهيم الأساسية للفصول التالية:
- البنى الطبقية؛
- البرمجة باستخدام الواجهات؛
- استخدام Spring لتنفيذ المفهومين السابقين؛

يقدم الفصل الخامس إطار عمل Spring من خلال أربعة مشاريع.
الفصل 6 يقدم واجهة برمجة تطبيقات JDBC، وهي واجهة للوصول إلى قاعدة البيانات.
الفصل 7 ينفذ طبقة [DAO] (كائن الوصول إلى البيانات) لمشروع الدورة التدريبية باستخدام واجهة برمجة التطبيقات JDBC و Spring.

الفصل 8 ينفذ طبقة [الأعمال] لمشروع الدورة التدريبية:

الفصل 9 ينفذ طبقة [UI] لـ TD باستخدام تطبيق وحدة التحكم:

الفصل 10 ينفذ طبقة [واجهة المستخدم] للبرنامج التعليمي باستخدام تطبيق رسومي يستفيد من مكتبة مكونات Swing:


يغطي الفصل 11 إدارة قواعد البيانات باستخدام إطار عمل [Spring Data]، وهو أحد مكونات منظومة Spring. ويقدم مواصفات JPA (Java Persistence API)، التي تسمح لطبقة [DAO] بمعالجة الكائنات بدلاً من SQL (لغة الاستعلام الهيكلية). تتطور البنية الطبقية على النحو التالي:

يطبق الفصل 12 المفاهيم الواردة في الفصل 11 من خلال تنفيذ الوصول إلى قاعدة البيانات للبرنامج التعليمي باستخدام [Spring Data].
يوضح الفصل 13 كيفية عرض قاعدة بيانات على الويب باستخدام [Spring MVC]، وهو فرع آخر من نظام Spring. تتطور البنية إلى بنية عميل/خادم:

يحول الفصلان 14 و 15 التطبيق التعليمي إلى تطبيق عميل/خادم:

يوضح الفصل 16 كيفية تأمين الوصول إلى تطبيق ويب باستخدام [Spring Security]، وهو فرع آخر من نظام Spring.

الفصل 17 يعيد النظر في البرنامج التعليمي ويؤمن خدمة الويب الخاصة بالانتخابات.
يتناول الفصل 18 مسألة الطلبات عبر المجالات:
![]() |
- في [1]، يقوم تطبيق ويب بتقديم صفحات HTML/JavaScript؛
- في [2]، يقوم المتصفح بتنفيذ JavaScript المضمن في صفحات HTML للاستعلام عن خدمة الويب الآمنة [3-4]؛
لنفترض أن D1 = http://machine1:port1 هو نطاق الخادم [1] و D4 = http://machine4:port4 هو نطاق الخادم [4]. إذا لم يكن الخادمان [1] و[4] في نفس المجال [D1≠D4]، فإن الطلبات من [3] إلى [4] تسمى طلبات عبر المجالات. ونظرًا للقيود الأمنية التي تفرضها المتصفحات، قد يكون إعدادها أمرًا صعبًا. سنبحث في حل لهذه المشكلة.
يُنفذ الفصل 19 الطلبات عبر المجالات باستخدام تطبيق الانتخابات.
1.3. الأدوات المستخدمة
تم اختبار الأمثلة التالية في البيئة التالية:
- جهاز يعمل بنظام Windows 10 Pro 64 بت؛
- JDK 1.8 (القسم 22.1)؛
- Spring Tool Suite 3.6.3 IDE (القسم 1)؛
- NetBeans 8.1 (القسم 22.4)؛
- متصفح Chrome (لم يتم استخدام متصفحات أخرى)؛
- ملحق Chrome [Advanced Rest Client] (القسم 1)؛
- WampServer، الذي يتضمن نظام إدارة قواعد البيانات MySQL وأداة [PhpMyAdmin] لإدارته (القسم 22.7)؛
من المهم استخدام JDK 1.8. تستخدم بعض الأمثلة مكونات من هذا JDK. معظم الأمثلة عبارة عن مشاريع Maven يمكن فتحها باستخدام أي من بيئات التطوير المتكاملة (IDE) التالية: Eclipse [https://www.eclipse.org/]، IntelliJ IDEA Community Edition [https://www.jetbrains.com/idea/download/]، و NetBeans [https://netbeans.org/]. فيما يلي، لقطات الشاشة مأخوذة من Spring Tool Suite IDE، وهو أحد أشكال 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 المحددة.
![]() |



