## الوراثة في الصفوف في JavaScript
تعتبر الوراثة (Inheritance) أحد المبادئ الأساسية في البرمجة الكائنية التوجه (OOP). تتيح الوراثة [شركة برمجة مصرية] للصفوف (Classes) إمكانية استعراض خصائص وسلوكيات من صفوف أخرى، مما يعزز من إعادة استخدام الشيفرة البرمجية ويقلل من التكرار. في JavaScript، يمكن تحقيق الوراثة باستخدام الكلمة المفتاحية `extends`.
### مفهوم الوراثة
عندما يرث صف من صف آخر، فإنه يمكنه الوصول إلى الخصائص والوظائف العامة للصف الأب. الصف المشتق (الذي يرث) يمكنه أيضًا إضافة خصائص ووظائف جديدة أو تعديل الوظائف [شركة برمجة مصرية] الموروثة.
### إنشاء صف أساسي (Parent Class)
لنبدأ بإنشاء صف أساسي يسمى `Animal`. هذا الصف سيحتوي على خاصية واحدة وهي `name` ووظيفة واحدة وهي `speak`.
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
### إنشاء صف مشتق (Derived Class)
الآن، سنقوم بإنشاء صف مشتق يسمى `Dog`، يرث من الصف `Animal`. باستخدام الكلمة المفتاحية `extends`، يمكننا إنشاء الوراثة بين الصفوف بسهولة.
class Dog extends Animal {
constructor(name, breed) {
super(name); // استدعاء الباني للصف الأب
this.breed = breed;
}
speak() {
console.log(`${this.name} barks.`);
}
}
### شرح الأمثلة
في الصف `Dog`، نلاحظ استخدام `super(name)` داخل الباني. الكلمة `super` تستخدم لاستدعاء الباني الخاص بالصف الأب، مما يسمح لنا بتمرير الاسم إلى الصف `Animal` لتعيينه كخاصية.
كما نرى، قمنا بتجاوز (Override) الوظيفة `speak` في الصف `Dog` لتخصيص السلوك بحيث يعكس حقيقة أن الكلب ينبح بدلاً من إصدار ضجيج عام.
### تجربة الكود
لنقم الآن بإنشاء كائنات من كلا الصفين واختبار الوراثة والتجاوز.
const genericAnimal = new Animal('Generic Animal');
genericAnimal.speak(); // Output: Generic Animal makes a noise.
const myDog = new Dog('Rex', 'German Shepherd');
myDog.speak(); // Output: Rex barks.
### إضافة وظائف جديدة إلى الصف المشتق
يمكن للصف المشتق أن يحتوي على وظائف جديدة ليست موجودة في الصف الأب. لنضف وظيفة جديدة إلى الصف `Dog` تسمى `fetch`.
class Dog extends Animal {
constructor(name, breed) {
super(name);
this.breed = breed;
}
speak() {
console.log(`${this.name} barks.`);
}
fetch() {
console.log(`${this.name} is fetching!`);
}
}
const myDog = new Dog('Rex', 'German Shepherd');
myDog.fetch(); // Output: Rex is fetching!
### الخلاصة
الوراثة في JavaScript تسهل إعادة استخدام الشيفرة وتعزز من تنظيمها. عبر الوراثة، يمكننا إنشاء هياكل برمجية مرنة وقابلة للتوسع بسهولة. باستخدام الوراثة بشكل فعال، يمكن للمطورين بناء تطبيقات أكثر تنظيماً وقابلية للصيانة.
