Menu
Coddy logo textTech

"has-a" ve "is-a" İlişkisi

Coddy'nin JavaScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 47 / 56.

Nesne yönelimli programlamada, nesneler arasında iki ana ilişki türü vardır: "has-a" (kompozisyon) ve "is-a" (kalıtım). Kalıtım ebeveyn-çocuk hiyerarşileri oluştururken, kompozisyon daha küçük, odaklanmış bileşenleri birleştirerek nesneler inşa eder.

Öncelikle kalıtım yoluyla "is-a" ilişkisini anlayalım:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  eat() {
    console.log(`${this.name} is eating.`);
  }
}

// Dog "is-a" Animal - kalıtım ilişkisi
class Dog extends Animal {
  bark() {
    console.log(`${this.name} says woof!`);
  }
}

Şimdi kompozisyon (composition) yoluyla "has-a" (sahip olma) ilişkisine bakalım:

class Engine {
  start() {
    console.log("Engine started");
  }
}

// Araba bir Motora "sahiptir" (has-a) - kompozisyon ilişkisi
class Car {
  constructor() {
    this.engine = new Engine(); // Kompozisyon
  }
  
  startCar() {
    this.engine.start();
    console.log("Car is running");
  }
}

Temel fark:

  • "is-a" (kalıtım): Bir Köpek bir Hayvandır
  • "has-a" (kompozisyon): Bir Arabanın bir Motoru vardır
challenge icon

Görev

Size bileşen sınıfları (Processor, Memory) ve Computer sınıfının çoğu verilmiştir. Göreviniz computer.js dosyasındaki constructor'ı tamamlamaktır:

  1. Processor sınıfını kullanarak bir processor özelliği oluşturun
  2. Memory sınıfını kullanarak bir memory özelliği oluşturun
  3. processorSpeed değerini Processor constructor'ına ve memorySize değerini Memory constructor'ına geçirin

Kopya kağıdı

Nesne yönelimli programlamada, nesneler arasında iki ana ilişki türü vardır:

  • "is-a" ilişkisi (kalıtım): Bir alt sınıfın bir üst sınıfı genişlettiği ebeveyn-çocuk hiyerarşileri oluşturur
  • "has-a" ilişkisi (kompozisyon): Daha küçük, odaklanmış bileşenleri birleştirerek nesneler oluşturur

Kalıtım örneği ("is-a"):

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  eat() {
    console.log(`${this.name} is eating.`);
  }
}

// Dog "is-a" Animal'dır
class Dog extends Animal {
  bark() {
    console.log(`${this.name} says woof!`);
  }
}

Kompozisyon örneği ("has-a"):

class Engine {
  start() {
    console.log("Engine started");
  }
}

// Car "has-a" Engine'dir
class Car {
  constructor() {
    this.engine = new Engine(); // Kompozisyon
  }
  
  startCar() {
    this.engine.start();
    console.log("Car is running");
  }
}

Kendin dene

import { Computer } from './computer.js';

const myComputer = new Computer(3.5, 16);
myComputer.start();
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler