في لغة دارت (Dart)، تمتلك وراثة الـ Constructor أهمية كبيرة في بنية وتصميم البرامج. إنها تمكننا من توريث الأكواد والخصائص الموجودة في الكلاس الأب إلى الكلاس الابن، مما يسهم في تقليل تكرار الأكواد وزيادة قابلية إعادة الاستخدام. في هذا المقال، سنستكشف مفهوم واستخدام وراثة الـ Constructor في لغة دارت وكيف يمكننا الاستفادة منها في تصميم تطبيقاتنا.
ما هي وراثة الـ Constructor في دارت؟
وراثة الـ Constructor في دارت هي عملية توريث الـ Constructor الخاص بالكلاس الأب إلى الكلاس الابن. إنها طريقة لإعادة استخدام الأكواد الموجودة في الكلاس الأب.
مثال 1: وراثة الـ Constructor في دارت
في هذا المثال، لدينا كلاس يسمى “Laptop” يحتوي على الـ Constructor. وهناك كلاس آخر يسمى “MacBook” يرث من كلاس “Laptop”. الكلاس “MacBook” لديه الـ Constructor الخاص به.
class Laptop { // الـ Constructor Laptop() { print("Laptop constructor"); } } class MacBook extends Laptop { // الـ Constructor MacBook() { print("MacBook constructor"); } } void main() { var macbook = MacBook(); }
نتيجة الكود:
Laptop constructor MacBook constructor
ملاحظة: يتم استدعاء الـ Constructor الخاص بالكلاس الأب أو الأساسي أولاً، ثم يتم استدعاء الـ Constructor الخاص بالكلاس الفرعي.
مثال 2: وراثة الـ Constructor بمعاملات في دارت
في هذا المثال، لدينا كلاس يسمى “Laptop” يحتوي على الـ Constructor مع وجود معاملات. وهناك كلاس آخر يسمى “MacBook” يرث من كلاس “Laptop”. الكلاس “MacBook” لديه الـ Constructor الخاص به مع وجود معاملات.
class Laptop { // الـ Constructor Laptop(String name, String color) { print("Laptop constructor"); print("الاسم: $name"); print("اللون: $color"); } } class MacBook extends Laptop { // الـ Constructor MacBook(String name, String color) : super(name, color) { print("MacBook constructor"); } } void main() { var macbook = MacBook("MacBook Pro", "Silver"); }
نتيجة الكود:
Laptop constructor الاسم: MacBook Pro اللون: Silver MacBook constructor
مثال 3: وراثة الـ Constructor بدون معاملات
في هذا المثال، لدينا كلاس يسمى “Person” يحتوي على خصائص الاسم والعمر. وهناك كلاس آخر يسمى “Student” يرث من كلاس “Person”. الكلاس “Student” لديه خاصية إضافية تسمى “رقم اللفة”. دعنا نرى كيفية إنشاء الـ Constructor للكلاس “Student”.
class Person { String name; int age; // الـ Constructor Person(this.name, this.age); } class Student extends Person { int rollNumber; // الـ Constructor Student(String name, int age, this.rollNumber) : super(name, age); } void main() { var student = Student("John", 20, 1); print("اسم الطالب: ${student.name}"); print("عمر الطالب: ${student.age}"); print("رقم اللفة: ${student.rollNumber}"); }
نتيجة الكود:
اسم الطالب: John عمر الطالب: 20 رقم اللفة: 1
مثال 4: وراثة الـ Constructor بمعاملات مسماة في دارت
في هذا المثال، لدينا كلاس يسمى “Laptop” يحتوي على الـ Constructor بمعاملات مسماة. وهناك كلاس آخر يسمى “MacBook” يرث من كلاس “Laptop”. الكلاس “MacBook” لديه الـ Constructor الخاص به بمعاملات مسماة أيضا.
class Laptop { // الـ Constructor Laptop({String? name, String? color}) { print("Laptop constructor"); print("الاسم: $name"); print("اللون: $color"); } } class MacBook extends Laptop { // الـ Constructor MacBook({String? name, String? color}) : super(name: name, color: color) { print("MacBook constructor"); } } void main() { var macbook = MacBook(name: "MacBook Pro", color: "Silver"); }
نتيجة الكود:
Laptop constructor الاسم: MacBook Pro اللون: Silver MacBook constructor
مثال 5: استدعاء الـ Constructor المسمى في الكلاس الأب
في هذا المثال، لدينا كلاس يسمى “Laptop” يحتوي على الـ Constructor الافتراضي والـ Constructor المسمى. وهناك كلاس آخر يسمى “MacBook” يرث من كلاس “Laptop”. الكلاس “MacBook” لديه الـ Constructor الخاص به بمعاملات مسماة. يمكنك استدعاء الـ Constructor المسمى في الكلاس الأب باستخدام كلمة المفتاح “super”.
class Laptop { // الـ Constructor الافتراضي Laptop() { print("Laptop constructor"); } // الـ Constructor المسمى Laptop.named() { print("Laptop named constructor"); } } class MacBook extends Laptop { // الـ Constructor MacBook() : super.named() { print("MacBook constructor"); } } void main() { var macbook = MacBook(); }
نتيجة الكود:
Laptop named constructor MacBook constructor
وراثة الـ Constructor في لغة دارت تعد أداة قوية لتنظيم وبناء تطبيقاتنا بشكل أكثر فعالية وإعادة استخدام الأكواد بشكل مستدام. من خلال توريث الخصائص والدوال من الكلاس الأب إلى الكلاس الابن، يمكننا أيضًاتحسين هيكلة التطبيق وتقليل التكرار والأخطاء. استخدم وراثة الـ Constructor بحكمة في تصميمك واستفد من فوائدها لتطوير تطبيقات دارت القوية والقابلة للصيانة.