Menu
CoddyTech

Ôn tập: phân cấp nhân viên

Thuộc phần Lập trình hướng đối tượng trong hành trình Dart của Coddy. Bài học 42 trên 110.

challenge icon

Thử thách

Dễ

Hãy xây dựng một hệ thống phân cấp nhân viên hoàn chỉnh, kết hợp mọi khái niệm về tính kế thừa trong chương này. Bạn sẽ tạo một lớp nhân viên cơ sở và mở rộng lớp đó với các vai trò chuyên biệt, mỗi vai trò có hành vi riêng.

Bạn sẽ sắp xếp code thành hai tệp:

  • employee.dart: Định nghĩa hệ thống phân cấp nhân viên tại đây:
    • Một lớp cơ sở Employee có các thuộc tính String name, double salary và int id. Thêm hàm khởi tạo và phương thức getDetails() trả về '[name] (ID: [id]) - Salary: $[salary]'
    • Một lớp Manager kế thừa Employee và thêm thuộc tính int teamSize. Dùng các tham số super cho những trường được kế thừa. Ghi đè getDetails() để trả về thông tin của lớp cha, theo sau là ', Team: [teamSize] members'
    • Một lớp Developer kế thừa Employee và thêm thuộc tính String language. Ghi đè getDetails() để trả về thông tin của lớp cha, theo sau là ', Specializes in [language]'
    • Một lớp TeamLead kế thừa Developer và thêm thuộc tính int projectCount. Ghi đè getDetails() để mở rộng phiên bản của Developer bằng cách thêm ', Leading [projectCount] projects'
  • main.dart: Nhập tệp nhân viên và tạo các đối tượng thuộc từng loại nhân viên:
    • Tạo một Employee có tên 'Alice', mức lương 50000.0 và id 101
    • Tạo một Manager có tên 'Bob', mức lương 75000.0, id 102 và teamSize 8
    • Tạo một Developer có tên 'Carol', mức lương 65000.0, id 103 và language 'Dart'
    • Tạo một TeamLead có tên 'David', mức lương 80000.0, id 104, language 'Python' và projectCount 3
    • In kết quả gọi getDetails() trên từng nhân viên, mỗi kết quả trên một dòng

Lưu ý cách TeamLead thể hiện tính kế thừa nhiều cấp: lớp này kế thừa Developer, còn Developer kế thừa Employee. Mỗi cấp bổ sung thông tin riêng mà vẫn giữ lại thông tin từ các lớp cha bằng cách dùng super.

Đầu ra mong đợi:

Alice (ID: 101) - Salary: $50000.0
Bob (ID: 102) - Salary: $75000.0, Team: 8 members
Carol (ID: 103) - Salary: $65000.0, Specializes in Dart
David (ID: 104) - Salary: $80000.0, Specializes in Python, Leading 3 projects

Tự làm thử

import 'employee.dart';

void main() {
  // TODO: Tạo một Employee có name là 'Alice', salary là 50000.0 và id là 101

  // TODO: Tạo một Manager có name là 'Bob', salary là 75000.0, id là 102 và teamSize là 8

  // TODO: Tạo một Developer có name là 'Carol', salary là 65000.0, id là 103 và language là 'Dart'

  // TODO: Tạo một TeamLead có name là 'David', salary là 80000.0, id là 104, language là 'Python' và projectCount là 3

  // TODO: In ra getDetails() của từng nhân viên, mỗi người một dòng
}

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 Dart online