Menu
Coddy logo textTech

Derin Kalıtımın Sınırları

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

Kalıtım yararlı olsa da çok derin kalıtım hiyerarşileri (üst sınıf → alt sınıf → torun → büyük torun) oluşturmak sorunlara yol açabilir. Zincir ne kadar derin olursa kodu anlamak, bakımını yapmak ve değiştirmek o kadar zorlaşır.

Derin bir kalıtım zincirinde neler olduğuna bakalım:

// Temel sınıf
class Vehicle {
  constructor(type) {
    this.type = type;
    this.isRunning = false;
  }
  
  start() {
    this.isRunning = true;
    console.log(`${this.type} started`);
  }
}

// İlk kalıtım seviyesi
class Car extends Vehicle {
  constructor(make, model) {
    super("Car");
    this.make = make;
    this.model = model;
    this.wheels = 4;
  }
  
  honk() {
    console.log("Beep beep!");
  }
}

// İkinci kalıtım seviyesi
class SportsCar extends Car {
  constructor(make, model, topSpeed) {
    super(make, model);
    this.topSpeed = topSpeed;
  }
  
  race() {
    this.start();
    console.log(`Racing at ${this.topSpeed} mph!`);
  }
}

Bu örnekte SportsCar, kalıtım hiyerarşisinde iki seviye derindedir. Bu durum çeşitli sorunlara yol açabilir:

  1. Vehicle üzerindeki değişiklikler beklenmedik şekilde SportsCar'ı bozabilir
  1. Kalıtım zinciri büyüdükçe, metotların ve özelliklerin nereden geldiğini takip etmek zorlaşır
  1. Yeterince esnek olmayabilecek "is-a" ilişkilerine zorlanırsınız
challenge icon

Görev

Robotu işlevsel hâle getirmek için Robot.js dosyasını tamamla. Şu anda robot oluşturulmuş durumda, ancak hiçbir şey yapamıyor.

<strong>Robot.js</strong> içinde yapılacaklar:

  1. Oluştur konuşmacı ve hareket ettirici bileşenlerini Robot kurucusunun içinde
  2. Kullan bileşenleri metotlarda:
    1. greet() içinde: this.speaker.speak("Hello!"); çağrısını yap
    2. walkForward() içinde: this.mover.move("forward"); çağrısını yap

Bunu neden yapıyoruz: Bu, composition yani bileşimdir; robot, daha küçük bileşenlerin bir araya getirilmesiyle oluşturulur. Robot, bu yetenekleri miras almak yerine konuşma için bir has-a hoparlöre ve hareket için bir has-a hareket ettiriciye sahiptir.

Kendin dene

import { Robot } from './Robot.js';

const myRobot = new Robot('Robo');

myRobot.greet();     // Çıktı vermeli: Saying: "Hello!"
myRobot.walkForward(); // Should output: Moving forward
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

Kendi başına pratik yap: Online JavaScript derleyicisi