صمم حلولك البرمجية قبل أن تكتبها
بنهاية هذه الوحدة، سيكون الطالب قادرًا على:
لغة الجافا (Java) هي لغة برمجة عالية المستوى، تُعرف بكونها كائنية التوجه (Object-Oriented Programming - OOP)، مما يعني أنها تعتمد على تنظيم الكود في وحدات مستقلة تسمى الكائنات والكلاسات. صُممت جافا لتكون مستقلة عن المنصة (Platform Independent)، وهذا ما يميزها بشعارها الشهير: "Write Once, Run Anywhere" (اكتب مرة واحدة، وشغل في أي مكان). وهذا يعني أن الكود الذي تكتبه على نظام تشغيل معين (مثل Windows) يمكن تشغيله مباشرة على أنظمة أخرى (مثل Linux أو macOS) دون الحاجة لإعادة كتابته.
ما الذي يجعل الجافا خيارًا شائعًا وقويًا لتطوير البرمجيات، بما في ذلك تطبيقات الأمن السيبراني؟
| الميزة | التوضيح | فائدة عملية / أمنية |
|---|---|---|
| البساطة (Simple) | تم تصميم جافا لتكون سهلة التعلم والاستخدام، مع تركيب لغوي واضح ومبسط. | مثالية للمبتدئين في البرمجة، حيث تقلل من تعقيدات إدارة الذاكرة اليدوية الموجودة في لغات أخرى. |
| الأمان (Secure) | تدعم جافا إدارة الذاكرة التلقائية عبر جامع القمامة (Garbage Collection)، وتفرض قواعد أمان صارمة عند تشغيل البرامج. | تقلل بشكل كبير من ثغرات Memory Leaks (تسرب الذاكرة) و Buffer Overflows الشائعة في اللغات الأخرى، مما يجعلها خيارًا ممتازًا لتطوير تطبيقات آمنة. |
| المكتبات الغنية (Rich Libraries) |
تحتوي جافا على آلاف المكتبات والواجهات البرمجية الجاهزة (APIs) التي توفر وظائف متنوعة، مثل java.util (لأدوات المساعدة) و java.io (للمدخلات والمخرجات).
|
تسريع عملية تطوير التطبيقات المعقدة، وتقديم حلول جاهزة للعديد من المهام، بما في ذلك وظائف التشفير والأمان. |
| التعددية (Multithreading) | تدعم جافا مفهوم الخيوط (Threads)، مما يسمح للبرنامج بتنفيذ عدة مهام في وقت واحد بشكل متوازٍ. | مفيدة جدًا في تطوير أنظمة التعامل مع الشبكات، ومعالجة البيانات المتعددة، وتطبيقات الخوادم التي تحتاج إلى أداء عالٍ وسرعة استجابة. |
| منصة مستقلة (Platform Independent) | البرامج المكتوبة بالجافا يمكن تشغيلها على أي نظام تشغيل يحتوي على الآلة الافتراضية للجافا (JVM). | مثالية لتطوير أدوات أمنية أو تطبيقات حماية تعمل على منصات متعددة دون الحاجة لإعادة كتابة الكود لكل نظام تشغيل، مما يوفر الوقت والجهد في عمليات النشر والتحديث. |
لفهم كيفية عمل البرامج، يجب أن نفهم كيف تخزن البيانات وتتعامل معها. المتغيرات هي أماكن مخصصة في ذاكرة الحاسوب لتخزين البيانات، ولكل متغير نوع بيانات يحدد نوع القيمة التي يمكنه تخزينها.
في الجافا، هناك ثمانية أنواع بيانات بدائية (Primitive) تمثل الأنواع الأساسية للبيانات.
| النوع | الحجم (بايت) | الوصف | مثال |
|---|---|---|---|
byte |
1 | عدد صحيح صغير يتراوح من -128 إلى 127. | byte b = 100; |
short |
2 | عدد صحيح يتراوح من -32,768 إلى 32,767. | short s = 5000; |
int |
4 | عدد صحيح شائع الاستخدام، يتراوح من حوالي $-2 \times 10^9$ إلى $2 \times 10^9$. | int age = 25; |
long |
8 | عدد صحيح كبير جدًا، يستخدم لتخزين أعداد خارج نطاق int. |
long population = 7000000000L; |
float |
4 | عدد عشري (فاصلة عائمة) بدقة واحدة. | float temperature = 36.6f; |
double |
8 | عدد عشري (فاصلة عائمة) بدقة مضاعفة، وهو الأكثر شيوعًا للأعداد العشرية. | double price = 19.99; |
char |
2 | حرف واحد (يخزن رموز Unicode). يُكتب بين علامتي اقتباس مفردة ' '. |
char grade = 'A'; |
boolean |
1 بت | قيمة منطقية: true (صحيح) أو false (خطأ). | boolean isActive = true; |
رغم أننا نستخدم String لتخزين النصوص، إلا أنه ليس نوع بيانات بدائيًا (Primitive Type) في الجافا. String هو في الواقع كلاس (Class) في الجافا، وهو جزء من مكتبة الجافا القياسية. هذا يعني أن متغيرات String هي كائنات وليست قيمًا بسيطة، وسنتعمق في فهم الكلاسات والكائنات في الوحدات اللاحقة.
المتغير هو اسم يُعطى لمكان في الذاكرة لتخزين قيمة معينة. يجب تعريف المتغير قبل استخدامه في الجافا، ويتم ذلك بتحديد نوع البيانات واسم المتغير، ثم يمكن إسناد قيمة له.
// تعريف متغير من نوع int وتخزين قيمة فيه
int studentCount = 30;
// تعريف متغير نصي (String) وإسناد قيمة له
String userName = "Ahmed";
// تعريف متغير عشري (double)
double totalPrice;
totalPrice = 100.0; // إسناد القيمة لاحقًا
// يمكنك تعريف عدة متغيرات من نفس النوع في سطر واحد
int num1 = 10, num2 = 20, num3;
_ أو علامة الدولار $. (الاستخدام الشائع هو البدء بحرف).@, #, %).age و Age و AGE هي أسماء متغيرات مختلفة.firstName).int studentCount = 30; (صحيح)String userName = "Ahmed"; (صحيح)double total_Price = 100.0; (صحيح، ولكن totalPrice هو الأفضل وفقًا للاصطلاح)double 3totalPrice = 100.0; (خطأ: يبدأ برقم)int public = 5; (خطأ: public كلمة محجوزة)التعليقات هي نصوص يضعها المبرمج داخل الكود بهدف توضيحه وشرح أجزائه المختلفة. يتم تجاهل التعليقات تمامًا بواسطة المترجم (Compiler) ولا تُنفذ كجزء من البرنامج.
| النوع | الصيغة | الوصف | مثال |
|---|---|---|---|
| تعليق سطر واحد (Single-line Comment) | يبدأ بعلامتي شرطة مائلة مزدوجة // |
يستخدم لتعليق سطر واحد فقط. أي نص بعد // في نفس السطر يُعتبر تعليقًا. |
|
| تعليق متعدد الأسطر (Multi-line Comment) | يبدأ بـ /* وينتهي بـ */ |
يستخدم لكتابة تعليقات تمتد على عدة أسطر. كل المحتوى بين العلامتين يعتبر تعليقًا. | |
| تعليق توثيقي (Javadoc Comment) | يبدأ بـ /** وينتهي بـ */ |
يستخدم لتوليد توثيق (Documentation) تلقائي للبرنامج. عادةً ما يوضع قبل الكلاسات، الدوال، والمتغيرات لشرح وظيفتها. | |
// هذا برنامج بسيط يقوم بحساب المجموع وطباعته على الشاشة
public class Main {
/*
* الدالة الرئيسية (main method) هي نقطة بداية تنفيذ أي برنامج جافا.
* يتم استدعاؤها تلقائيًا عند تشغيل البرنامج.
*/
public static void main(String[] args) {
// تعريف متغيرين من نوع عدد صحيح وإسناد قيم لهما
int x = 5;
int y = 10;
// حساب المجموع وتخزينه في متغير جديد
int sum = x + y;
// طباعة الناتج على شاشة الكونسول
System.out.println("The sum is: " + sum); // "The sum is: 15"
}
}
لكل لغة برمجة، هناك كلمات وعلامات خاصة لها معانٍ محددة ولا يمكن استخدامها لأغراض أخرى.
الكلمات المحجوزة (Keywords) في الجافا هي كلمات لها معنى خاص ومحدد مسبقًا في اللغة. لا يمكن للمبرمج استخدام هذه الكلمات كأسماء للمتغيرات، الكلاسات، الدوال، أو أي معرفات أخرى. يجب على المبرمجين احترام هذه الكلمات واستخدامها فقط للغرض الذي صُممت من أجله.
public, class, static, void, if, else, for, while, switch, case, break, continue, int, double, boolean, true, false, null, new, return, this, super, try, catch, finally, throw, throws, import, package, private, protected, abstract, final, interface, implements, extends, enum, volatile, transient, strictfp, assert, goto (غير مستخدمة), const (غير مستخدمة).
علامات الترقيم هي رموز تستخدم لتنظيم الكود وتحديد هيكله ومنطقه.
| الرمز | الاسم | الاستخدام | مثال |
|---|---|---|---|
; |
فاصلة منقوطة (Semicolon) | تستخدم لإنهاء معظم الجمل البرمجية (Statements) في الجافا. | int x = 5; |
{} |
أقواس معقوفة (Curly Braces / Brackets) | تستخدم لتحديد نطاق الكتل البرمجية (Blocks)، مثل الكلاسات، الدوال، الجمل الشرطية (if, else)، وحلقات التكرار (for, while). | |
() |
أقواس (Parentheses) | تستخدم مع الدوال (لتمرير المعاملات)، ومع الجمل الشرطية (لتحديد الشرط)، ولتحديد أولوية العمليات الحسابية. | if (x > 10) { ... }myFunction(arg1, arg2);int result = (5 + 3) * 2; |
" " |
علامات اقتباس مزدوجة (Double Quotes) | تستخدم لتحديد النصوص الحرفية (String Literals). | String message = "Hello, Java!"; |
' ' |
علامات اقتباس مفردة (Single Quotes) | تستخدم لتحديد حرف واحد (Char Literals). | char initial = 'J'; |
تُعد أوامر الطباعة هي الطريقة الأساسية لعرض المخرجات للمستخدم على شاشة الكونسول. في جافا، نستخدم كائن System.out للقيام بذلك.
| الأمر | الوصف | مثال | المخرجات |
|---|---|---|---|
System.out.print() |
يطبع النص أو القيمة المعطاة بدون الانتقال إلى سطر جديد بعد الطباعة. يبقى مؤشر الطباعة في نفس السطر. | |
|
System.out.println() |
يطبع النص أو القيمة المعطاة ثم ينتقل إلى سطر جديد بعد الطباعة. هذا هو الأكثر استخدامًا. | |
|
public class PrintExample {
public static void main(String[] args) {
int num1 = 10;
int num2 = 5;
String greeting = "أهلاً بك يا طالب الأمن السيبراني!";
// طباعة نص ثابت
System.out.println("هذا برنامج بسيط للطباعة:");
// دمج نص مع متغير
System.out.println(greeting);
// طباعة متغيرات منفصلة في سطر واحد باستخدام print
System.out.print("العدد الأول هو: ");
System.out.println(num1); // ستطبع 10 ثم سطر جديد
// دمج العمليات الحسابية مباشرة مع الطباعة
System.out.println("ناتج جمع " + num1 + " و " + num2 + " هو: " + (num1 + num2));
// طباعة سطر فارغ
System.out.println();
System.out.println("انتهى البرنامج.");
}
}
هذا برنامج بسيط للطباعة:
أهلاً بك يا طالب الأمن السيبراني!
العدد الأول هو: 10
ناتج جمع 10 و 5 هو: 15
انتهى البرنامج.
سنقوم بكتابة برنامج بسيط يقوم بحساب المتوسط الحسابي لثلاث درجات وطباعته. يوضح هذا كيفية تعريف المتغيرات، إسناد القيم، وإجراء العمليات الحسابية الأساسية.
public class AverageCalculator {
public static void main(String[] args) {
// تعريف المتغيرات لتخزين الدرجات (استخدام double للتعامل مع الكسور)
double grade1 = 85.5;
double grade2 = 90.0;
double grade3 = 77.5;
// حساب المجموع الكلي للدرجات
double totalGrades = grade1 + grade2 + grade3;
// حساب المتوسط الحسابي (تذكر تقسيم على عدد الدرجات)
double average = totalGrades / 3; // أو (grade1 + grade2 + grade3) / 3;
// طباعة الناتج للمستخدم
System.out.println("الدرجة الأولى: " + grade1);
System.out.println("الدرجة الثانية: " + grade2);
System.out.println("الدرجة الثالثة: " + grade3);
System.out.println("-------------------------");
System.out.println("المتوسط الحسابي للدرجات هو: " + average);
}
}
الدرجة الأولى: 85.5
الدرجة الثانية: 90.0
الدرجة الثالثة: 77.5
-------------------------
المتوسط الحسابي للدرجات هو: 84.33333333333333
int ونوع البيانات double في الجافا، ومتى تستخدم كلاً منهما؟اكتب برنامج جافا يقوم بالمهام التالية:
double باسم dollarAmount وأسند له قيمة ثابتة (مثلاً 50.0).double باسم exchangeRate وأسند له سعر الصرف الثابت (3.75 ريال سعودي لكل دولار).riyalsAmount.System.out.println() بحيث تظهر الرسالة كالتالي: "المبلغ بالدولار: 50.0 دولار = [القيمة بالريال] ريال سعودي."+ لدمج النصوص مع المتغيرات في جمل الطباعة.
اكتب برنامج جافا يستخدم أوامر الطباعة لطباعة جدول الضرب للرقم 5 من 1 إلى 10. يجب أن يظهر الناتج كالتالي:
5 × 1 = 5
5 × 2 = 10
...
5 × 10 = 50
* مباشرة داخل جملة الطباعة.
تهدف هذه الوحدة إلى تمكين الطالب من فهم:
int، double، char، و boolean.System.out.print() و System.out.println() لعرض المخرجات على الشاشة.