السلام عليكم ورحمة الله وبركاته..
في هذا الدرس سنكتب البرنامج و نشغله ونشرحه
جرت العادة أن يقوم المبرمجون عند دراسة أي لغة فإنّهم يكتبون برنامج يقوم بعرض كلمتي (Hello World) و سنقوم بالمثل:
نفتح ال notepad أو ال textpad و نكتب التالي:
أقترح بعد أن نكتب البرنامج أن تحفظه في حافظة تقوم بتسميتها myjava تحت المشغّل C مباشرة.
و يجب أن تحفظه بهذا الاسم: HelloWorld.java و لاحظ الأحرف يجب أن تكون بنفس الصفة يعني هذا الاسم: Helloworld لن يقوم بالمطلوب.
و لأننا نكتب بلغة الجافا، فلابد أن يكون ملحق. الآن جاء وقت الاختبار الصعب (فهل سننجح في تشغيل البرنامج؟)
عبر ال Dos prompt أو ال Command نذهب إلى الحافظة myjava من ال :C
و للتأكّد نقوم بعرض محتويات الحافظة هكذا:
الآن سنقوم بعمل الترجمة لهذا الملف. و للتذكير فالترجمة هنا تعني أننا سنحوّل الملف من لغة نفهمها نحن إلى لغة تفهمها لغة الآلة التخيليّة، تابع الخطوات على الصورة التالية:
يقوم أمر javac باستدعاء المترجم الذي يقوم بترجمة الملف الذي اسمه يلي أمر javac.
المفروض إذا قمت بعمل كل شي تمام فإن النتيجة ستكون ظهور علامة الدوس مرّة أخرى كما في الشكل السابق :-)
أتعرف الآن ماذا ستجد لو قمت بعرض محتويات الحافظة؟ فلنجرّب:
هل رأيت؟ لا تخف. فهذا ليس سحراً، نعم لقد ظهر ملف جديد في الحافظة و هو HelloWorld.class نفس اسم الملف السابق و لكن بملحق (extension) جديد :-) و هو class. لقد قانت الآلة التخيلية بانشاء هذا الملف القابل للتشغيل.
الآن جاء دور التشغيل:
تلاحظ أننا حين كتبنا اسم الملف كتبناه بدون ملحق ذلك أنّه لاداعي له. لأن الآلة التخيلية لا تقوم بتشغيل أي ملف من نوع آخر. هي مخصصة لتشخيل الملفات من نوع class فقط لا غير. لذا لا داعى (و لا يجب) أن يتضمن اسم الملف المشغّل الملحق class معه.
و هكذا تشاهد في الشكل السابق كلمة Hello World الرائعة و هي تزيّن الشاشة دليل عمل البرنامج بنجاح.
بعد أن قمت بنسخ البرنامج المكتوب كما هو (و الذي تعمدت أن يكون كصورة حتى تكتبه بنفسك :-))
و قمت بمحاولة ترجمته، قد تظهر لك هذه الأخطاء:
1)
هذا الخطأ يعني أنك أخطأت في اسم الملف الذي تحاول عمل ترجمه له أي أنك تترجم ملفاً غير موجود.
2)
هذا الخطأ ينتج اذا قمت بتسمية الملف باسم يختلف عن اسم الفئة في الداخل. سنفهم هذا بشكل أكبر في الدرس القادم ان شاء الله.
3) و قد يظهر لك هذا الخطأ أثناء محاولة تشغيل البرنامج و لو تمت الترجمة بنجاح:
قد يحدث هذا الخطأ. و هو خطأ شائع و محيّر :-)
فكما ترون عند الرقم (1) الclass الذي أحاول تشغيله موجود، و قمت بكتابة اسمه بالشكل الصحيح كما في الرقم (2) و مع ذلك يقول انه لا يجد الكلاس كما واضح في الرقم (3).
و هذا يعني أنّك نسيت اضافة (;.) في ال classpath. المسألة بسيطة قم بعمل التالي و تشغيل الملف مرة أخرى:
الشرح
السطر الأوّل: | |
السطر الأول يحتوي على تعريف الفئة (class).
و نحن هنا سنعرّف فئة جديدة اسمها HelloWorld. و قد اعتاد مبرمجو لغة الجافا على اعتماد تسمية الفئات بطريقة معيّنة (Naming Convention)
كلمة Public تسمى (مُغيّر دخول-Access Modifier) و هي تسبق تعريف الفئات classes والأعضاء Objects والمتغيّرات Variables و الوظائف Methods. و سنطّلع في دروس قادمة على غيرها من مغيرات الدخول ان شاء الله :-)
و مغيّر Public يعني أن هذه الفئة عامة و يمكن لأي فئة أخرى موجودة في الآلة التخيلية (virtual machine) أن تستخرج أعضاء منها، أو أن تقوم على تشغيلها.
و ملف الجافا قد يحتوي على تعريف لأكثر من فئة. و لكن فئة واحدة فقط يمكنها public و هي التي يتم تسمية الملف عليها.
فمثلاً، يمكنني أن أقول التالي:
public class FirstClass { . . . . }
class SecondClass { . . . . } |
في المثال السابق يوجد لدينا ملف كتبناه على TextPad أو NotePad و يحتوي على تعريف فئتين. و نلاحظ أن احداهما فقط هي التي تم تعريفها لتكون public و على هذه الأساس، سيكون اسم الملف على هذه الفئة، وفي مثالنا سيكون: FirstClass.java.
نلاحظ أن السطر الأوّل ينتهي برمز (}) و هو يعني أن تعريف الفئة (class) سيبدأ عند هذه النقطة. و بما أن لكل شيء بداية و نهاية، فإننا نتوقّع أن يتوقّف تعريف البرنامج عند العلامة المقابلة ({) و هذا يعني أن تعريف الفئات يكون دائماً محصوراً بين رمزي المجموعة :-)
السطر الثاني يأتي لتعريف وظيفة(method) من الوظائف. سنتعرّف على الوظائف بشكل مفصّل في درس قادم ان شاء الله. لكن ما يهمّنا الآن هو الوظيفة الموجودة بين أيدينا.
هذه الوظيفة هي ذات نوعية خاصة، انها ال main method و هي نقطة البداية لأي برنامج يتم تشغيله من مشغّل الدوس (Dos prompt).
لنعد بذاكرتنا قليلاً إلى الوراء، هل تذكرون ما قلناه حين تحدّثنا في مقارنة بين البرمجة بالطريقة التقليدية (Proccess Oriented) و البرمجة بالطريقة بالكائنات الشيئية؟ لقد ذكرنا شيئاً عن نقطة البداية. ففي البرمجة بالكائنات الشيئية نضع نقطة البداية، ثم يقوم أعضاء الفئات المختلفة بتقاذف الأحداث فيما بينها.
و لكن لابد من نقطة بداية. و في حالتنا نقطة البداية هي هذا السطر و ما يعقبه من أوامر محصورة بين قوسي المجموعة :-)
إن أي برنامج جافا، قد يتكون من عدة ملفات (بحيث يكون كل ملف محتوياً لى تعريف فئة)، و يجب أن تحتوي فئة واحدة عاى نقطة البداية، التي تتمثّل في وظيفة main.
وظيفة ال main method هي في الحقيقة نقطة البداية التي تتحدّث عنها الآلة التخيلية للجافا، في حالة قمنا بتشغيل أي ملف جافا من محرك الدوس. و هي في الواقع فئة تتبع للفئة بشكل عام و لا تخص الأعضاء المنتمين لهذه الفئة.
إن هذا السطر في الواقع يقوم باستدعاء و ظيفة println التي تقوم بكتابة ما يمرر لها في الأقواس (و في حالتنا هو Hello World). ما سبق هذه الوظيفة هو عنوان العضو و الفئة التي توجد فيها هذه الوظيفة، حتى تقوم الآلة التخيلية بتشغيلها بشكل صحيح.
نقوم هنا بغلق الأقواس، و نلاحظ أن تعريف الفئة قد تضمّن تعريف الوظيفة main و نلاحظ أننا نغلق القوس الداخلي أولاً ثم الخارجي و هكذا.
- في السطر الثالث، الكلمة الأولى و هي System هي في الواقع اسم لفئة. و في هذه الفئة توجد صفة اسمها out.
out في الواقع هي عضو في فئة PrintStream و يستطيع أعضاء هذه الفئة استخدام وظيفة ال println :-)
هذا هو تسلسل هذ الكلمات.
- تم التحدث عن الآلة التخيلية في هذا الدرس. و سنعرف عنها المزيد، تابعوا الدروس :-)
أنا بانتظار أسئلتكم..
وفوق كل ذي علم عليم
الواجب
اكتب برنامج يطبع كلمه لغه الجافا