Получение баланса
Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 22 из 70.
Задание
ЛегкоВаш Цифровой Банк действительно обретает форму! Счета могут принимать депозиты и обрабатывать снятие средств с надлежащей проверкой баланса. Теперь давайте добавим метод-геттер для получения баланса, а затем объединим все в реалистичном банковском сценарии.
Вы продолжите работу над существующими файлами:
Account.lua: Добавьте метод:getBalance(), который возвращает текущий баланс. Это следует паттерну геттера, который вы изучили ранее — предоставление контролируемого доступа к внутренним данным вместо прямого обращения к полю. Сохраните всю существующую функциональность (конструктор, методы deposit и withdraw).main.lua: Создайте счет и выполните последовательность банковских операций, чтобы продемонстрировать, как депозиты, снятия и проверки баланса работают вместе в реальном сценарии.
Вы получите пять входных значений:
- Сумма начального депозита
- Сумма первого снятия
- Сумма второго депозита
- Сумма второго снятия
- Сумма третьего снятия
В вашем основном файле создайте счет и выполните следующие операции по порядку:
- Внесите начальную сумму, затем выведите баланс, используя
:getBalance() - Снимите первую сумму, затем выведите баланс
- Внесите вторую сумму, затем выведите баланс
- Снимите вторую сумму, затем выведите баланс
- Попробуйте выполнить третье снятие, затем выведите баланс
Помните, что при неудачном снятии средств будет выведено сообщение Insufficient funds перед тем, как вы выведете баланс.
Например, если входные данные — 200, 50, 100, 180 и 100, вывод должен быть следующим:
200
150
250
70
Insufficient funds
70Счет начинается с 200, опускается до 150 после первого снятия, поднимается до 250 после еще одного депозита, падает до 70 после снятия 180 и остается на уровне 70, когда последнее снятие 100 не удается из-за недостатка средств.
Попробуйте сами
-- Подключить модуль Account
local Account = require('Account')
-- Прочитать пять входных значений
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())
-- Создать один аккаунт
local account = Account:new()
-- Внести начальную сумму и вывести баланс с помощью :getBalance()
account:deposit(initialDeposit)
print(account:getBalance())
-- Попытаться выполнить первое снятие и вывести баланс
account:withdraw(withdrawal1)
print(account:getBalance())
-- Внести вторую сумму и вывести баланс
account:deposit(deposit2)
print(account:getBalance())
-- Попытаться выполнить второе снятие и вывести баланс
account:withdraw(withdrawal2)
print(account:getBalance())
-- Попытаться выполнить третье снятие и вывести баланс
account:withdraw(withdrawal3)
print(account:getBalance())
Все уроки раздела Object Oriented Programming
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур