Lấy số dư
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 22 trên 70.
Thử thách
DễNgân hàng số của bạn đang dần thành hình! Tài khoản có thể nhận tiền gửi và xử lý các giao dịch rút tiền với bước kiểm tra số dư phù hợp. Giờ hãy thêm một phương thức lấy số dư, rồi kết hợp mọi thứ trong một tình huống ngân hàng thực tế.
Bạn sẽ tiếp tục xây dựng trên các tệp hiện có:
Account.lua: Thêm phương thức:getBalance()để trả về số dư hiện tại. Phương thức này làm theo mẫu getter mà bạn đã học trước đó: cung cấp quyền truy cập có kiểm soát vào dữ liệu bên trong thay vì truy cập trực tiếp vào trường dữ liệu. Giữ lại mọi chức năng hiện có, gồm hàm khởi tạo, phương thức gửi tiền và rút tiền.main.lua: Tạo một tài khoản và thực hiện một loạt thao tác ngân hàng để minh họa cách gửi tiền, rút tiền và kiểm tra số dư phối hợp với nhau trong một tình huống thực tế.
Bạn sẽ nhận năm đầu vào:
- Số tiền gửi ban đầu
- Số tiền rút lần đầu
- Số tiền gửi lần thứ hai
- Số tiền rút lần thứ hai
- Số tiền rút lần thứ ba
Trong tệp chính, hãy tạo một tài khoản và thực hiện các thao tác sau theo thứ tự:
- Gửi số tiền ban đầu, rồi in ra số dư bằng
:getBalance() - Rút số tiền lần đầu, rồi in ra số dư
- Gửi số tiền lần thứ hai, rồi in ra số dư
- Rút số tiền lần thứ hai, rồi in ra số dư
- Thử rút lần thứ ba, rồi in ra số dư
Hãy nhớ rằng các giao dịch rút tiền thất bại sẽ in ra Insufficient funds trước khi bạn in ra số dư.
Ví dụ, nếu các đầu vào là 200, 50, 100, 180 và 100, đầu ra sẽ là:
200
150
250
70
Insufficient funds
70Tài khoản bắt đầu với 200, giảm còn 150 sau lần rút tiền đầu tiên, tăng lên 250 sau lần gửi tiền tiếp theo, giảm còn 70 sau khi rút 180 và vẫn ở mức 70 khi lần rút 100 cuối cùng thất bại do không đủ tiền.
Tự làm thử
-- Nạp module Account bằng require
local Account = require('Account')
-- Đọc năm giá trị đầu vào
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local deposit2 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- Tạo một tài khoản
local account = Account:new()
-- Gửi số tiền ban đầu và in ra số dư bằng :getBalance()
account:deposit(initialDeposit)
print(account:getBalance())
-- Thử rút tiền lần thứ nhất và in ra số dư
account:withdraw(withdrawal1)
print(account:getBalance())
-- Gửi số tiền thứ hai và in ra số dư
account:deposit(deposit2)
print(account:getBalance())
-- Thử rút tiền lần thứ hai và in ra số dư
account:withdraw(withdrawal2)
print(account:getBalance())
-- Thử rút tiền lần thứ ba và in ra số dư
account:withdraw(withdrawal3)
print(account:getBalance())
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ạngTự luyện tập: Trình biên dịch Lua online