Nội dung text [Practice] Quản lý nhân sự (3)
} Xin nghỉ phép: Nhân viên chính thức có chế độ nghỉ phép. Họ có thể yêu cầu nghỉ phép nếu số ngày nghỉ phép còn đủ. public boolean requestLeave(int days) { if (availableLeaveDays >= days) { availableLeaveDays -= days; return true; } else { return false; } } Đánh giá hiệu suất công việc: Nhân viên chính thức được đánh giá định kỳ (theo quý hoặc năm) dựa trên các tiêu chí như hoàn thành công việc và đóng góp cho công ty. public String evaluatePerformance() { // Logic đánh giá hiệu suất return "Excellent"; } Hành vi riêng của Freelancer: Tính lương theo giờ hoặc theo dự án: Freelancer được trả lương dựa trên số giờ làm việc hoặc dự án đã hoàn thành. public double calculateSalary(int hoursWorked, double hourlyRate) { return hoursWorked * hourlyRate; } Nhận và hoàn thành dự án: Freelancer có thể nhận nhiều dự án và đánh dấu dự án đã hoàn thành khi xong. public void receiveProject(String projectName) { currentProjects.add(projectName);
} public void completeProject(String projectName) { currentProjects.remove(projectName); } Theo dõi giờ làm việc linh hoạt: Freelancer có thể ghi lại số giờ làm việc của mình hàng ngày hoặc hàng tuần. public void trackWorkHours(int hours) { totalWorkedHours += hours; } Yêu cầu: 1. Hiện tại, bạn đã có các lớp FullTimeEmployee và Freelancer với các hành vi và phương thức riêng lẻ. Nhưng hệ thống chưa trừu tượng hóa các hành vi chung (như doWork(), calculateSalary() và getPersonalInfo()). 2. Bạn cần tạo một kiến trúc trừu tượng để quản lý tốt hơn các hành vi chung và riêng biệt của cả FullTimeEmployee và Freelancer. Hãy phân tích các giải pháp và thực hiện chúng.