البرمجة الكائنية (OOP) عمليًا: الأصناف، الوراثة، والتغليف

  • البرمجة
  • بقلم المهندس محمد صقر
  • 4 دقائق قراءة
البرمجة الكائنية (OOP) عمليًا: الأصناف، الوراثة، والتغليف

البرمجة الكائنية (Object-Oriented Programming - OOP) هي أحد أهم الأساليب الحديثة في تطوير البرمجيات.

تُستخدم في لغات مثل Python وJava وC++ وC#، وتُعتبر حجر الأساس لبناء أنظمة معقدة ومنظمة وسهلة الصيانة.

في هذا المقال، سنأخذك إلى تطبيق عملي شامل لمفاهيم OOP، وسنتعرف على:

  • ما هي البرمجة الكائنية ولماذا تُستخدم؟
  • كيفية إنشاء الأصناف (Classes) والكائنات (Objects).
  • مفهوم الوراثة (Inheritance) لإعادة استخدام الكود.
  • مفهوم التغليف (Encapsulation) لحماية البيانات.
  • أمثلة عملية بلغة بايثون مع شرح مفصل لكل خطوة.

🧩 أولًا: ما هي البرمجة الكائنية (OOP)؟

البرمجة الكائنية تعتمد على تمثيل العناصر في البرنامج ككائنات (Objects) تحتوي على بيانات وسلوك.

كل كائن ينتمي إلى صنف (Class) يحدد خصائصه ووظائفه.

🎯 الفكرة ببساطة: بدل أن تكتب كودًا ضخمًا ومعقدًا، تقسمه إلى “كائنات” مستقلة — مثل “سيارة”، “مستخدم”، “منتج”، وهكذا.

اقرأ أيضًاالمستقبل الرقمي كيف ستغير تقنيات الواقع المعزز (AR)

🧱 ثانيًا: مفهوم الصنف (Class) والكائن (Object)

🔹 الصنف (Class)

هو القالب (Blueprint) الذي نُنشئ منه الكائنات.

يُعرّف الخصائص (Attributes) والدوال (Methods).

🔹 الكائن (Object)

هو نسخة حقيقية من الصنف تحتوي على بيانات فعلية.

🧠 مثال بلغة Python:

class Car: def __init__(self, brand, model): self.brand = brand self.model = model def start(self): print(f"{self.brand} {self.model} بدأت التشغيل 🚗") # إنشاء كائنات من الصنف
car1 = Car("Toyota", "Corolla")
car2 = Car("BMW", "X5") car1.start()
car2.start()

🟢 النتيجة:

Toyota Corolla بدأت التشغيل 🚗
BMW X5 بدأت التشغيل 🚗

🔸 __init__: دالة تُسمى البنّاء (Constructor) تُستخدم لتهيئة الكائن عند إنشائه.

🔸 self: تشير إلى الكائن نفسه (مثل “أنا” في الجملة).

🧬 ثالثًا: الوراثة (Inheritance)

الوراثة تسمح لك بإنشاء صنف جديد يعتمد على صنف موجود مسبقًا، بحيث يرث خصائصه ووظائفه.

هذا يوفر الوقت ويُقلل تكرار الكود.

🧠 مثال عملي:

class Vehicle: def __init__(self, brand): self.brand = brand def drive(self): print(f"{self.brand} تتحرك للأمام 🚙") # صنف جديد يرث من Vehicle
class Car(Vehicle): def __init__(self, brand, model): super().__init__(brand) self.model = model def info(self): print(f"السيارة: {self.brand} {self.model}") # كائن من الصنف الفرعي
car = Car("Tesla", "Model S")
car.drive()
car.info()

🟢 النتيجة:

Tesla تتحرك للأمام 🚙 السيارة: Tesla Model S

🔹 الكلمة المفتاحية super() تُستخدم لاستدعاء دوال الصنف الأب.

🔹 الوراثة تُساعد في بناء “سلاسل” من الأصناف بحيث تتشارك الخصائص والوظائف.

🔒 رابعًا: التغليف (Encapsulation)

التغليف هو حماية بيانات الكائن من الوصول أو التعديل المباشر من خارج الصنف.

