Quan hệ "là một"
Thuộc phần Lập trình hướng đối tượng trong hành trình JavaScript của Coddy. Bài học 25 trên 56.
Mối quan hệ “là một” là cách kiểm tra đơn giản để xác định khi nào nên dùng tính kế thừa. Nếu bạn có thể nói “X là một Y” và câu đó nghe hợp lý, thì có lẽ X nên kế thừa từ Y.
Đúng (dùng tính kế thừa):
- "Chó là một loài động vật" →
class Dog extends Animal
- "Car là một Vehicle" →
class Car extends Vehicle
- “Một cuốn sách giáo khoa là một cuốn sách” →
class Textbook extends Book
Chưa đúng (không dùng tính kế thừa):
- "Một tài xế là một chiếc xe" → Không, tài xế sử dụng xe
- "Một bánh xe là một chiếc ô tô" → Không, bánh xe là một bộ phận của ô tô
- "A Student is a Classroom" → Không, học sinh ở trong lớp học
Ví dụ, hãy xét hai đối tượng:
// Lớp cơ sở: bản chất chung của tất cả các lớp này
class Book {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
read() {
console.log(`Reading ${this.title} by ${this.author}`);
}
}
// Novel là một Book (quan hệ kế thừa đúng)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
// Sử dụng các lớp (class)
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read(); // "Reading 1984 by George Orwell", kế thừa từ Book
Thử thách
Bạn được cung cấp một lớp (class) ElectronicDevice và một lớp Smartphone. Smartphone là một loại ElectronicDevice có thêm tính năng. Nhiệm vụ của bạn là tạo một đối tượng `myPhone` có thương hiệu "Samsung" và mẫu “Galaxy S23”.
Tự làm thử
import { ElectronicDevice } from './electronicDevice.js';
import { Smartphone } from './smartphone.js';
// TODO: Tạo đối tượng (object) `myPhone` có thương hiệu "Samsung" và mẫu “Galaxy S23”.
// Code kiểm thử, không chỉnh sửa
console.log(myPhone.turnOn()); // Đầu ra phải là "Samsung Galaxy S23 is now ON"Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Đối tượng và từ khóa this
Ôn nhanh: đối tượngThêm phương thức vào đối tượngTìm hiểu từ khóa thisHàm khởi tạoTừ khóa newThử thách ôn tập7Kế thừa và từ khóa extends
Kế thừaQuan hệ "là một"Từ khóa extendsPhương thức super()Kế thừa thuộc tính và phương thứcThử thách ôn tập13Kết hợp hay kế thừa
Quan hệ “có một” và “là một”Những hạn chế của kế thừa nhiều tầngXây dựng đối tượng5Đóng gói và quyền truy cập
Đóng góiTrường công khai và trường riêng tưPhương thức riêng tưThử thách ôn tập8Tổ chức code OOP
Tổ chức các lớp thành module11Dự án: Trình hiển thị hình dạng
Thiết lập: lớp Hình dạng và xuấtKế thừa lớp Hình trònGhi đè và phương thức diện tíchBộ đếm hình dạng tĩnh6Dự án: Tài khoản ngân hàng đơn giản
Lớp BankAccountGửi tiền và rút tiềnSố dư dưới dạng thuộc tính riêng tư9Phương thức và thuộc tính tĩnh
Cấp lớp và cấp instanceThuộc tính tĩnhPhương thức tiện ích tĩnhThử thách ôn tậpTự luyện tập: Trình biên dịch JavaScript online