الكائنات والفئات (Classes & Objects)

في هذا الدرس رح ندخل لعالم جديد داخل C++ — عالم التفكير الكائني Object-Oriented Programming (OOP).
الفكرة هون مش بس كيف تكتب كود يعمل، بل كيف تصمم “نظام برمجي متكامل” مبني على الواقع.

بدنا نحكي عن:

  • ما هي الفئات (Classes)؟
  • ما هو الكائن (Object)؟
  • كيف ننشئ Class و Object في C++
  • مفهوم الخصوصية (Public / Private / Protected)
  • كيف تتعامل C++ مع البيانات داخل الكائنات؟
  • أمثلة عملية + شروحات مفصلة

🚀 1. مقدمة: لماذا وُجدت الـ Classes أصلًا؟

لما بدأت لغات البرمجة الأولى مثل C، كان الكود كله عبارة عن دوال (Functions) ومتغيرات (Variables) منتشرة في كل مكان.
لكن مع زيادة تعقيد البرامج، صار صعب إدارتها.
هون ظهرت فكرة البرمجة الكينونية (OOP) كطريقة لتنظيم الكود.

الفكرة باختصار:
نعامل الأشياء في البرنامج مثل الأشياء في الحياة الواقعية.
الطالب = كائن (Object)
يمتلك خصائص (Attributes) مثل الاسم والعمر،
ويقوم بسلوكيات (Methods) مثل الدراسة أو التسجيل.

ومن هون ظهرت الـ Classes.


🏗️ 2. ما هي الفئة (Class)؟

الفئة Class هي عبارة عن قالب أو مخطط Blueprint لإنشاء كائنات (Objects).
تحتوي على:

  • خصائص (Attributes / Variables)
  • ودوال (Methods / Functions)

يعني بتقدر تقول إن الـ Class مثل “قالب البيت”، أما الـ Object هو “بيت فعلي مبني من القالب”.


🔹 مثال بسيط على Class:

#include <iostream>
using namespace std;

class Student {
public:                // مستوى الوصول
    string name;       // خاصية
    int age;           // خاصية

    void sayHello() {  // دالة داخل الفئة
        cout << "مرحباً، اسمي " << name << " وعمري " << age << " سنة." << endl;
    }
};

int main() {
    Student s1;        // إنشاء كائن من الفئة Student
    s1.name = "محمد";
    s1.age = 20;
    s1.sayHello();     // استدعاء الدالة داخل الكائن
    return 0;
}

📤 النتيجة:

مرحباً، اسمي محمد وعمري 20 سنة.

🧩 3. ما هو الكائن (Object)؟

الكائن هو نسخة حقيقية من الفئة (Class).
كل كائن بيحتوي على قيمه الخاصة من المتغيرات، ويقدر يستخدم الدوال المعرفة داخل الفئة.

مثلاً:

  • عندك Class باسم Student
  • بتنشئ منه 3 كائنات: Student s1, s2, s3;
  • كل كائن منهم بيقدر يكون له بيانات مختلفة: s1.name = "أحمد"; s2.name = "ليلى"; s3.name = "محمد";

🔐 4. الخصوصية (Access Modifiers)

في C++، كل عنصر داخل الفئة (سواء متغير أو دالة) له مستوى خصوصية.
وهذا هو اللي بيحدد “مين يقدر يشوفه ويعدله”.

مستوى الوصولالمعنىالوصول من خارج الفئة
publicعام✅ مسموح
privateخاص❌ ممنوع
protectedمحميفقط داخل الوراثة ✅

🔸 4.1 public

أي متغير أو دالة معلن عنها كـ public يمكن الوصول إليها من أي مكان في الكود.

class Car {
public:
    string brand;
    void showBrand() {
        cout << "العلامة التجارية: " << brand << endl;
    }
};

🔸 4.2 private

أي متغير أو دالة معلن عنها كـ private لا يمكن الوصول إليها إلا من داخل الفئة نفسها.

class BankAccount {
private:
    double balance; // لا يمكن الوصول إليها من الخارج

public:
    void setBalance(double amount) {
        balance = amount;
    }
    void showBalance() {
        cout << "الرصيد الحالي: " << balance << endl;
    }
};

int main() {
    BankAccount acc;
    // acc.balance = 500; ❌ خطأ، المتغير خاص
    acc.setBalance(500); // ✅ صحيح
    acc.showBalance();
}