يتم ذلك عبر جعل الخصائص “خاصة” واستخدام “دوال تحكم”.

🧠 مثال:

class BankAccount: def __init__(self, owner, balance): self.owner = owner self.__balance = balance # خاص (Private) def deposit(self, amount): self.__balance += amount print(f"تم إيداع {amount} ريال. الرصيد الجديد: {self.__balance}") def withdraw(self, amount): if amount <= self.__balance: self.__balance -= amount print(f"تم سحب {amount} ريال. الرصيد المتبقي: {self.__balance}") else: print("رصيد غير كافٍ ❌") # تجربة الصنف
acc = BankAccount("أحمد", 1000)
acc.deposit(500)
acc.withdraw(200)
acc.withdraw(2000)

🟢 النتيجة:

تم إيداع 500 ريال. الرصيد الجديد: 1500 تم سحب 200 ريال. الرصيد المتبقي: 1300 رصيد غير كافٍ ❌

🔸 الخاصية __balance لا يمكن الوصول إليها من خارج الصنف مباشرة.

🔸 هذه الميزة تمنع التلاعب غير المقصود في البيانات الحساسة.

🧠 خامسًا: التعدد الشكلي (Polymorphism) – لمحة سريعة

رغم أننا سنفصل في مقال لاحق، من المفيد الإشارة إلى مفهوم التعدد الشكلي.

وهو يعني أن نفس الدالة يمكن أن تعمل بشكل مختلف بحسب الصنف الذي تستخدمه.

مثال مبسط:

class Animal: def sound(self): print("صوت الحيوان") class Dog(Animal): def sound(self): print("الكلب ينبح 🐶") class Cat(Animal): def sound(self): print("القط يموء 🐱") animals = [Dog(), Cat()]
for a in animals: a.sound()

🟢 النتيجة:

الكلب ينبح 🐶 القط يموء 🐱

⚙️ سادسًا: لماذا OOP مهمة؟

الميزة الوصف
🧩 التنظيم تقسم المشروع إلى وحدات مستقلة يمكن العمل عليها بسهولة.
🔁 إعادة الاستخدام الوراثة تُقلل من تكرار الكود.
🔒 الأمان التغليف يحمي البيانات الحساسة.
⚙️ التوسعية يسهل إضافة ميزات جديدة دون كسر الكود القديم.
🧠 الفهم الكود يصبح أقرب للواقع (أشخاص، سيارات، منتجات...).

💡 سابعًا: تطبيق عملي متكامل — إدارة متجر بسيط

class Product: def __init__(self, name, price): self.name = name self.price = price def info(self): return f"{self.name} - {self.price} ريال" class Electronic(Product): def __init__(self, name, price, warranty): super().__init__(name, price) self.warranty = warranty def info(self): return f"{self.name} - {self.price} ريال (ضمان {self.warranty} سنة)" # الاستخدام
p1 = Product("كتاب برمجة", 50)
p2 = Electronic("حاسوب محمول", 4000, 2) print(p1.info())
print(p2.info())

🟢 النتيجة:

كتاب برمجة - 50 ريال حاسوب محمول - 4000 ريال (ضمان 2 سنة)

🔗 روابط خارجية موثوقة

🏁 الخلاصة

البرمجة الكائنية ليست مجرد “أسلوب”، بل طريقة تفكير في تصميم البرامج.

بمجرد أن تتقن مفاهيم الأصناف، الوراثة، والتغليف، ستتمكن من كتابة كود أكثر احترافية وتنظيمًا.

تذكر دائمًا:

“البرمجة الجيدة هي التي تجعل التعقيد يبدو بسيطًا.” 💡
ص
المهندس محمد صقر

مؤسس صقر ويب، يكتب عن تطوير المواقع والسيو والتسويق الرقمي من خبرة 15 سنة في المشاريع.

محتاج مساعدة في تنفيذ ده على موقعك؟

فريق صقر ويب ينفّذ لك ما في المقال: من تصميم الموقع وسرعته وحمايته حتى السيو والإعلانات.

اتصل بنارد سريع

تواصل معنا مباشرةمتاحين يوميًا

+20 100 006 2434الخط الرئيسي
+20 110 070 0484المبيعات والدعم