تُعتبر التشعبية من المفاهيم الأساسية والهامة في عالم البرمجة، وفي هذا المقال، سنلقي نظرة على كيفية تطبيق مبدأ التشعبية في لغة دارت (Dart). ولكن قبل أن نقف عند هذا المفهوم، يجب علينا أولاً فهم مفهوم الوراثة في لغة دارت، حيث تمثل أساسًا لفهم كيفية بناء التشعبية واستخدامها بشكل فعال.
مفهوم التشعبية في دارت:
التشعبية (Polymorphism) هي القدرة التي يمتلكها الكائن على اتخاذ أشكال متعددة. في العالم الحقيقي، لدينا القدرة على اتخاذ أشكال متعددة، فنحن يمكن أن نكون طالبًا، معلمًا، صديقًا وما إلى ذلك. بنفس الطريقة، في برمجة الكائنات OOP، التشعبية هي القدرة التي يتمتع بها الكائن على اتخاذ أشكال متعددة.
التشعبية من خلال استبدال الدوال (Method Overriding):
استبدال الأساليب أو الدوال (Method overriding) هي تقنية تتيح لك إنشاء دالة في الكلاس الابن تحمل نفس الاسم مثل الدالة في الكلاس الأب. وبذلك تقوم الدالة في الكلاس الابن بالاستبدال للدالة في الكلاس الأب.
الصيغة:
class ParentClass { void functionName() { // قم بتنفيذ الكود هنا } } class ChildClass extends ParentClass { @override void functionName() { // قم بتنفيذ الكود هنا } }
أمثلة على التشعبية في لغة دارت:
مثال 1: التشعبية من خلال استبدال الدوال في دارت
في هذا المثال، لدينا كلاس يسمى Animal (حيوان) يحتوي على دالة تسمى eat() (تناول الطعام). يتم استبدال هذه الدالة في الكلاس الابن المسمى Dog (كلب).
الكود:
class Animal { void eat() { print("Animal is eating"); } } class Dog extends Animal { @override void eat() { print("Dog is eating"); } } void main() { Animal animal = Animal(); animal.eat(); Dog dog = Dog(); dog.eat(); }
نتيجة الكود:
Animal is eating Dog is eating
مثال 2: التشعبية من خلال استبدال الداول في دارت
في هذا المثال، لدينا كلاس يسمى Vehicle (مركبة) يحتوي على دالة تسمى run() (التشغيل). يتم استبدال هذه الدالة في الكلاس الابن المسمى Bus (حافلة).
الكود:
class Vehicle { void run() { print("Vehicle is running"); } } class Bus extends Vehicle { @override void run() { print("Bus is running"); } } void main() { Vehicle vehicle = Vehicle(); vehicle.run(); Bus bus = Bus(); bus.run(); }
نتيجة الكود:
Vehicle is running Bus is running
مثال 3: التشعبية من خلال استبدال الداول في دارت
في هذا المثال، لدينا كلاس يسمى Car (سيارة) يحتوي على دالة تسمى power() (الطاقة). يتم استبدال هذه الدالة في الكلاسين الابنين المسمين Honda (هوندا) و Tesla (تسلا).
الكود:
class Car { void power() { print("It runs on petrol."); } } class Honda extends Car { } class Tesla extends Car { @override void power() { print("It runs on electricity."); } } void main() { Honda honda = Honda(); Tesla tesla = Tesla(); honda.power(); tesla.power(); }
نتيجة الكود:
It runs on petrol. It runs on electricity.
مثال 4: التشعبية من خلال استبدال الداول في دارت
في هذا المثال، لدينا كلاس يسمى Employee (موظف) يحتوي على دالة تسمى salary() (الراتب). يتم استبدال هذه الدالة في الكلاسين الابنين المسمين Manager (مدير) و Developer (مطور).
الكود:
class Employee { void salary() { print("Employee salary is \$1000."); } } class Manager extends Employee { @override void salary() { print("Manager salary is \$2000."); } } class Developer extends Employee { @override void salary() { print("Developer salary is \$3000."); } } void main() { Manager manager = Manager(); Developer developer = Developer(); manager.salary(); developer.salary(); }
نتيجة الكود:
Manager salary is $2000. Developer salary is $3000.
تعد التشعبية من المفاهيم المهمة في برمجة الكائنات OOP وتوفر لنا قدرة على إنشاء كود أكثر مرونة وقابلية للتوسع. في دارت، يمكننا تحقيق التشعبية من خلال استبدال الأساليب أو الدوال في الكلاس الابن. استخدمنا في هذه المقالة الأمثلة لشرح كيفية تنفيذ التشعبية في دارت وكيف يمكن استفادتنا منها في كتابة الكود.