مقدمة إلى Polymorphism في بايثون
تُعتبر Polymorphism (تعدد الأشكال) من المفاهيم الأساسية في البرمجة الكائنية التوجه، وتسمح بكتابة أكواد مرنة وقابلة للتوسع. في لغة البرمجة بايثون، يُستخدم هذا المفهوم للسماح لكائنات من فئات مختلفة بتنفيذ واجهات أو طرق (Methods) بنفس الاسم، مما يجعل الكود أكثر تنظيمًا وأسهل في الفهم والصيانة. في هذا المقال، سنتعرف على كيفية تطبيق Polymorphism في بايثون من خلال أمثلة توضيحية تسهّل فهم هذا المفهوم الأساسي.
فهم Polymorphism في بايثون
Polymorphism في بايثون يعني القدرة على استخدام نفس واجهة البرمجة للتعامل مع كائنات من أنواع متعددة. الفكرة الأساسية هي أن نفس الدالة أو الطريقة يمكن أن تُستخدم مع كائنات من فئات مختلفة، وتتصرف بشكل مختلف بناءً على نوع الكائن. هذا يمكن أن يكون مفيدًا في الحالات التي تريد فيها تنفيذ عمليات مختلفة بناءً على أنواع البيانات المستخدمة، دون الحاجة إلى كتابة أكواد شرطية معقدة.
لنأخذ مثالاً بسيطًا لتوضيح Polymorphism. لنفترض أن لدينا فئتين: Dog وCat. كل فئة تحتوي على طريقة بإسم sound. عندما نقوم باستدعاء طريقة sound باستخدام كائن من نوع Dog، ستقوم بطباعة “Bark”، وعندما نقوم باستدعاء نفس الطريقة باستخدام كائن من نوع Cat، ستقوم بطباعة “Meow”.
class Dog:
def sound(self):
return "Bark"
class Cat:
def sound(self):
return "Meow"
def animal_sound(animal):
print(animal.sound())
dog = Dog()
cat = Cat()
animal_sound(dog) # Output: Bark
animal_sound(cat) # Output: Meow
تطبيق Polymorphism في البرمجة العملية
تطبيق Polymorphism في البرمجة العملية يمكن أن يكون مفيدًا في تقليل التعقيد وزيادة كفاءة الكود. على سبيل المثال، يمكن استخدام Polymorphism في تصميم واجهات المستخدم الرسومية، حيث يمكن أن يكون لديك عناصر واجهة مستخدم مختلفة مثل الأزرار والنصوص، وكل عنصر منها يمكن أن يكون له طريقة draw التي ترسم العنصر على الشاشة. يمكنك استدعاء نفس الطريقة draw لكل عنصر، وستقوم كل فئة بتنفيذ الرسم بطريقة مختلفة بناءً على نوع العنصر.
في المثال التالي، سنقوم بإنشاء فئتين: Circle وSquare، وكل فئة تحتوي على طريقة بإسم area لحساب المساحة. باستخدام Polymorphism، يمكننا استدعاء طريقة area لكل كائن بغض النظر عن نوعه، مما يجعل الكود أكثر مرونة.
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
class Square:
def __init__(self, side):
self.side = side
def area(self):
return self.side ** 2
def print_area(shape):
print(shape.area())
circle = Circle(5)
square = Square(4)
print_area(circle) # Output: 78.5
print_area(square) # Output: 16
باستخدام Polymorphism، تمكنا من كتابة دالة print_area التي تستقبل كائنًا وتستدعي طريقته area دون القلق حول نوع الكائن، مما يبسط عملية إضافة أنواع جديدة من الأشكال الهندسية في المستقبل.