📤 النتيجة:

الرصيد الحالي: 500

🔸 4.3 protected

يتم استخدامه غالباً في الوراثة (Inheritance)، بحيث لا يكون المتغير ظاهرًا للعالم الخارجي، لكنه متاح للفئات التي ترث من الفئة الأم.

class Human {
protected:
    string name;
};

class Employee : public Human {
public:
    void setName(string n) {
        name = n; // مسموح لأن Employee ترث من Human
    }
    void showName() {
        cout << "الاسم: " << name << endl;
    }
};

🧱 5. مثال شامل يجمع كل المستويات

#include <iostream>
using namespace std;

class Employee {
private:
    int salary;           // لا يمكن الوصول إليه إلا من داخل الفئة

protected:
    string position;      // يمكن الوصول إليه من فئة فرعية فقط

public:
    string name;          // يمكن الوصول إليه من أي مكان

    void setSalary(int s) {
        salary = s;
    }

    void showInfo() {
        cout << "الاسم: " << name << endl;
        cout << "الوظيفة: " << position << endl;
        cout << "الراتب: " << salary << endl;
    }
};

int main() {
    Employee e1;
    e1.name = "محمد";
    e1.setSalary(5000);
    // e1.salary = 5000; ❌ خطأ
    e1.showInfo();
    return 0;
}

📤 النتيجة:

الاسم: محمد
الوظيفة:
الراتب: 5000

🧠 6. ملخص سريع

الكلمة المفتاحيةأين تُستخدممن يستطيع الوصول
publicفي أي مكانالجميع
privateداخل نفس الفئة فقطلا أحد من الخارج
protectedالفئة والفئات المشتقة منهاالوراثة فقط

⚙️ 7. منطق البرمجة الكينونية

بعد ما تفهم class و object، بتبدأ C++ تأخذ شكل مختلف تمامًا.
اللغة تصير “واقعية” أكثر:

  • بدل ما تكون عندك عشرات المتغيرات المبعثرة، بتجمعهم داخل فئة واحدة تمثل كيان واقعي.
  • بدل ما تكتب دوال منفصلة، بتربطها بالكائن اللي يخصها.

وهكذا تبني برامج ضخمة، منظمة، وقابلة للتوسيع.


📘 8. تطبيق عملي: نظام بسيط لإدارة الطلاب

#include <iostream>
using namespace std;

class Student {
private:
    int id;
    float grade;

public:
    string name;

    void setData(int i, string n, float g) {
        id = i;
        name = n;
        grade = g;
    }

    void showData() {
        cout << "ID: " << id << endl;
        cout << "الاسم: " << name << endl;
        cout << "الدرجة: " << grade << endl;
    }
};

int main() {
    Student s1, s2;

    s1.setData(1, "محمد", 95.4);
    s2.setData(2, "أحمد", 88.2);

    s1.showData();
    cout << "-----------------" << endl;
    s2.showData();

    return 0;
}

📤 النتيجة:

ID: 1
الاسم: محمد
الدرجة: 95.4
-----------------
ID: 2
الاسم: أحمد
الدرجة: 88.2

🌐 9. روابط خارجية موثوقة

🔗 cppreference – تعريف الفئات والكائنات
https://en.cppreference.com/w/cpp/language/class

🔗 GeeksForGeeks – Classes & Objects in C++
https://www.geeksforgeeks.org/c-classes-and-objects/

🔗 W3Schools – C++ Classes and Objects
https://www.w3schools.com/cpp/cpp_classes.asp

🔗 Programiz – C++ OOP Explained
https://www.programiz.com/cpp-programming/object-class


🧩 الخلاصة

الفئة (Class) هي أساس البرمجة الكينونية — هي اللي بتحول الكود من “سلسلة أوامر” إلى “نظام كائنات واقعي”.
أما الكائن (Object) فهو النسخة الحقيقية اللي بتتعامل معها داخل البرنامج.

  • public يسمح بالوصول الكامل.
  • private يحمي البيانات من التعديل المباشر.
  • protected بيستخدم غالبًا بالوراثة.

اللي فهم هالدرس فهم فعليًا القلب الأول للـ OOP.
ومن هون تبدأ الرحلة نحو المفاهيم الأعمق مثل الـ Constructors، الوراثة، التغليف، والتعددية (Polymorphism).


اكتشاف المزيد من كود التطور

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك رد

Scroll to Top