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 → torunun çocuğu) oluşturmak sorunlara yol açabilir. Zincir ne kadar derinleşirse, kodu anlamak, sürdürmek ve değiştirmek o kadar zorlaşır.
Derin bir kalıtım zinciriyle 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ımda iki seviye derinliktedir. Bu durum birkaç soruna yol açabilir:
- Vehicle üzerinde yapılan değişiklikler beklenmedik bir ş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 hale getirmek için Robot.js dosyasını tamamlayın. Şu anda robot inşa edilmiş durumda ancak hiçbir şey yapamıyor.
Robot.js dosyasında yapılması gerekenler:
- Robot constructor'ı içinde speaker ve mover bileşenlerini oluşturun
- Bileşenleri metotlar içinde kullanın:
greet()içinde:this.speaker.speak("Hello!");metodunu çağırınwalkForward()içinde:this.mover.move("forward");metodunu çağırın
Bunu neden yapıyoruz: Bu bir composition (bileşim) örneğidir - robot, daha küçük bileşenlerin birleştirilmesiyle inşa edilir. Robot, bu yetenekleri miras almak yerine bir speaker'a (konuşmak için) ve bir mover'a (hareket etmek için) sahiptir (has-a ilişkisi).
Kopya kağıdı
Derin kalıtım hiyerarşileri (ebeveyn → çocuk → torun) bakım sorunlarına ve esneklik kaybına yol açabilir. Zincir ne kadar derinleşirse, kodu anlamak ve değiştirmek o kadar zorlaşır.
Derin bir kalıtım zinciri örneği:
class Vehicle {
constructor(type) {
this.type = type;
this.isRunning = false;
}
start() {
this.isRunning = true;
console.log(`${this.type} started`);
}
}
class Car extends Vehicle {
constructor(make, model) {
super("Car");
this.make = make;
this.model = model;
}
}
class SportsCar extends Car {
constructor(make, model, topSpeed) {
super(make, model);
this.topSpeed = topSpeed;
}
}Derin kalıtım ile ilgili sorunlar:
- Temel sınıflarda yapılan değişiklikler, alt sınıfları beklenmedik şekilde bozabilir
- Metotların ve özelliklerin nereden geldiğini takip etmek zordur
- Esneklikten yoksun, katı "is-a" (bir ...-dır) ilişkilerini zorunlu kılar
Alternatif olarak kompozisyon (composition): Kalıtım yerine, nesnelerin bileşenlerle have-a (bir ...-ya sahiptir) ilişkisi kurduğu ve işlevsellik oluşturmak için daha küçük parçaları birleştirdiği kompozisyonu kullanın.
Kendin dene
import { Robot } from './Robot.js';
const myRobot = new Robot('Robo');
myRobot.greet(); // Şunu çıktı olarak vermeli: Saying: "Hello!"
myRobot.walkForward(); // Şunu çıktı olarak vermeli: 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 Çekme9Statik 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 Sistemi