Menu
CoddyTech

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ơ
challenge icon

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:

  1. Tạo thuộc tính processor bằng lớp Processor
  2. Tạo thuộc tính memory bằng lớp Memory
  3. 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();
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch JavaScript online