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:
- Vehicle'daki değişiklikler beklenmedik şekilde SportsCar'ı bozabilir
- Kalıtım zinciri büyüdükçe, metotların ve özelliklerin nereden geldiğini takip etmek zorlaşır
- Yeterince esnek olmayabilecek “bir türüdür” ilişkilerine mecbur kalırsın
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:
- Oluştur: Robot kurucusunun içinde hoparlör ve hareket bileşenlerini
- Kullan: Bileşenleri metotlarda:
greet()içinde:this.speaker.speak("Hello!");çağrısını yapwalkForward()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 forwardBu 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
1Nesneler ve this Anahtar Kelimesi
Hızlı Tekrar: NesnelerNesnelere Metot Eklemethis Anahtar Kelimesini AnlamakYapıcı Fonksiyonlarnew Anahtar KelimesiGenel Tekrar Uygulaması7Kalıtım ve extends Anahtar Kelimesi
Kalıtım"is-a" İlişkisiextends Anahtar Kelimesisuper() MetoduÖzellikleri ve Metotları DevralmaÖzet Meydan Okuması2Kodu Düzenleme
Modüller Nedir?export ile Dışa Aktarmaimport ile İçe AktarmaVarsayılan ve Adlandırılmış Dışa Aktarmalar8OOP Kodunu Düzenleme
Sınıfları Modüller Halinde Düzenleme6Proje: Basit Bir Banka Hesabı
BankAccount SınıfıPara Yatırma ve Para ÇekmePrivate Alan Olarak Bakiye9Statik Metotlar ve Özellikler
Sınıf Düzeyi ve Örnek DüzeyiStatik ÖzelliklerStatik Yardımcı MetotlarÖzet Meydan Okuma12Getter ve Setter'lar
get ve set Anahtar KelimeleriHesaplanmış ÖzelliklerDoğrulama ve Yan EtkilerÖzet Meydan Okuması15Final Meydan Okumaları
Oyun Karakteri OluşturucuE-ticaret Ürün SistemiÜniversite Yönetim SistemiAkıllı Ev Cihaz SistemiKendi başına pratik yap: Online JavaScript derleyicisi