السبت - الخميس: 10:00 ص - 10:00 م

البرمجة الكائنية (OOP) في Java

البرمجة الكائنية (OOP) في Java

البرمجة الكائنية (OOP) في Java

البرمجة الكائنية (Object-Oriented Programming) هي نموذج برمجي يعتمد على مفهوم "الكائنات" التي تحتوي على البيانات والوظائف. Java هي لغة مصممة بالكامل على أساس البرمجة الكائنية، مما يجعلها مثالاً مثالياً لفهم هذه المفاهيم.

ما هي البرمجة الكائنية؟

البرمجة الكائنية هي طريقة لتنظيم الكود باستخدام "الكائنات" التي تمثل كيانات في العالم الحقيقي. كل كائن له خصائص (Properties) ووظائف (Methods) خاصة به.

المبادئ الأساسية للبرمجة الكائنية:

🏗️ الكلاسات والكائنات (Classes & Objects)

الكلاس هو القالب، والكائن هو النسخة المحددة من هذا القالب

// تعريف الكلاس
public class Car {
    // الخصائص (Properties)
    String brand;
    String color;
    int year;
    
    // الدوال (Methods)
    public void start() {
        System.out.println("السيارة تعمل");
    }
    
    public void stop() {
        System.out.println("السيارة متوقفة");
    }
}

// إنشاء كائن
Car myCar = new Car();
myCar.brand = "تويوتا";
myCar.color = "أحمر";
myCar.year = 2023;

🔒 التغليف (Encapsulation)

إخفاء التفاصيل الداخلية وتوفير واجهة للتفاعل

public class BankAccount {
    private double balance; // خاصية خاصة
    
    // دوال عامة للوصول للبيانات
    public double getBalance() {
        return balance;
    }
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
    
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
        }
    }
}

🧬 الوراثة (Inheritance)

إمكانية إنشاء كلاسات جديدة بناءً على كلاسات موجودة

// الكلاس الأساسي
public class Vehicle {
    String brand;
    int year;
    
    public void start() {
        System.out.println("المركبة تعمل");
    }
}

// الكلاس الموروث
public class Car extends Vehicle {
    int numberOfDoors;
    
    public void openTrunk() {
        System.out.println("فتح الصندوق");
    }
}

// الاستخدام
Car myCar = new Car();
myCar.brand = "BMW"; // موروث من Vehicle
myCar.numberOfDoors = 4; // خاص بـ Car
myCar.start(); // موروث من Vehicle

🔄 تعدد الأشكال (Polymorphism)

إمكانية استخدام نفس الواجهة لأشياء مختلفة

// واجهة مشتركة
public interface Shape {
    double getArea();
    double getPerimeter();
}

// تطبيق الواجهة
public class Circle implements Shape {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    public double getArea() {
        return Math.PI * radius * radius;
    }
    
    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }
}

public class Rectangle implements Shape {
    private double width, height;
    
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
    
    public double getArea() {
        return width * height;
    }
    
    public double getPerimeter() {
        return 2 * (width + height);
    }
}

مفاهيم متقدمة في Java OOP:

🏗️ البناء (Constructors)

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

public class Student {
    private String name;
    private int age;
    private String major;
    
    // Constructor افتراضي
    public Student() {
        this.name = "غير محدد";
        this.age = 0;
        this.major = "غير محدد";
    }
    
    // Constructor مع معاملات
    public Student(String name, int age, String major) {
        this.name = name;
        this.age = age;
        this.major = major;
    }
    
    // Constructor نسخ
    public Student(Student other) {
        this.name = other.name;
        this.age = other.age;
        this.major = other.major;
    }
}

🔧 Getters و Setters

دوال للوصول الآمن للخصائص

public class Person {
    private String name;
    private int age;
    
    // Getter
    public String getName() {
        return name;
    }
    
    // Setter
    public void setName(String name) {
        if (name != null && !name.isEmpty()) {
            this.name = name;
        }
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        if (age >= 0 && age <= 150) {
            this.age = age;
        }
    }
}

🔗 الواجهات (Interfaces)

عقود تحدد ما يجب أن تفعله الكلاسات

