Ôn tập: hệ 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 C# của Coddy. Bài học 24 trên 70.
Thử thách
DễHãy xây dựng một hệ thống phân cấp nhân viên, kết hợp tất cả các khái niệm về kế thừa trong chương này. Bạn sẽ tạo cấu trúc công ty, trong đó các loại nhân viên khác nhau có chung thuộc tính nhưng tính tiền thưởng theo cách khác nhau.
Bạn sẽ chia code thành bốn tệp:
Employee.cs: Định nghĩa lớp cơ sởEmployeetrong không gian tênCompany. Mỗi nhân viên cóName(chuỗi) vàSalary(decimal). Tạo hàm khởi tạo nhận cả hai giá trị. Thêm phương thứcvirtualcó tênCalculateBonus(), theo mặc định trả về 10% lương. Ghi đèToString()để trả về"{Name} - ${Salary}".Manager.cs: Định nghĩa lớpManagertrong không gian tênCompany, kế thừa từEmployee. Quản lý có thêm thuộc tínhTeamSize(int). Hàm khởi tạo nhận tên, lương và số lượng thành viên trong nhóm, dùngbaseđể khởi tạo lớp cha. Ghi đèCalculateBonus()để trả về 15% lương cộng thêm $50 cho mỗi thành viên trong nhóm. Ghi đèToString()để trả về"{Name} - ${Salary} (Manager, Team: {TeamSize})".Developer.cs: Định nghĩa lớpDevelopertrong không gian tênCompany, kế thừa từEmployee. Nhà phát triển có thuộc tínhProgrammingLanguage(string). Hàm khởi tạo nhận tên, lương và ngôn ngữ lập trình. Ghi đèCalculateBonus()để trả về 12% lương. Ghi đèToString()để trả về"{Name} - ${Salary} (Developer, {ProgrammingLanguage})".Program.cs: Trong tệp chính, tạo một nhân viên thuộc mỗi loại bằng các giá trị đầu vào. Lưu cả ba vào một mảng các tham chiếuEmployeeđể thể hiện tính đa hình. Duyệt qua mảng và in ra kết quảToString()của từng nhân viên, rồi đến tiền thưởng của họ.
Bạn sẽ nhận tám giá trị đầu vào:
- Tên nhân viên cơ sở
- Lương nhân viên cơ sở
- Tên quản lý
- Lương quản lý
- Số lượng thành viên trong nhóm của quản lý
- Tên nhà phát triển
- Lương nhà phát triển
- Ngôn ngữ lập trình của nhà phát triển
In thông tin và tiền thưởng của từng nhân viên theo định dạng sau:
{ToString result}
Bonus: ${CalculateBonus result}Ví dụ, nếu các giá trị đầu vào là John, 50000, Sarah, 80000, 5, Mike, 70000 và C#, kết quả đầu ra sẽ là:
John - $50000
Bonus: $5000
Sarah - $80000 (Manager, Team: 5)
Bonus: $12250
Mike - $70000 (Developer, C#)
Bonus: $8400Hãy chú ý cách mỗi loại nhân viên tính tiền thưởng khác nhau, nhưng bạn vẫn có thể xử lý tất cả thông qua một mảng Employee. Đó là sức mạnh của việc kết hợp kế thừa với tính đa hình!
Tự làm thử
using System;
using Company;
class Program
{
public static void Main(string[] args)
{
// Đọc đầu vào (input) của nhân viên cơ bản
string empName = Console.ReadLine();
decimal empSalary = Convert.ToDecimal(Console.ReadLine());
// Đọc đầu vào của người quản lý
string mgrName = Console.ReadLine();
decimal mgrSalary = Convert.ToDecimal(Console.ReadLine());
int teamSize = Convert.ToInt32(Console.ReadLine());
// Đọc đầu vào của lập trình viên
string devName = Console.ReadLine();
decimal devSalary = Convert.ToDecimal(Console.ReadLine());
string progLang = Console.ReadLine();
// TODO: Tạo một Employee, một Manager và một Developer
// TODO: Lưu cả ba vào một mảng (array) Employee để minh họa tính đa hình
// TODO: Duyệt mảng và in ra ToString() cùng tiền thưởng của từng nhân viên
// Định dạng:
// {kết quả ToString}
// Tiền thưởng: ${kết quả CalculateBonus}
}
}
Tất cả bài học trong Lập trình hướng đối tượng
1Các khái niệm cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiKhông gian tên và chỉ thịGiới thiệu về lớp và đối tượngTừ khóa thisPhương thức và tham sốTrường và thuộc tínhHàm khởi tạoKhởi tạo đối tượngÔn tập: Máy tính đơn giản4Kế thừa
Cú pháp kế thừa cơ bản (:)Từ khóa 'base'Từ khóa virtual và overrideLớp sealedLớp cơ sở 'object'Ôn tập: hệ phân cấp nhân viên7Tính năng nâng cao
Nạp chồng toán tửBộ lập chỉ mục (this[])Ghi đè ToString()Phương thức mở rộngÔn tập: Danh sách tùy chỉnh10Các mẫu thiết kế phần 1
Giới thiệu về mẫu thiết kếSingleton an toàn với luồngMẫu FactoryMẫu Observer (sự kiện)Mẫu Strategy2Thuộc tính và thành viên tĩnh
Thuộc tính tự độngThuộc tính chỉ đọc hoặc chỉ ghiTrường và phương thức tĩnhLớp tĩnhThành viên có thân biểu thức5Đa hình và interface
Đa hình lúc biên dịch và lúc chạyInterface và lớp trừu tượngNhiều interfaceInterface tường minhUpcasting và downcastingÔn tập: bộ tính toán hình học8Các khái niệm OOP nâng cao
Ưu tiên composition hơn kế thừaGenerics (lớp và phương thức)Delegate và sự kiệnAttribute và reflectionGiao diện IDisposable và câu lệnh usingKiến thức cơ bản về dependency injection11Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổ hợpTự luyện tập: Trình biên dịch C# online