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:
- Vehicle üzerindeki 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 "is-a" ilişkilerine zorlanırsınız
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:
- Oluştur konuşmacı ve hareket ettirici bileşenlerini Robot kurucusunun içinde
- 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, 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 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