علاقة "is-a"
جزء من قسم Object Oriented Programming في رحلة JavaScript على Coddy — الدرس 25 من 56.
علاقة "is-a" هي اختبار بسيط لتحديد متى تكون الوراثة منطقية. إذا كان بإمكانك قول "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”.
ورقة مرجعية
تُعد علاقة "is-a" (هو-أو-هي) اختباراً لتحديد متى يكون التوريث منطقياً. إذا كان بإمكانك قول "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
جرّب بنفسك
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"يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1الكائنات والكلمة المفتاحية this
مراجعة سريعة: الكائناتإضافة Methods إلى الكائناتفهم الكلمة المفتاحية thisConstructor Functionsالكلمة المفتاحية newتحدي المراجعة7الوراثة والكلمة المفتاحية extends
الوراثةعلاقة "is-a"الكلمة المفتاحية extendsالدالة super()وراثة الخصائص والوظائفتحدي المراجعة2تنظيم الكود
ما هي الـ Modules؟التصدير باستخدام exportالاستيراد باستخدام importالـ Default مقابل الـ Named Exports8تنظيم كود OOP
تنظيم الـ Classes في Modules11مشروع: مصيّر الأشكال
إعداد: فئة Shape والتصديروراثة فئة Circle