Ôn tập: Vai trò của nhân viên
Thuộc phần Lập trình hướng đối tượng trong hành trình Lua của Coddy. Bài học 42 trên 70.
Thử thách
DễHãy xây dựng một hệ thống thưởng lương minh họa cách các loại nhân viên khác nhau có thể dùng chung một giao diện nhưng tính tiền thưởng theo cách khác nhau!
Bạn sẽ tạo một hệ thống phân cấp nhân viên nhỏ gồm bốn tệp:
Employee.lua: Lớp cơ sở đại diện cho một nhân viên thông thường. Hàm khởi tạo:new(name, salary)cần lưu tên và mức lương của nhân viên. Thêm phương thức:calculateBonus()trả về 10% mức lương (mức thưởng mặc định cho nhân viên thông thường), cùng phương thức:getName()để lấy tên.Manager.lua: Lớp con kế thừa từ Employee. Quản lý làm việc chăm chỉ và được thưởng: ghi đè:calculateBonus()để trả về 20% mức lương thay vì mức mặc định 10%.Intern.lua: Một lớp con khác kế thừa từ Employee. Thực tập sinh nhận mức thưởng cố định là50, bất kể mức lương: ghi đè:calculateBonus()để luôn trả về số tiền này.main.lua: Kết hợp mọi thứ! Đọc ba đầu vào là tên nhân viên và ba đầu vào là mức lương của họ. Tạo một Manager, một Intern và một Employee thông thường. Lưu cả ba vào một bảng, sau đó lặp qua bảng và in tên của từng người, theo sau là tiền thưởng đã tính.
Bạn sẽ nhận sáu đầu vào:
- Tên Manager
- Mức lương của Manager
- Tên Intern
- Mức lương của Intern
- Tên nhân viên thông thường
- Mức lương của nhân viên thông thường
Với mỗi nhân viên trong danh sách (theo thứ tự: Manager, Intern, Employee), hãy in tên và tiền thưởng của họ theo định dạng sau:
{name}: {bonus}Ví dụ, nếu đầu vào là Alice, 5000, Bob, 2000, Carol và 3000, đầu ra sẽ là:
Alice: 1000
Bob: 50
Carol: 300Hãy chú ý cách cùng một lời gọi :calculateBonus() tạo ra kết quả khác nhau tùy theo loại nhân viên: đó chính là tính đa hình! Manager nhận 20% của 5000, Intern nhận khoản cố định 50, còn Employee thông thường nhận 10% của 3000.
Tự làm thử
-- main.lua: Kết hợp tất cả lại
local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')
-- Đọc dữ liệu đầu vào
local managerName = io.read()
local managerSalary = tonumber(io.read())
local internName = io.read()
local internSalary = tonumber(io.read())
local employeeName = io.read()
local employeeSalary = tonumber(io.read())
-- TODO: Tạo một Manager, một Intern và một Employee thông thường
-- TODO: Lưu cả ba vào một bảng (theo thứ tự: Manager, Intern, Employee)
-- TODO: Duyệt qua bảng bằng vòng lặp và in ra tên cùng tiền thưởng của từng người
-- Định dạng: {name}: {bonus}
Tất cả bài học trong Lập trình hướng đối tượng
1Khái niệm “self”
Bảng với hàm“self” tường minhCú pháp dấu hai chấmDấu chấm và dấu hai chấmÔn tập: Điểm chuyển động4Dự án: Ngân hàng số
Thiết lập dự ánPhương thức nạp tiền7Đa hình và ghi đè
Ghi đè phương thứcGọi phương thức của lớp chaGõ kiểu vịtGiao diện chungKiểm tra kiểuÔn tập: Vai trò của nhân viên2Mẫu Prototype cho lớp
Khái niệm PrototypeLiên kết bằng __indexHàm khởi tạo :new()Khởi tạo thuộc tínhCác instance độc lậpÔn tập: Nhà máy ô tô5Nạp chồng toán tử trong OOP
Cộng các đối tượngTrừ các đối tượngNối các đối tượngSo sánh các đối tượng (<, >)Ôn tập: phép tính với ví tiền8Đóng gói
Quy ước đặt tênClosure để bảo mậtTruy cập qua closureBảng chỉ đọcLogic kiểm tra hợp lệTổng kết: Két an toàn11Mẫu thiết kế (cơ bản)
Hàm tạo đối tượngBảng SingletonMẫu IteratorObserver (Listener)Ôn tập: Factory Logger3Trạng thái và hành vi của đối tượng
Biến instancePhương thức getterPhương thức setterThuộc tính tính toánĐịnh dạng chuỗiKiểm tra tính bằng nhauÔn tập: điểm số học sinh6Cơ bản về kế thừa
Thiết lập kế thừaKế thừa phương thứcMở rộng hàm khởi tạoThêm phương thức cho lớp conDùng chung và riêngÔn tập: hệ phân cấp hình dạngTự luyện tập: Trình biên dịch Lua online