Quan hệ “có một” và “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 47 trên 56.
Trong lập trình hướng đối tượng, có hai kiểu quan hệ chính giữa các đối tượng: "có một" (kết hợp) và "là một" (kế thừa). Kế thừa tạo ra hệ thống phân cấp cha con, còn kết hợp tạo ra các đối tượng bằng cách kết hợp những thành phần nhỏ hơn, có chức năng riêng.
Trước tiên, hãy tìm hiểu mối quan hệ «là một» thông qua tính kế thừa:
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// Dog "is-a" Animal: mối quan hệ kế thừa
class Dog extends Animal {
bark() {
console.log(`${this.name} says woof!`);
}
}Bây giờ, hãy cùng tìm hiểu mối quan hệ “có một” thông qua tính hợp thành:
class Engine {
start() {
console.log("Engine started");
}
}
// Car "has-a" Engine: quan hệ hợp thành
class Car {
constructor() {
this.engine = new Engine(); // Hợp thành
}
startCar() {
this.engine.start();
console.log("Car is running");
}
}Điểm khác biệt chính:
- "là một" (kế thừa): Chó LÀ MỘT Động vật
- "có một" (kết hợp): Xe hơi CÓ MỘT Động cơ
Thử thách
Bạn được cung cấp các lớp thành phần (Processor, Memory) và phần lớn lớp Computer. Nhiệm vụ của bạn là hoàn thiện hàm khởi tạo trong tệp computer.js:
- Tạo thuộc tính
processorbằng lớpProcessor - Tạo thuộc tính
memorybằng lớpMemory - Truyền processorSpeed vào hàm khởi tạo của Processor và memorySize vào hàm khởi tạo của Memory
Tự làm thử
import { Computer } from './computer.js';
const myComputer = new Computer(3.5, 16);
myComputer.start();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