البرمجة الكائنية (Object-Oriented Programming - OOP)
الدرس التاسع من بايثون: البرمجة الكائنية (OOP) ، وهي نمط برمجة يعتمد على استخدام الفئات (Classes) والكائنات (Objects) .
تعلم بايثون
February 5, 2025

الدرس التاسع: البرمجة الكائنية (Object-Oriented Programming - OOP)
مرحبًا بك في الدرس التاسع من سلسلة تعلم لغة بايثون! في هذا الدرس، سنركز على البرمجة الكائنية (OOP) ، وهي نمط برمجة يعتمد على استخدام الفئات (Classes) والكائنات (Objects) . البرمجة الكائنية هي واحدة من أكثر الأساليب شيوعًا في البرمجة الحديثة، وتُستخدم في العديد من التطبيقات الكبيرة مثل تطوير الألعاب، تحليل البيانات، وتطوير الويب.
1. ما هي البرمجة الكائنية؟
البرمجة الكائنية هي نمط برمجة يعتمد على مفهوم الكائنات (Objects) التي تمثل كيانات حقيقية أو افتراضية. كل كائن يتكون من:
- خصائص (Attributes): تمثل البيانات أو الحالة الخاصة بالكائن.
- أساليب (Methods): تمثل السلوكيات أو الإجراءات التي يمكن أن يقوم بها الكائن.
أمثلة على الكائنات
-
سيارة:
- الخصائص: اللون، الطراز، عدد الأبواب.
- الأساليب: تشغيل السيارة، إيقاف السيارة.
-
شخص:
- الخصائص: الاسم، العمر، المدينة.
- الأساليب: المشي، التحدث.
2. الفئات (Classes) والكائنات (Objects)
أ. الفئة (Class)
الفئة هي قالب أو تصميم يحدد كيفية بناء الكائنات. يمكنك اعتبار الفئة كـ "خريطة" تُحدد الخصائص والأساليب التي سيحتوي عليها الكائن.
ب. الكائن (Object)
الكائن هو مثيل (Instance) من الفئة. عندما تقوم بإنشاء كائن، فإنك تُنشئ نسخة جديدة من الفئة مع قيم خاصة بها.
3. إنشاء فئة وكائن
أ. تعريف فئة
تُعرف الفئة باستخدام الكلمة المفتاحية class
.
class Car:
def __init__(self, color, model):
self.color = color # خاصية
self.model = model # خاصية
def start(self): # أسلوب
print(f"The {self.color} {self.model} is starting.")
def stop(self): # أسلوب
print(f"The {self.color} {self.model} is stopping.")
ب. إنشاء كائن
لإنشاء كائن من الفئة، نقوم بتسمية الفئة وإعطائها القيم المطلوبة.
my_car = Car("Red", "Toyota")
my_car.start() # النتيجة: The Red Toyota is starting.
my_car.stop() # النتيجة: The Red Toyota is stopping.
4. البناء (__init__
) وأسلوب الذات (self
)
أ. دالة البناء (__init__
)
دالة __init__
هي دالة خاصة تُستخدم لتهيئة الكائن عند إنشائه. يتم استدعاؤها تلقائيًا عند إنشاء كائن جديد.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Hello, my name is {self.name} and I am {self.age} years old.")
ب. أسلوب الذات (self
)
كل دالة داخل الفئة تحتاج إلى معلمة خاصة تُسمى self
. هذه المعلمة تشير إلى الكائن نفسه وتُستخدم للوصول إلى الخصائص والأساليب الخاصة بالكائن.
person = Person("Ali", 25)
person.greet() # النتيجة: Hello, my name is Ali and I am 25 years old.
5. الوراثة (Inheritance)
الوراثة هي مفهوم يسمح لك بإنشاء فئة جديدة تستند إلى فئة موجودة. الفئة الجديدة تُسمى الفئة الفرعية (Child Class) ، والفئة الأصلية تُسمى الفئة الأم (Parent Class) .
أ. إنشاء فئة فرعية
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} makes a sound.")
class Dog(Animal):
def speak(self):
print(f"{self.name} says Woof!")
class Cat(Animal):
def speak(self):
print(f"{self.name} says Meow!")
ب. استخدام الفئة الفرعية
dog = Dog("Buddy")
dog.speak() # النتيجة: Buddy says Woof!
cat = Cat("Kitty")
cat.speak() # النتيجة: Kitty says Meow!
6. التغليف (Encapsulation)
التغليف هو مفهوم يجعل الخصائص والأساليب داخل الكائن غير قابلة للوصول المباشر من الخارج. يتم ذلك باستخدام الخصائص الخاصة (Private Attributes) التي تبدأ بشرطة سفلية مزدوجة __
.
أ. استخدام الخصائص الخاصة
class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.__balance = balance # خاصية خاصة
def deposit(self, amount):
self.__balance += amount
print(f"Deposited {amount}. New balance: {self.__balance}")
def withdraw(self, amount):
if amount <= self.__balance:
self.__balance -= amount
print(f"Withdrew {amount}. New balance: {self.__balance}")
else:
print("Insufficient funds.")
ب. استخدام الكائن
account = BankAccount("Ali", 1000)
account.deposit(500) # النتيجة: Deposited 500. New balance: 1500
account.withdraw(200) # النتيجة: Withdrew 200. New balance: 1300
# account.__balance # خطأ: لا يمكن الوصول إلى الخاصية الخاصة مباشرة
7. التجريد (Abstraction)
التجريد هو مفهوم يُستخدم لإخفاء التفاصيل المعقدة وعرض فقط الواجهات الأساسية للمستخدم. في بايثون، يمكنك استخدام الدوال المجردة (Abstract Methods) لتحقيق التجريد.
أ. إنشاء فئة مجردة
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
ب. استخدام الكائن
circle = Circle(5)
print(circle.area()) # النتيجة: 78.5
8. تطبيقات عملية
تطبيق 1: إدارة الطلاب
class Student:
def __init__(self, name, age, grade):
self.name = name
self.age = age
self.grade = grade
def display_info(self):
print(f"Name: {self.name}, Age: {self.age}, Grade: {self.grade}")
student = Student("Ahmed", 20, "A")
student.display_info() # النتيجة: Name: Ahmed, Age: 20, Grade: A
تطبيق 2: نظام البنك
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance
def deposit(self, amount):
self.balance += amount
print(f"Deposited {amount}. New balance: {self.balance}")
def withdraw(self, amount):
if amount > self.balance:
print("Insufficient funds.")
else:
self.balance -= amount
print(f"Withdrew {amount}. New balance: {self.balance}")
account = BankAccount("Ali", 1000)
account.deposit(500) # النتيجة: Deposited 500. New balance: 1500
account.withdraw(200) # النتيجة: Withdrew 200. New balance: 1300
9. نصائح حول البرمجة الكائنية
-
استخدام الفئات بشكل مناسب:
لا تقم بإنشاء فئات إلا إذا كنت بحاجة إلى تمثيل كائنات ذات خصائص وسلوكيات محددة. -
تجنب التكرار باستخدام الوراثة:
إذا كانت لديك فئات مشتركة في الخصائص أو الأساليب، استخدم الوراثة لتقليل التكرار. -
التغليف لحماية البيانات:
استخدم الخصائص الخاصة لمنع الوصول المباشر إلى بيانات الكائن من الخارج. -
التجريد لتقليل التعقيد:
استخدم التجريد لإخفاء التفاصيل المعقدة وجعل الكود أكثر سهولة في الاستخدام.
الخاتمة
في هذا الدرس، تعلمت أساسيات البرمجة الكائنية (OOP) وكيفية استخدام الفئات والكائنات في بايثون. البرمجة الكائنية هي أداة قوية تساعدك على تنظيم الكود وجعله أكثر قابلية لإعادة الاستخدام.
في الدرس القادم، سنتحدث عن المكتبات الشهيرة في بايثون مثل NumPy
و Pandas
وكيفية استخدامها في تحليل البيانات. استمر في الممارسة ولا تتردد في طرح الأسئلة إذا كنت بحاجة إلى مساعدة!
🚀 أنت الآن على الطريق الصحيح لتصبح مبرمجًا محترفًا!
التعليقات

لا يوجد اي تعليقات
يرجى تسجيل الدخول لترك تعليق