// تعريف الواجهة
public interface Drawable {
    void draw();
    void setColor(String color);
    String getColor();
}

// تطبيق الواجهة
public class Circle implements Drawable {
    private String color;
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
        this.color = "أسود";
    }
    
    public void draw() {
        System.out.println("رسم دائرة باللون " + color);
    }
    
    public void setColor(String color) {
        this.color = color;
    }
    
    public String getColor() {
        return color;
    }
}

مثال عملي: نظام إدارة المكتبة

// الكلاس الأساسي للكتاب
public class Book {
    private String title;
    private String author;
    private String isbn;
    private boolean isAvailable;
    
    public Book(String title, String author, String isbn) {
        this.title = title;
        this.author = author;
        this.isbn = isbn;
        this.isAvailable = true;
    }
    
    // Getters
    public String getTitle() { return title; }
    public String getAuthor() { return author; }
    public String getIsbn() { return isbn; }
    public boolean isAvailable() { return isAvailable; }
    
    // Methods
    public void borrow() {
        if (isAvailable) {
            isAvailable = false;
            System.out.println("تم استعارة الكتاب: " + title);
        } else {
            System.out.println("الكتاب غير متاح للاستعارة");
        }
    }
    
    public void returnBook() {
        isAvailable = true;
        System.out.println("تم إرجاع الكتاب: " + title);
    }
}

// كلاس الطالب
public class Student {
    private String name;
    private String studentId;
    private ArrayList<Book> borrowedBooks;
    
    public Student(String name, String studentId) {
        this.name = name;
        this.studentId = studentId;
        this.borrowedBooks = new ArrayList<>();
    }
    
    public void borrowBook(Book book) {
        if (book.isAvailable()) {
            book.borrow();
            borrowedBooks.add(book);
            System.out.println(name + " استعار " + book.getTitle());
        }
    }
    
    public void returnBook(Book book) {
        if (borrowedBooks.contains(book)) {
            book.returnBook();
            borrowedBooks.remove(book);
            System.out.println(name + " أرجع " + book.getTitle());
        }
    }
    
    public void displayBorrowedBooks() {
        System.out.println("الكتب المستعارة من قبل " + name + ":");
        for (Book book : borrowedBooks) {
            System.out.println("- " + book.getTitle() + " بواسطة " + book.getAuthor());
        }
    }
}

مزايا البرمجة الكائنية:

🔄 إعادة الاستخدام

يمكن استخدام الكلاسات في مشاريع مختلفة

🛠️ سهولة الصيانة

تغيير في كلاس واحد لا يؤثر على الآخرين

📦 التنظيم

تنظيم الكود في وحدات منطقية

🔒 الأمان

إخفاء البيانات الحساسة

أفضل الممارسات في Java OOP:

  • استخدم أسماء واضحة ومفهومة للكلاسات والخصائص
  • اجعل الخصائص خاصة (private) واستخدم getters/setters
  • استخدم الوراثة بحذر - "is-a" relationship
  • فضل التركيب (Composition) على الوراثة
  • استخدم الواجهات للانفصال بين الطبقات
  • تجنب الكلاسات الكبيرة جداً
  • استخدم الـ Constructor بشكل صحيح

أخطاء شائعة يجب تجنبها:

  • ❌ جعل جميع الخصائص عامة (public)
  • ❌ استخدام الوراثة بشكل مفرط
  • ❌ تجاهل مبدأ التغليف
  • ❌ إنشاء كلاسات كبيرة جداً
  • ❌ عدم استخدام الواجهات
  • ❌ تجاهل معالجة الأخطاء

مشروع تطبيقي: نظام إدارة الموظفين

ابني نظام إدارة موظفين يتضمن:

  • كلاس Employee أساسي
  • كلاسات Manager و Developer ترث من Employee
  • واجهة Payable لحساب الراتب
  • نظام لإدارة المهام والمشاريع

البرمجة الكائنية هي أساس البرمجة الحديثة. أتقنها في Java وستجدها في كل مكان!

تعلم Java والبرمجة الكائنية معنا

تواصل معنا

عبر الماسنجر او الهاتف