علاقة "is-a"
جزء من قسم البرمجة كائنية التوجه في رحلة JavaScript على Coddy. الدرس 25 من 56.
علاقة «هو نوع من» اختبار بسيط لتحديد متى يكون الوراثة منطقيًا. إذا استطعت أن تقول «إن X نوع من Y» وبدا ذلك صحيحًا، فمن المرجح أن يرث X من Y.
صحيح (استخدم الوراثة):
- "الكلب هو حيوان" →
class Dog extends Animal
- "السيارة هي مركبة" →
class Car extends Vehicle
- "الكتاب المدرسي هو كتاب" →
class Textbook extends Book
غير صحيح (لا تستخدم الوراثة):
- "السائق هو سيارة" → لا، السائق يستخدم سيارة
- "العجلة هي سيارة" → لا، العجلة جزء من سيارة
- "الطالب هو فصل دراسي" → لا، الطالب في فصل دراسي
على سبيل المثال، لنتناول كائنين:
// الصنف الأساسي - ما تكونه جميعها
class Book {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
read() {
console.log(`Reading ${this.title} by ${this.author}`);
}
}
// الرواية هي نوع من الكتب (وراثة صحيحة)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
// استخدام الأصناف
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read(); // "Reading 1984 by George Orwell" - موروث من Book
التحدي
أُعطيت الصنف ElectronicDevice والصنف Smartphone. يُعدّ Smartphone نوعًا من ElectronicDevice له ميزات إضافية. مهمتك هي إنشاء كائن `myPhone` بعلامة تجارية "Samsung" وطراز “Galaxy S23”.
جرّب بنفسك
import { ElectronicDevice } from './electronicDevice.js';
import { Smartphone } from './smartphone.js';
// TODO: أنشئ كائنًا `myPhone` بعلامة تجارية "Samsung" وطراز “Galaxy S23”.
// كود الاختبار - لا تعدّله
console.log(myPhone.turnOn()); // يجب أن يُخرج "Samsung Galaxy S23 is now ON"يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الكائنات والكلمة المفتاحية this
مراجعة سريعة: الكائناتإضافة Methods إلى الكائناتفهم الكلمة المفتاحية thisConstructor Functionsالكلمة المفتاحية newتحدي المراجعة7الوراثة والكلمة المفتاحية extends
الوراثةعلاقة "is-a"الكلمة المفتاحية extendsالدالة super()وراثة الخصائص والوظائفتحدي المراجعة2تنظيم الكود
ما هي الـ Modules؟التصدير باستخدام exportالاستيراد باستخدام importالـ Default مقابل الـ Named Exports8تنظيم كود OOP
تنظيم الـ Classes في Modules11مشروع: مصيّر الأشكال
إعداد: فئة Shape والتصديروراثة فئة Circleإعادة التعريف ودالة المساحةعداد الأشكال Staticتدرّب بنفسك: مترجم JavaScript عبر الإنترنت