الفئات والكائنات

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

##什么是 الفئة والكائن

المفهوم الوصف
الفئة (Class) مخطط أو قالب للكائنات
الكائن (Object) نسخة من الفئة — مثيل ملموس
💡 تشبيه: الفئة هي "مخطط المنزل"، والكائن هو "المنزل الفعلي المبني".

تعريف الفئة

JAVA
public class Student {
    // المتغيرات المثيلة (Instance Variables)
    private String name;
    private int age;
    private double grade;
    
    // المُنشئ (Constructor)
    public Student(String name, int age, double grade) {
        this.name = name;
        this.age = age;
        this.grade = grade;
    }
    
    // الدوال (Methods)
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void study() {
        System.out.println(name + " يدرس");
    }
    
    @Override
    public String toString() {
        return "الاسم: " + name + "، العمر: " + age + "، الدرجة: " + grade;
    }
}

إنشاء الكائنات

JAVA
public class Main {
    public static void main(String[] args) {
        // إنشاء كائن
        Student student1 = new Student("أحمد", 20, 95.5);
        Student student2 = new Student("محمد", 22, 88.0);
        
        // استخدام الدوال
        student1.study();  // أحمد يدرس
        System.out.println(student1.getName());  // أحمد
        
        // طباعة معلومات الكائن
        System.out.println(student1);  // الاسم: أحمد، العمر: 20، الدرجة: 95.5
    }
}

المُنشئ (Constructor)

المُنشئ هو دالة خاصة تُستدعى عند إنشاء الكائن.

JAVA
public class Student {
    private String name;
    private int age;
    
    // مُنشئ بدون معلمات
    public Student() {
        this.name = "غير معروف";
        this.age = 0;
    }
    
    // مُنشئ بمعلمات
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    // مُنشئ نسخ (Copy Constructor)
    public Student(Student other) {
        this.name = other.name;
        this.age = other.age;
    }
}

استخدام المُنشئات

JAVA
Student s1 = new Student();              // أحمد غير معروف
Student s2 = new Student("أحمد", 20);     // أحمد، 20
Student s3 = new Student(s2);             // نسخة من s2

الكلمات المفتاحية

this — الإشارة للكائن الحالي

JAVA
public class Student {
    private String name;
    
    public Student(String name) {
        this.name = name;  // this.name هو المتغير المثيل، name هو المعلمة
    }
}

static — متغيرات ودوال مشتركة

JAVA
public class Student {
    private String name;
    private static int count = 0;  // مشترك بين جميع الكائنات
    
    public Student(String name) {
        this.name = name;
        count++;
    }
    
    public static int getCount() {
        return count;
    }
}

// الاستخدام
Student s1 = new Student("أحمد");
Student s2 = new Student("محمد");
System.out.println(Student.getCount());  // 2

مثال كامل: بنك بسيط

JAVA
public class BankAccount {
    private String owner;
    private double balance;
    private static int totalAccounts = 0;
    
    public BankAccount(String owner, double initialBalance) {
        this.owner = owner;
        this.balance = initialBalance;
        totalAccounts++;
    }
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println("تم إيداع " + amount + " ريال");
        }
    }
    
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            System.out.println("تم سحب " + amount + " ريال");
        } else {
            System.out.println("رصيد غير كافٍ");
        }
    }
    
    public double getBalance() {
        return balance;
    }
    
    public static int getTotalAccounts() {
        return totalAccounts;
    }
    
    @Override
    public String toString() {
        return "الحساب: " + owner + "، الرصيد: " + balance + " ريال";
    }
}

// الاستخدام
BankAccount account = new BankAccount("أحمد", 1000);
account.deposit(500);    // تم إيداع 500 ريال
account.withdraw(200);   // تم سحب 200 ريال
System.out.println(account.getBalance());  // 1300.0
System.out.println(account);  // الحساب: أحمد، الرصيد: 1300.0 ريال

❓ أسئلة شائعة

س ما الفرق بين الفئة والكائن؟
ج الفئة هي المخطط، والكائن هو النسخة الفعلية.
س لماذا نستخدم private مع getters/setters؟
ج للتحقق من صحة البيانات ومنح التحكم في الوصول.
س هل يمكن أن تحتوي الفئة على أكثر من مُنشئ؟
ج نعم، هذا يسمى Overloading — مُنشئات مختلفة بعلمات مختلفة.

📖 ملخص

📝 تمارين

  1. مستطيل: أنشئ فئة Rectangle مع طول وعرض ودوال لحساب المساحة والمحيط
  2. شخص: أنشئ فئة Person مع اسم وعمر ودوال لعرض المعلومات
  3. عداد: أنشئ فئة Counter مع دوال لزيادة ونقصان وعرض القيمة

الدرس التالي

في الدرس التالي، سنتعلم التغليف — إخفاء البيانات وحمايتها.

100%