Menu
CoddyTech

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 (ebeveyn → çocuk → 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ğunu görelim:

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

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

// Kalıtımın ikinci 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, çeşitli sorunlara yol açabilir:

  1. Vehicle'daki 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 “bir türüdür” ilişkilerine mecbur kalırsın
challenge icon

Görev

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

Robot.js dosyasında yapılacaklar:

  1. Oluştur: Robot kurucusunun içinde hoparlör ve hareket bileşenlerini
  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, bileşimdir — robot, daha küçük bileşenlerin birleştirilmesiyle oluşturulur. Robotun konuşmak için bir hoparlörü, hareket etmek için bir hareket bileşeni vardır; bu yetenekleri miras almak yerine.

Kendin dene

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

const myRobot = new Robot('Robo');

myRobot.greet();     // Çıktısı şu olmalı: Saying: "Hello!"
myRobot.walkForward(); // Çıktısı şu olmalı: 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