Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

علاقة "لديه" مقابل "هو"

جزء من قسم 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)
challenge icon

التحدي

لقد تم تزويدك بفئات المكونات (Processor، Memory) ومعظم فئة Computer. مهمتك هي إكمال المُنشئ (constructor) في ملف computer.js:

  1. قم بإنشاء خاصية processor باستخدام فئة Processor
  2. قم بإنشاء خاصية memory باستخدام فئة Memory
  3. قم بتمرير 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();
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming