كورس C++ المتقدم – الحلقة الثامنة: Advanced OOP & Design Patterns
#برمجة
مقدمة
مرحباً بك في الحلقة الثامنة من المستوى المتقدم في C++.
في الحلقات السابقة تعلمنا:
- STL المتقدم (map, set, algorithms)
- File Handling
- Multithreading
- Smart Pointers
- Templates و Lambdas
اليوم ندخل إلى مرحلة مهمة جداً في البرمجة الاحترافية:
Advanced OOP (البرمجة الكائنية المتقدمة)
ثم نبدأ أول لمحة عن:
Design Patterns
ما هي OOP؟
البرمجة الكائنية تعني:
تنظيم البرنامج على شكل كائنات (Objects)
أساسيات OOP
- Class
- Object
- Encapsulation
- Inheritance
- Polymorphism
أولاً: Inheritance المتقدم
الفكرة
كلاس يرث خصائص كلاس آخر
مثال بسيط
#include <iostream>
using namespace std;
class Animal
{
public:
void eat()
{
cout << "Eating..." << endl;
}
};
الوراثة
class Dog : public Animal
{
public:
void bark()
{
cout << "Barking..." << endl;
}
};
الاستخدام
int main()
{
Dog d;
d.eat();
d.bark();
return 0;
}
الناتج
Eating...
Barking...
أنواع الوراثة
| النوع | المعنى |
|---|---|
| public | الحفاظ على الصلاحيات |
| private | إخفاء الخصائص |
| protected | محدود داخل الوراثة |
ثانياً: Polymorphism (تعدد الأشكال)
الفكرة
نفس الدالة لكن سلوك مختلف
مثال
class Animal
{
public:
virtual void sound()
{
cout << "Animal sound" << endl;
}
};
كلاس مشتق
class Dog : public Animal
{
public:
void sound() override
{
cout << "Bark" << endl;
}
};
الاستخدام
int main()
{
Animal* a;
Dog d;
a = &d;
a->sound();
return 0;
}
الناتج
Bark
ما معنى virtual؟
تعني:
اختيار الدالة أثناء التشغيل (Runtime)
ثالثاً: Abstraction
الفكرة
إخفاء التفاصيل وإظهار المهم فقط
مثال
class Shape
{
public:
virtual void draw() = 0;
};
كلاس مشتق
class Circle : public Shape
{
public:
void draw()
{
cout << "Drawing Circle" << endl;
}
};
الاستخدام
int main()
{
Circle c;
c.draw();
return 0;
}
ما معنى = 0 ؟
يعني:
دالة افتراضية خالصة (Pure Virtual Function)
رابعاً: Interfaces (في C++)
لا يوجد Interface رسمي، لكن يتم باستخدام Abstract Class.
مثال
class IShape
{
public:
virtual void draw() = 0;
};
خامساً: Design Patterns
ما هي؟
حلول جاهزة لمشاكل متكررة في البرمجة
1) Singleton Pattern
الفكرة
كائن واحد فقط في البرنامج
مثال
class Singleton
{
private:
static Singleton* instance;
Singleton() {}
public:
static Singleton* getInstance()
{
if(instance == nullptr)
{
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
الاستخدام
int main()
{
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance();
return 0;
}
لماذا Singleton؟
✔ قاعدة بيانات واحدة
✔ إعدادات البرنامج
✔ إدارة الاتصال
2) Factory Pattern
الفكرة
إنشاء كائنات بدون معرفة النوع مباشرة
مثال
class Animal
{
public:
virtual void sound() = 0;
};
كائنات
class Dog : public Animal
{
public:
void sound()
{
cout << "Bark";
}
};
class Cat : public Animal
{
public:
void sound()
{
cout << "Meow";
}
};
Factory
class AnimalFactory
{
public:
static Animal* create(string type)
{
if(type == "dog")
return new Dog();
if(type == "cat")
return new Cat();
return nullptr;
}
};
الاستخدام
int main()
{
Animal* a = AnimalFactory::create("dog");
a->sound();
return 0;
}
لماذا Factory؟
✔ فصل الكود
✔ مرونة عالية
✔ سهولة التوسع
مقارنة OOP المتقدم
| المفهوم | الوظيفة |
|---|---|
| Inheritance | إعادة استخدام الكود |
| Polymorphism | سلوك مختلف |
| Abstraction | إخفاء التفاصيل |
| Interface | تحديد قواعد |
أخطاء شائعة
❌ نسيان virtual
❌ عدم استخدام override
❌ إنشاء كائن من Abstract Class
❌ تسريب ذاكرة في Factory
تمرين 1
أنشئ كلاس Animal مع Inheritance.
تمرين 2
طبق Polymorphism على sound().
تمرين 3
اصنع Abstract Class لشكل هندسي.
تمرين 4
أنشئ Singleton لإعدادات البرنامج.
تمرين 5
اصنع Factory لإنشاء سيارات (Car, Bike).
ملخص الحلقة الثامنة
تعلمنا:
- Inheritance المتقدم
- Polymorphism الحقيقي
- Abstraction
- Abstract Classes
- Singleton Pattern
- Factory Pattern
- أساسيات تصميم البرمجيات
في الحلقة التاسعة سنتعلم:
🔥 Modern C++ Features (C++11/14/17/20)
وسنتعرف على:
- auto
- range-based loops
- nullptr
- smart improvements
- structured bindings
- optional / variant
- writing modern clean C++ 🚀

تعليقات
إرسال تعليق