علاقة "لديه" مقابل "هو"
جزء من قسم Object Oriented Programming في رحلة JavaScript على Coddy — الدرس 47 من 56.
في البرمجة كائنية التوجه، هناك نوعان رئيسيان من العلاقات بين الكائنات: "has-a" (التركيب - composition) و "is-a" (الوراثة - inheritance). وبينما تنشئ الوراثة تسلسلات هرمية بين الأب والابن، يقوم التركيب ببناء الكائنات عن طريق دمج مكونات أصغر وأكثر تركيزاً.
دعونا نفهم أولاً علاقة "is-a" من خلال الوراثة:
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// Dog "is-a" Animal - علاقة وراثة
class Dog extends Animal {
bark() {
console.log(`${this.name} says woof!`);
}
}لنلقِ نظرة الآن على علاقة "has-a" (يحتوي على) من خلال التركيب (composition):
class Engine {
start() {
console.log("Engine started");
}
}
// السيارة "تمتلك" محركاً - علاقة تركيب (composition)
class Car {
constructor() {
this.engine = new Engine(); // تركيب (Composition)
}
startCar() {
this.engine.start();
console.log("Car is running");
}
}الفرق الرئيسي:
- "is-a" (الوراثة): الكلب هو حيوان (Dog IS AN Animal)
- "has-a" (التركيب): السيارة لديها محرك (Car HAS AN Engine)
التحدي
لقد تم تزويدك بفئات المكونات (Processor، Memory) ومعظم فئة Computer. مهمتك هي إكمال المُنشئ (constructor) في ملف computer.js:
- قم بإنشاء خاصية
processorباستخدام فئةProcessor - قم بإنشاء خاصية
memoryباستخدام فئةMemory - قم بتمرير processorSpeed إلى مُنشئ Processor و memorySize إلى مُنشئ Memory
ورقة مرجعية
في البرمجة كائنية التوجه، هناك نوعان رئيسيان من العلاقات بين الكائنات:
- علاقة "is-a" (الوراثة): تُنشئ تسلسلات هرمية بين الأب والابن حيث تقوم الفئة الفرعية بتوسيع الفئة الأب
- علاقة "has-a" (التركيب): تبني الكائنات من خلال دمج مكونات أصغر وأكثر تركيزاً
مثال على الوراثة ("is-a"):
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// Dog "is-a" Animal
class Dog extends Animal {
bark() {
console.log(`${this.name} says woof!`);
}
}مثال على التركيب ("has-a"):
class Engine {
start() {
console.log("Engine started");
}
}
// Car "has-a" Engine
class Car {
constructor() {
this.engine = new Engine(); // التركيب
}
startCar() {
this.engine.start();
console.log("Car is running");
}
}جرّب بنفسك
import { Computer } from './computer.js';
const myComputer = new Computer(3.5, 16);
myComputer.start();يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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