📦 فهم الفئات (Classes) في جافا: حجر الأساس في البرمجة كائنية التوجّه

مرحباً بك في عالم البناء المنظم! تخيّل أنك تريد بناء مدينة. قبل أن تضع أيّ مبنى، تحتاج إلى مخطط هندسي يصف كيف سيكون هذا المبنى: عدد الغرف، لون الجدران، شكل النوافذ. في جافا، الفئة (Class) هي هذا المخطط أو القالب الذي نصنع منه الكائنات.

ببساطة، الفئة هي وصف أو نموذج لأشياء من نفس النوع. فهي تحدد الخصائص (الصفات) والسلوكيات (الأفعال) التي ستتمتع بها الكائنات المنتمية إليها.


🏗️ هيكل الفئة (Class Structure)

لنفكر في مثال واقعي: سيارة. ما هي الصفات المشتركة بين معظم السيارات؟ لون، موديل، سرعة قصوى. وما هي الأفعال التي يمكن للسيارة القيام بها؟ التحرك، التوقف، إصدار صوت. في جافا، نترجم الصفات إلى متغيرات (Variables) أو خصائص (Attributes/Fields)، ونترجم الأفعال إلى دوال (Methods).

// هذا هو المخطط (Class) لسيارة
public class Car {
    // الخصائص (Attributes) - متغيرات تصف حالة الكائن
    String color;
    String model;
    int maxSpeed;

    // السلوكيات (Methods) - دوال تصف ما يمكن للكائن فعله
    void move() {
        System.out.println("السيارة تتحرك...");
    }

    void stop() {
        System.out.println("السيارة تتوقف.");
    }
}

في الكود أعلاه، قمنا بتعريف فئة اسمها Car. لاحظ أننا لم ننشئ سيارة فعلية بعد، بل أنشأنا فقط القالب الذي يمكننا من خلاله صنع أي عدد من السيارات لاحقاً.


🔨 كيف ننشئ كائناً (Object) من فئة؟

الآن، لنستخدم مخططنا (الفئة) لبناء سيارة حقيقية! نستخدم الكلمة المفتاحية new لإنشاء كائن (Object) أو نسخة (Instance) من الفئة.

public class Main {
    public static void main(String[] args) {
        // إنشاء كائن (سيارة) من الفئة Car
        Car myCar = new Car();

        // الآن يمكنني تعيين قيم لخصائص myCar
        myCar.color = "Red";
        myCar.model = "Toyota";
        myCar.maxSpeed = 200;

        // واستدعاء الدوال (السلوكيات) الخاصة بها
        myCar.move(); // ستطبع: السيارة تتحرك...
        myCar.stop(); // ستطبع: السيارة تتوقف.

        // يمكنني إنشاء سيارة أخرى (كائن آخر) من نفس الفئة
        Car yourCar = new Car();
        yourCar.color = "Blue";
        yourCar.model = "Honda";
        // لكل كائن بياناته الخاصة المستقلة
    }
}

الخلاصة: Car هي الفئة (القالب)، بينما myCar و yourCar هما كائنان (Objects) مستقلان تم إنشاؤهما من ذلك القالب، ولكل منهما قيمه المخزنة في الذاكرة.


⚙️ المُنشئ (Constructor): المُهيئ الذكي

لاحظ في المثال السابق أننا أنشأنا السيارة أولاً (new Car())، ثم قمنا بتعيين خصائصها سطراً تلو الآخر. ماذا لو أردنا إنشاء سيارة وبتعيين خصائصها في نفس لحظة الإنشاء؟ هنا يأتي دور المُنشئ (Constructor).

المنشئ هو دالة خاصة داخل الفئة تتم استدعاؤها تلقائياً عند إنشاء الكائن باستخدام new. وظيفتها الأساسية هي تهيئة حالة الكائن (تعيين القيم الأولية للخصائص).

public class Car {
    String color;
    String model;
    int maxSpeed;

    // هذا هو المُنشئ (Constructor)
    // 1. اسمه مطابق لاسم الفئة تماماً.
    // 2. ليس له نوع إرجاع (لا نكتب void أو int...).
    public Car(String carColor, String carModel, int carMaxSpeed) {
        color = carColor;
        model = carModel;
        maxSpeed = carMaxSpeed;
        System.out.println("A new car has been created from the model: " + model);
    }

    void move() {
        System.out.println("The " + model + " is moving...");
    }
}

// الآن في الدالة main
public class Main {
    public static void main(String[] args) {
        // إنشاء كائن باستخدام المُنشئ - نعطي القيم الأولية مباشرة
        Car myCar = new Car("Red", "Toyota", 200);
        // ستطبع تلقائياً: تم إنشاء سيارة جديدة من الموديل: تويوتا

        myCar.move(); // ستطبع: السيارة تويوتا تتحرك...

        // كائن آخر بقيم مختلفة
        Car yourCar = new Car("Blue", "Honda", 180);
    }
}

استخدام المُنشئ يجعل الكود أكثر تنظيماً وأماناً، حيث نضمن أن لكل كائن خصائص مُهيأة عند ولادته.


📝 ملخص الدرس

  • الفئة (Class): هي مخطط أو قالب نحدد فيه الخصائص (المتغيرات) والسلوكيات (الدوال) لمجموعة من الكائنات المتشابهة.
  • الكائن (Object): هو نسخة فعلية (Instance) تم إنشاؤها من الفئة، وله قيم حقيقية في الذاكرة.
  • الكلمة المفتاحية new: تُستخدم لإنشاء كائن جديد من فئة معينة.
  • المُنشئ (Constructor): هو دالة خاصة تُستدعى عند إنشاء الكائن لتهيئة قيمه الأولية. اسمه مطابق لاسم الفئة وليس له نوع إرجاع.