مقدمة في البرمجة بلغة جافا
من الآلة الحاسبة إلى أول برنامج تكتبه وتشغّله بنفسك
إعداد: م. بدر الدين محمد الحليمي
في نهاية هذه المحاضرة ستكون قادرًا على
- تشرح معنى البرمجة بمثال من حياتك اليومية
- تحدد البيانات والمعالجة والمخرجات في برنامج بسيط
- تفرّق بين Java وJDK وNetBeans، وتصف رحلة البرنامج من ملف
.javaإلى JVM - تنشئ مشروعًا وتكتب أمر طباعة وتشغّله
- تتتبّع برنامجًا سطرًا سطرًا باستخدام المتتبّع في هذا الموقع
- تقرأ رسالة خطأ بسيطة وتصححها
محتويات المحاضرة
- البرمجة موجودة في كل تطبيق نستخدمه
- الآلة الحاسبة تأخذ بيانات وتعالجها وتعرض نتيجة
- الحاسوب ينفّذ ما نكتبه حرفيًا، ولا يخمّن قصدنا
- تعلّم جافا يشبه تعلّم لغة جديدة
- المتغير اسم يحتفظ بقيمة يستخدمها البرنامج
- ثلاثة أطراف تعمل معًا عند تشغيل أي برنامج
- ثلاثة مصطلحات نحتاجها قبل أن نبدأ
- يمر البرنامج بأربع محطات: من
.javaإلىjavacإلى.classإلى JVM - إنشاء أول مشروع في NetBeans 8 بخمس خطوات، وثلاث مناطق فقط في الشاشة
- أول برنامج: سطر واحد يطبع رسالة على الشاشة
- الزر «تتبّع سطرًا سطرًا» يريك البرنامج وهو ينفّذ كل سطر
- علامات التنصيص تغيّر معنى ما نكتبه
- رسالة الخطأ تدلّنا على مكان التصحيح
- طريقة العمل في كل تمرين، واختصارات توفّر الوقت
- تمرين ختامي: برنامج يطبع ثلاثة أسطر
- أسئلة المراجعة
البرمجة موجودة في كل تطبيق نستخدمه
الرسائل، والخرائط، والآلة الحاسبة في هاتفك.
محرر النصوص، والمتصفح، والآلة الحاسبة في Windows.
محركات البحث، والمنصات التعليمية، والمتاجر الإلكترونية.
كل تطبيق منها مجموعة تعليمات كتبها مبرمجون بإحدى لغات البرمجة. البرمجة هي كتابة تعليمات مرتبة يفهمها الحاسوب، لحل مشكلة أو تنفيذ مهمة. واليوم نكتب أول تعليماتنا بلغة جافا.
| الكلمة | معناها |
|---|---|
| تعليمات | أوامر محددة: اجمع، اطبع، احفظ. |
| مرتبة | الحاسوب ينفّذها بالتسلسل، سطرًا بعد سطر. |
| لهدف | لكل برنامج مهمة واضحة يؤديها. |
الآلة الحاسبة تأخذ بيانات وتعالجها وتعرض نتيجة
2 و3. ما البيانات التي أعطيناها للبرنامج؟
الجمع. ما العملية التي طلبناها؟
5. ما النتيجة التي عرضها؟
بيانات، ثم معالجة، ثم مخرجات: نمط يتكرر في معظم البرامج التي ستكتبها.
الآلة الحاسبة في سطر واحد
اضغط «تشغيل». ثم غيّر العددين إلى 7 و8 وشغّل مرة أخرى. أين البيانات هنا؟ وأين المعالجة؟ وأين المخرجات؟
public class Calculator {
public static void main(String[] args) {
System.out.println(2 + 3);
}
}5
برنامج يأخذ درجات طالب، ويحسب معدله، ثم يعرضه. ما «المعالجة» هنا؟
الحاسوب ينفّذ ما نكتبه حرفيًا، ولا يخمّن قصدنا
ما الاسم بالضبط؟ في أي برنامج نكتبه؟ أين نضعه داخل الصفحة؟
1. افتح برنامج Notepad. 2. انقر داخل الصفحة. 3. اكتب الاسم: Ahmed. 4. احفظ الملف باسم name.
وضوح التعليمات وترتيبها جزء أساسي من البرمجة. توقّع ناتج البرنامجين التاليين قبل كشف الإجابة.
في النص خطأ إملائي. هل يصححه الحاسوب؟
public class Literal {
public static void main(String[] args) {
System.out.println("Helo, Jaba!");
}
}أظهر الناتج
Helo, Jaba!
لماذا؟ الحاسوب لا يفهم قصدك، بل يطبع النص كما كتبته تمامًا. وهذا ليس خطأ عند المترجم، لأن النص يمكن أن يكون أي شيء.
التعليمات مرتبة بغير ترتيب الحروف. ماذا يطبع البرنامج؟
public class Order {
public static void main(String[] args) {
System.out.println("C");
System.out.println("A");
System.out.println("B");
}
}أظهر الناتج
C A B
لماذا؟ ينفّذ الحاسوب الأسطر بالترتيب الذي كتبناه من الأعلى إلى الأسفل، ولا يعيد ترتيبها. وكل println ينتقل بعدها إلى سطر جديد.
تعلّم جافا يشبه تعلّم لغة جديدة
| العنصر | في اللغة البشرية | في Java |
|---|---|---|
| المفردات | كلمات مثل: كتاب، يكتب، الطالب | كلمات محجوزة مثل: class وpublic وint |
| القواعد | ترتيب الكلمات وعلامات الترقيم | الأقواس { } والفاصلة المنقوطة ; |
| الجملة | «يكتب الطالب الدرس». | System.out.println("Hi"); |
تعلّم جافا يعرّفك بمفاهيم مشتركة بين لغات كثيرة، مثل المتغيرات والشروط والتكرار. لكن لكل لغة قواعدها وخصائصها؛ فتعلّم جافا لا يعني إتقان كل اللغات.
أي عنصر مما يلي يقابل «علامات الترقيم» في اللغة البشرية؟
class فهي من مفردات اللغة.المتغير اسم يحتفظ بقيمة يستخدمها البرنامج
- البرنامج يحتاج أحيانًا إلى الاحتفاظ بقيم أثناء عمله.
- العدد 2 ليس متغيرًا؛ المتغير اسم يحتفظ به.
- يمكن تغيير القيمة لاحقًا، ويبقى الاسم كما هو.
- المتغيرات لا تقتصر على الأعداد.
الجزء من int firstNumber = 2; | معناه |
|---|---|
int | نوع البيانات: عدد صحيح |
firstNumber | اسم المتغير |
2 | القيمة المخزنة فيه |
الآلة الحاسبة بمتغيرين
هذه نظرة أولى فقط؛ سنشرح المتغيرات بالتفصيل في محاضرة لاحقة. اضغط «تشغيل»، ثم غيّر القيمتين وشغّل مرة أخرى.
public class TwoNumbers {
public static void main(String[] args) {
int firstNumber = 2;
int secondNumber = 3;
System.out.println(firstNumber + secondNumber);
}
}5
ثلاثة أطراف تعمل معًا عند تشغيل أي برنامج
| الطرف | دوره |
|---|---|
| البرنامج (Program) | يحدد المهمة المطلوبة، وكيف نتعامل مع البيانات والنتائج. |
| نظام التشغيل (Operating System) | يدير موارد الجهاز، ويقدم خدمات للبرامج مثل الملفات والإدخال والإخراج. |
| المعالج (CPU) | ينفّذ تعليمات البرنامج، ومنها العمليات الحسابية والمنطقية. |
Windows، وmacOS لأجهزة Mac، وiOS لهواتف iPhone، وAndroid لمعظم الهواتف الأخرى.
دالة: مجموعة تعليمات لها اسم وتؤدي مهمة. أما الجمع نفسه فنكتبه مباشرة بالرمز +.
على هاتفك تطبيق الخرائط ونظام Android. ماذا يمثّل Android؟
ثلاثة مصطلحات نحتاجها قبل أن نبدأ
أين نكتب البرنامج؟ وكيف نشغّله في NetBeans 8؟ نبدأ بالتفريق بين ثلاثة أسماء تتكرر كثيرًا.
اللغة التي نكتب بها التعليمات: كلماتها ورموزها وقواعدها.
Java 8أدوات تطوير برامج جافا، ومنها المترجم الذي يحوّل الكود إلى برنامج قابل للتشغيل.
JDK 8u111بيئة تطوير متكاملة: نكتب فيها الكود ونشغّله ونكتشف أخطاءه.
NetBeans IDE 8.2| أين نكتب الكود؟ | الحكم |
|---|---|
| محرر نصوص بسيط | ممكن، لكن بلا أدوات مساعدة |
NetBeans | الأنسب: كتابة وتشغيل وكشف أخطاء |
Microsoft Word | غير مناسب لكتابة الكود |
أي الثلاثة يحتوي على المترجم؟
يمر البرنامج بأربع محطات: من .java إلى javac إلى .class إلى JVM
- ملف المصدر:
FirstProgram.javaهنا نكتب التعليمات بلغة Java، وهو نص يقرؤه البشر. - المترجم:
javacيفحص قواعد الكود. فإذا وجد خطأ توقف وعرض رسالة، وإلا ترجم الكود. - الكود الوسيط:
FirstProgram.classينتج المترجم ملفًا فيه bytecode، وهي تعليمات تفهمها آلة جافا الافتراضية. - آلة جافا الافتراضية: JVMتنفّذ JVM الكود الوسيط على جهازك، بمساعدة نظام التشغيل والمعالج.
راقب المحطتين
اضغط «تشغيل»، وستظهر كلمة «ترجمة…» لحظة قبل أن ينفّذ JVM البرنامج. ثم احذف ; وشغّل مرة أخرى: توقف كل شيء عند المترجم، ولم يعمل JVM إطلاقًا.
public class Path {
public static void main(String[] args) {
System.out.println("Compiled, then run by the JVM");
}
}Compiled, then run by the JVM
ما الذي ينتجه javac من ملف FirstProgram.java الصحيح؟
.class.إنشاء أول مشروع في NetBeans 8 بخمس خطوات، وثلاث مناطق فقط في الشاشة
- افتح نافذة المشروعFile ثم New Project، أو Ctrl+Shift+N.
- اختر نوع المشروعJava ثم Java Application، ثم Next.
- سمِّ المشروعFirstProgram، وأبقِ الخيار Create Main Class مفعّلًا، ثم Finish.
- افتح الصنف الرئيسي
FirstProgram.javaيُفتح تلقائيًا، وفيهmain. - شغّل المشروعRun Project، أو F6، أو زر التشغيل الأخضر.
| المنطقة | ماذا نفعل فيها؟ |
|---|---|
Projects | ملفات مشروعك، ومنها ملف الكود. |
| محرر الكود | هنا نكتب التعليمات ونعدلها. |
Output | هنا يظهر الناتج، وتظهر رسائل الخطأ. |
Output - FirstProgram (run)
run:
Hello, Java!
BUILD SUCCESSFUL (total time: 0 seconds)run: وBUILD SUCCESSFUL من NetBeans نفسه، وليسا من برنامجك.أول برنامج: سطر واحد يطبع رسالة على الشاشة
- اكتب السطر داخل قوسي
main - توقّع الناتج قبل التشغيل
- شغّلفي المختبر اضغط F6، وهنا زر «تشغيل» أو Ctrl+Enter.
- غيّر الرسالة وشغّل مرة أخرى
package firstprogram;
public class FirstProgram {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}Hello, Java!
| الجزء | معناه للمبتدئ |
|---|---|
package firstprogram; | الحزمة التي يوجد فيها الصنف (تشبه المجلد) |
public class FirstProgram | تعريف الصنف الذي يحتوي كود مثالنا |
main | نقطة بدء تنفيذ البرنامج |
{ } | بداية كتلة من التعليمات ونهايتها |
System.out.println | تطبع قيمة ثم تنتقل إلى سطر جديد |
"Hello, Java!" | نص نريد طباعته كما هو |
; | تنهي التعليمة |
غيّر الرسالة
عدّل البرنامج ليطبع السطر Welcome to Java تمامًا كما هو.
public class Welcome {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}Welcome to Java
تلميح 1
غيّر النص الذي بين علامتي التنصيص فقط، ولا تحذف العلامتين.
الحل
public class Welcome {
public static void main(String[] args) {
System.out.println("Welcome to Java");
}
}الزر «تتبّع سطرًا سطرًا» يريك البرنامج وهو ينفّذ كل سطر
في هذا الموقع متتبّع (debugger) مع كل برنامج: يوقف البرنامج قبل كل سطر لتراه يعمل خطوة خطوة. وهو أفضل طريقة لفهم برنامج لا يفعل ما توقعته.
- اضغط «تتبّع سطرًا سطرًا»يتوقف البرنامج، ويتلوّن السطر الذي سيُنفَّذ بعد لحظة. لم يُنفَّذ بعد.
- اضغط «السطر التالي» أو F8يُنفَّذ السطر. انظر إلى الناتج أسفل المحرر، ثم توقّع ما سيحدث بعدها.
- اضغط «متابعة» أو F9يكمل البرنامج بقية الأسطر دون توقف.
جرّب المتتبّع
اضغط «تتبّع سطرًا سطرًا»، واضغط «السطر التالي» ثلاث مرات. متى يظهر كل سطر في الناتج؟ ثم جرّب الزر نفسه في مختبر المتغيرين أعلاه، وشاهد الصناديق تظهر وتمتلئ.
public class Trace {
public static void main(String[] args) {
System.out.println("Line one");
System.out.println("Line two");
System.out.println(2 + 3);
}
}Line one Line two 5
علامات التنصيص تغيّر معنى ما نكتبه
تعبير بلا علامات تنصيص. ماذا يطبع؟
public class NoQuotes {
public static void main(String[] args) {
System.out.println(2 + 3);
}
}أظهر الناتج
5
لماذا؟ تعبير حسابي: يُحسب أولًا، ثم يُطبع الناتج.
الآن داخل علامات تنصيص. ماذا يطبع؟
public class WithQuotes {
public static void main(String[] args) {
System.out.println("2 + 3");
}
}أظهر الناتج
2 + 3
لماذا؟ نص: يُطبع حرفيًا كما كتبناه، أما علامتا التنصيص نفسهما فلا تُطبعان.
اكتب السطرين معًا
غيّر الأعداد في السطرين. أي السطرين تغيّر ناتجه حسابيًا؟ ثم جرّب 2 * 3 في السطر الأول.
public class Quotes {
public static void main(String[] args) {
System.out.println(2 + 3);
System.out.println("2 + 3");
}
}5 2 + 3
اطبع العملية ثم ناتجها
اطبع السطر 4 + 6 كنص، ثم اطبع في السطر التالي ناتج 4 + 6 محسوبًا.
public class SumTwice {
public static void main(String[] args) {
// Write two println statements here
}
}4 + 6 10
تلميح 1
أحد السطرين يحتاج إلى علامتي تنصيص، والآخر لا يحتاج إليهما.
الحل
public class SumTwice {
public static void main(String[] args) {
System.out.println("4 + 6");
System.out.println(4 + 6);
}
}رسالة الخطأ تدلّنا على مكان التصحيح
الخطأ معلومة تساعدنا على التصحيح، وظهور رسائل الخطأ أثناء التعلّم أمر طبيعي. في NetBeans تظهر علامة حمراء بجانب رقم السطر، وخط أحمر تحت موضع الخطأ. قف بالمؤشر على العلامة لتقرأ الرسالة.
تجربة مقصودة: الفاصلة المنقوطة
حذفنا الفاصلة المنقوطة من نهاية سطر الطباعة. اقرأ الرسالة، ثم أعد الرمز وشغّل البرنامج من جديد.
public class Welcome {
public static void main(String[] args) {
System.out.println("Welcome")
}
}';' expectedأظهر التصحيح
public class Welcome {
public static void main(String[] args) {
System.out.println("Welcome");
}
}Welcome
لماذا؟ السطر لا ينتهي بالرمز ;، لذلك لا يستطيع المترجم فهم نهاية التعليمة، فيتوقف ولا يُنتج ملف .class.
خطأ شائع آخر: علامة التنصيص
نسينا إغلاق النص. أصلح السطر حتى يطبع البرنامج Welcome.
public class Welcome {
public static void main(String[] args) {
System.out.println("Welcome);
}
}unclosed string literalأظهر التصحيح
public class Welcome {
public static void main(String[] args) {
System.out.println("Welcome");
}
}Welcome
لماذا؟ تبدأ علامة التنصيص الأولى نصًا، ويبحث المترجم عن علامة تغلقه في السطر نفسه فلا يجدها.
طريقة العمل في كل تمرين، واختصارات توفّر الوقت
ماذا سيُطبع؟
اضغط F6.
لماذا ظهر هذا؟
غيّر وجرّب ثانية.
طبّق الخطوات الأربع
توقّع الأسطر الثلاثة، ثم شغّل، وفسّر الفرق بينها. ثم عدّل عددًا واحدًا وتوقّع من جديد.
public class Routine {
public static void main(String[] args) {
System.out.println("10 + 5");
System.out.println(10 + 5);
System.out.println("Done");
}
}10 + 5 15 Done
| الاختصار | ماذا يفعل في NetBeans 8 |
|---|---|
Ctrl+Shift+N | مشروع جديد |
sout + Tab | كتابة أمر الطباعة تلقائيًا |
F6 | تشغيل المشروع |
Shift+F6 | تشغيل الملف المفتوح |
Ctrl+S | حفظ الملف |
Alt+Shift+F | ترتيب مسافات الكود |
- للجدد على لوحة المفاتيح: حوّل لغة الكتابة إلى الإنجليزية قبل كتابة الكود (Alt+Shift).
- الأقواس الهلالية
( ): Shift مع الرقمين 9 و0. - الأقواس المعقوفة
{ }: Shift مع المفتاحين المجاورين لحرف P. - علامة التنصيص
": Shift مع المفتاح المجاور لمفتاح الفاصلة المنقوطة. - الفاصلة المنقوطة
;: المفتاح المجاور لحرف L.
تمرين ختامي: برنامج يطبع ثلاثة أسطر
ثلاثة أسطر
اكتب برنامجًا يطبع: الاسم Ahmed، ثم العبارة My first Java program، ثم ناتج العملية 10 + 5.
public class FirstProgram {
public static void main(String[] args) {
// Write your three println statements here
}
}Ahmed My first Java program 15
تلميح 1
تحتاج إلى ثلاثة أوامر println داخل main.
تلميح 2
فكّر: هل تضع العملية الحسابية بين علامتي تنصيص؟
الحل
public class FirstProgram {
public static void main(String[] args) {
System.out.println("Ahmed");
System.out.println("My first Java program");
System.out.println(10 + 5);
}
}أسئلة المراجعة
أين كتبنا التعليمات داخل البرنامج؟
main، فتعليماتنا تُكتب داخل قوسيها.في أي نافذة ظهر الناتج في NetBeans؟
لماذا وضعنا النص بين علامتي تنصيص؟
ما الفرق في الناتج بين هذين السطرين؟
public class Review {
public static void main(String[] args) {
System.out.println("10 + 5");
System.out.println(10 + 5);
}
}أظهر الناتج
10 + 5 15
لماذا؟ السطر الأول نص يُطبع كما هو، والسطر الثاني تعبير يُحسب أولًا.
ما الترتيب الصحيح لرحلة البرنامج؟
javac إلى bytecode في ملف .class، ثم ينفّذه JVM.