Batas Pewarisan Mendalam
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan JavaScript di Coddy. Pelajaran 48 dari 56.
Meskipun pewarisan berguna, membuat hierarki pewarisan yang sangat dalam (induk → anak → cucu → cicit) dapat menimbulkan masalah. Semakin dalam rantainya, semakin sulit untuk memahami, memelihara, dan mengubah kodemu.
Mari kita lihat apa yang terjadi pada rantai pewarisan yang dalam:
// class dasar
class Vehicle {
constructor(type) {
this.type = type;
this.isRunning = false;
}
start() {
this.isRunning = true;
console.log(`${this.type} started`);
}
}
// Tingkat pertama pewarisan
class Car extends Vehicle {
constructor(make, model) {
super("Car");
this.make = make;
this.model = model;
this.wheels = 4;
}
honk() {
console.log("Beep beep!");
}
}
// Tingkat kedua pewarisan
class SportsCar extends Car {
constructor(make, model, topSpeed) {
super(make, model);
this.topSpeed = topSpeed;
}
race() {
this.start();
console.log(`Racing at ${this.topSpeed} mph!`);
}
}Dalam contoh ini, SportsCar berada dua tingkat di bawah dalam pewarisan. Hal ini dapat menimbulkan beberapa masalah:
- Perubahan pada Vehicle mungkin secara tak terduga merusak SportsCar
- Seiring bertambah panjangnya rantai pewarisan, semakin sulit melacak asal method dan property
- Kamu terpaksa menggunakan hubungan "is-a" yang mungkin kurang fleksibel
Tantangan
Lengkapi file Robot.js agar robot berfungsi. Saat ini, robot sudah dibuat, tetapi belum bisa melakukan apa pun.
Yang harus dilakukan di Robot.js:
- Buat komponen speaker dan mover di dalam constructor Robot
- Gunakan komponen tersebut dalam method:
- Di
greet(): Panggilthis.speaker.speak("Hello!"); - Di
walkForward(): Panggilthis.mover.move("forward");
- Di
Alasan kita melakukan ini: Ini adalah komposisi, robot dibuat dengan menggabungkan komponen-komponen yang lebih kecil. Robot memiliki speaker (untuk berbicara) dan memiliki mover (untuk bergerak), bukan mewarisi kemampuan tersebut.
Coba sendiri
import { Robot } from './Robot.js';
const myRobot = new Robot('Robo');
myRobot.greet(); // Seharusnya menghasilkan output: Saying: "Hello!"
myRobot.walkForward(); // Seharusnya menghasilkan output: Moving forwardPelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Object dan Kata Kunci this
Tinjauan Singkat: objectMenambahkan method ke objectMemahami Kata Kunci thisFungsi KonstruktorKata Kunci newTantangan Rangkuman7Pewarisan & Kata Kunci extends
PewarisanHubungan "is-a"Kata Kunci extendsmethod super()Mewarisi property & methodTantangan Rangkuman2Mengatur Kode
Apa itu module?Mengekspor dengan exportMengimpor dengan importEkspor default vs. ekspor bernama8Mengatur Kode OOP
Mengatur class ke dalam module11Proyek: Perender Bentuk
Penyiapan: class Shape & EksporPewarisan class CircleOverride & Method LuasPenghitung Shape Statis14Sistem Manajemen Perpustakaan
Merancang PerpustakaanClass Book dengan CompositionValidasi Penulis Buku9Method dan property Statis
Level class vs. level instanceProperty StatisMethod Utilitas StatisTantangan RangkumanLatihan sendiri: Compiler JavaScript online