Ôn tập: trình quản lý người dùng
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 68 trên 70.
Thử thách
DễHãy xây dựng một hệ thống quản lý người dùng, một ứng dụng thực tế thường có trong nhiều chương trình! Bạn sẽ tạo hai lớp (class) phối hợp với nhau: một lớp đại diện cho từng người dùng, lớp còn lại quản lý một nhóm người dùng.
Bạn sẽ sắp xếp code trong ba tệp:
User.lua: Tạo lớp User đại diện cho một người dùng trong hệ thống. Mỗi người dùng cóidvàname. Thêm phương thức:getInfo()để trả về một chuỗi theo định dạng"ID: {id}, Name: {name}".UserManager.lua: Xây dựng một lớp quản lý nhóm người dùng. Hãy nghĩ cách lưu trữ người dùng để tìm kiếm hiệu quả: dùng ID của người dùng làm khóa trong bảng sẽ giúp việc tìm và xóa người dùng đơn giản hơn nhiều so với tìm trong danh sách. Lớp quản lý của bạn cần có::addUser(user): thêm một đối tượng User vào nhóm:removeUser(id): xóa người dùng theo ID:findUser(id): trả về User có ID khớp, hoặcnilnếu không tìm thấy:listUsers(): in thông tin của tất cả người dùng, mỗi người dùng trên một dòng
main.lua: Kết hợp mọi thứ! Tạo một UserManager, thêm một số người dùng dựa trên đầu vào bạn nhận được, thực hiện các thao tác và hiển thị kết quả.
Bạn sẽ nhận năm đầu vào:
- ID của người dùng thứ nhất (một số)
- Tên người dùng thứ nhất
- ID của người dùng thứ hai (một số)
- Tên người dùng thứ hai
- ID của người dùng cần tìm (một số)
Trong tệp chính:
- Tạo một UserManager và thêm cả hai người dùng
- Gọi
:listUsers()để in tất cả người dùng - Xóa người dùng thứ nhất (dùng ID thứ nhất)
- In
"After removal:" - Gọi lại
:listUsers() - Tìm người dùng có ID là đầu vào thứ năm. Nếu tìm thấy, hãy in thông tin của họ; nếu không tìm thấy, hãy in
"User not found"
Ví dụ, nếu đầu vào là 101, Alice, 102, Bob và 102, đầu ra sẽ là:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: BobNếu đầu vào là 201, Charlie, 202, Diana và 201, đầu ra sẽ là:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundTrong ví dụ thứ hai, sau khi xóa người dùng 201 (Charlie), việc tìm ID đó sẽ trả về "User not found" vì người dùng đó không còn trong hệ thống!
Tự làm thử
-- main.lua: Kết hợp mọi thứ
local User = require('User')
local UserManager = require('UserManager')
-- Đọc dữ liệu đầu vào
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())
-- TODO: Tạo một instance của UserManager
-- TODO: Tạo hai đối tượng User từ dữ liệu đầu vào
-- TODO: Thêm cả hai người dùng vào trình quản lý
-- TODO: Gọi listUsers() để in ra tất cả người dùng
-- TODO: Xóa người dùng đầu tiên (dùng id1)
-- TODO: In ra "After removal:"
-- TODO: Gọi lại listUsers()
-- TODO: Tìm người dùng có searchId
-- Nếu tìm thấy, in ra thông tin của người dùng đó; nếu không, in ra "User not found"
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ề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ạng9Kết hợp và mixin
Quan hệ có-mộtỦy quyềnMixin đơn giảnÁp dụng nhiều mixinMixin và kế thừaÔn tập: Lắp ráp robot12Thử thách cuối
Ôn tập: hệ thống kho hàngÔn tập: trình quản lý người dùngÔn tập: trình theo dõi điểm sốKiểm tra cuối về lập trình hướng đối tượngTự luyện tập: Trình biên dịch Lua online