تطبيق OOP عمليًا | Person مع Methods بشرح تفصيلي للمبتدئين

20:00 دقائق مجاني

تطبيق يربط OOP بالممارسة: كلاس Person بخصائص خاصة وسلوكيات (Methods) لفهم فكرة "بيانات + سلوك في مكان واحد".

جوهر OOP — بيانات + سلوك

في البرمجة الكائنية لا نضع بيانات فقط داخل الكلاس — بل نضع أيضاً سلوكاً.

مثلاً: الشخص لديه اسم وعمر (بيانات)، لكنه أيضاً يستطيع أن يُعرّف بنفسه ويزيد عمره في عيد ميلاده (سلوك). هذا هو جوهر OOP.

💬 تشبيه: تخيّل بطاقة هوية — فيها بياناتك (اسم، عمر، عنوان). أما الشخص الحقيقي فلديه سلوك أيضاً: يتكلم، يمشي، يعمل. الكلاس في OOP يجمع الاثنين معاً.

📦 البيانات (Fields)

  • name — اسم الشخص
  • age — عمر الشخص

⚙️ السلوك (Methods)

  • introduce() — يعرّف بنفسه
  • birthday() — يزيد عمره سنة

كلاس Person — بيانات وسلوك

سنبني كلاساً متكاملاً يجمع private fields + Constructor + Methods:

Person.java
class Person {

    // ① البيانات — private لحماية الخصائص
    private String name;
    private int    age;

    // ② Constructor — تهيئة عند الإنشاء
    Person(String name, int age) {
        this.name = name;
        this.age  = age;
    }

    // ③ السلوك — دالة التعريف
    public void introduce() {
        System.out.println("اسمي " + name + " وعمري " + age);
    }

    // ④ السلوك — عيد الميلاد يزيد العمر
    public void birthday() {
        age++;
        System.out.println("🎂 عيد ميلاد سعيد " + name + "! عمرك الآن " + age);
    }

    // ⑤ السلوك — هل هو بالغ؟
    public boolean isAdult() {
        return age >= 18;
    }

}
① private

حماية البيانات

name و age لا يمكن تعديلها من خارج الكلاس — تطبيق Encapsulation.

② Constructor

تهيئة بسطر واحد

بدل تعبئة name وage يدوياً، Constructor يتولى ذلك عند الإنشاء.

③ introduce()

سلوك التعريف

دالة تُعرّف الشخص بنفسه — تصل لـ name وage مباشرةً لأنها داخل نفس الكلاس.

④ birthday()

سلوك عيد الميلاد

تزيد العمر بمقدار 1 — لاحظ أنها تعدّل البيانات الداخلية مباشرةً بأمان.

استخدام الكلاس داخل main

الآن ننشئ كائنات ونستدعي سلوكياتها:

Main.java
public class Main {
  public static void main(String[] args) {

    // إنشاء شخصين
    Person p1 = new Person("Sara", 20);
    Person p2 = new Person("Ahmed", 17);

    // التعريف
    p1.introduce();
    p2.introduce();

    // عيد ميلاد Sara
    p1.birthday();
    p1.introduce();

    // هل هم بالغون؟
    System.out.println("Sara بالغة؟ "  + p1.isAdult());
    System.out.println("Ahmed بالغ؟ " + p2.isAdult());
  }
}
🖥️
اسمي Sara وعمري 20
اسمي Ahmed وعمري 17
🎂 عيد ميلاد سعيد Sara! عمرك الآن 21
اسمي Sara وعمري 21
Sara بالغة؟  true
Ahmed بالغ؟ false
💡

لاحظ النقطة المهمة:

لم نكتب p1.age = 21 مباشرةً — بل استخدمنا p1.birthday(). هذا هو الفرق بين OOP والكود التقليدي — التعديل يمر عبر سلوك الكائن نفسه.

مقارنة — الأسلوب التقليدي مقابل OOP

لترى الفرق الحقيقي، قارن الطريقتين في كتابة نفس البرنامج:

❌ الأسلوب التقليدي

// متغيرات مبعثرة
String name1 = "Sara";
int    age1  = 20;
String name2 = "Ahmed";
int    age2  = 17;

// تعديل مباشر — غير محمي
age1 = age1 + 1;

// طباعة يدوية
System.out.println(name1 + " - " + age1);
System.out.println(name2 + " - " + age2);

✅ أسلوب OOP

// كائنات منظمة
Person p1 = new Person("Sara", 20);
Person p2 = new Person("Ahmed", 17);

// عبر السلوك — آمن ومنظم
p1.birthday();

// طباعة عبر Method
p1.introduce();
p2.introduce();

لماذا OOP أفضل؟

بيانات الشخص مجمّعة في كائن واحد — لا متغيرات مبعثرة
التعديل عبر Methods فقط — لا يمكن تغيير age مباشرةً بأرقام خاطئة
إضافة ميزة جديدة = إضافة Method جديدة فقط
مع 100 شخص، الكود يبقى نظيفاً ومنظماً

لماذا هذا الأسلوب أفضل للمبتدئ؟

🧠

تفكير بالأشياء لا بالمتغيرات

بدل التفكير في "متغير اسم وآخر عمر"، تفكر في "شخص له اسم وعمر وسلوك". هذا أقرب لطريقة تفكير الإنسان.

🔒

حماية البيانات تلقائياً

private + Methods تمنع إدخال قيم خاطئة — عمر سالب، اسم فارغ. الكود يحمي نفسه.

📈

سهولة التوسع

أي ميزة جديدة = Method جديدة فقط. بدون تغيير بقية الكود. هذا أساس المشاريع الكبيرة.

تمرين — طوّر كلاس Person 💪

🎯 المطلوب منك

١

أضف Method اسمها changeName

تستقبل اسماً جديداً وتغيّره — مع شرط أن الاسم ليس فارغاً.

public void changeName(String newName) {
if (!newName.isEmpty()) ...
}
٢

Method isAdult() موجودة — استخدمها

أنشئ شخصاً عمره 15 وآخر عمره 20 وتحقق من isAdult() لكل منهما.

٣

أنشئ 3 أشخاص مختلفين

واطبع تعريف كل واحد منهم باستخدام introduce().

أخطاء شائعة عند المبتدئين ⚠️

خطأ ١

نسيان public قبل Methods

❌ خطأ

void introduce() {...}

لا يمكن استدعاؤها من main

✅ صحيح

public void introduce() {...}
خطأ ٢

نسيان إنشاء كائن قبل استدعاء Method

❌ NullPointerException

Person p; p.introduce(); // p فارغة!

✅ صحيح

Person p = new Person(...); p.introduce();
خطأ ٣

الخلط بين this.name والمعامل name

this.name ← خاصية الكائن
name ← المعامل الوارد في Constructor
this.name = name ← خزّن المعامل في الخاصية ✅

📋 ملخص الدرس

الكلاس = بيانات (Fields) + سلوك (Methods)

السلوك عبر Methods — لا تعديل مباشر للبيانات

private + Methods = حماية وتنظيم

كل كائن مستقل بسلوكه الخاص

⏭️ في الدرس القادم:

سنختم الدورة بملخص شامل لكل ما تعلمته وخطة واضحة للخطوات القادمة في رحلتك البرمجية. 🎓