Финальное тестирование банка
Часть раздела Object Oriented Programming путешествия по Lua на Coddy — урок 25 из 70.
Задание
ЛегкоПоздравляем с созданием полноценной системы цифрового банка! Ваш класс Account теперь поддерживает депозиты, снятие средств, проверку баланса, идентификацию счетов и переводы между счетами. Давайте проверим все это в деле на примере реалистичного сценария банковского обслуживания нескольких счетов.
В этом финальном испытании вы смоделируете работу небольшого банка с тремя клиентами, совершающими различные транзакции. Это позволит убедиться, что все ваши методы корректно работают вместе и что счета действительно сохраняют независимое состояние.
Ваши два файла:
Account.lua: Ваш готовый класс Account со всей функциональностью, которую вы создали в ходе этого проекта (конструктор с ID, deposit, withdraw, getBalance, __tostring и transfer).main.lua: Скрипт симуляции, который создает несколько счетов и выполняет серию транзакций между ними.
Вы получите шесть входных значений:
- ID счета 1
- ID счета 2
- ID счета 3
- Начальный депозит для счета 1
- Начальный депозит для счета 2
- Начальный депозит для счета 3
В вашем основном файле (main) смоделируйте следующий банковский день:
- Создайте три счета с указанными ID
- Внесите начальные суммы на каждый соответствующий счет
- Счет 1 переводит 100 на счет 2
- Счет 2 переводит 150 на счет 3
- Счет 3 переводит 50 на счет 1
- Счет 1 пытается перевести 1000 на счет 3 (это должно завершиться ошибкой)
- Выведите информацию о всех трех счетах по порядку (Счет 1, затем 2, затем 3)
Например, если входные данные — A001, A002, A003, 500, 300 и 200, результат должен быть следующим:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300Давайте проследим за операциями: Счет 1 начинает с 500, переводит 100 счету 2 (остается 400), затем получает 50 от счета 3 (становится 450). Счет 2 начинает с 300, получает 100 (становится 400), переводит 150 счету 3 (остается 250). Счет 3 начинает с 200, получает 150 (становится 350), переводит 50 счету 1 (остается 300). Последний перевод в 1000 не удается, так как на счету 1 всего 450.
Попробуйте сами
-- Подключить модуль Account
local Account = require('Account')
-- Прочитать шесть входных значений
local id1 = io.read()
local id2 = io.read()
local id3 = io.read()
local initialDeposit1 = tonumber(io.read())
local initialDeposit2 = tonumber(io.read())
local initialDeposit3 = tonumber(io.read())
-- Создать три аккаунта с идентификаторами
-- TODO: создать account1, account2, account3, используя Account:new()
-- Внести начальные суммы на каждый соответствующий счет
-- TODO: внести initialDeposit1 на account1, initialDeposit2 на account2, initialDeposit3 на account3
-- Аккаунт 1 переводит 100 на Аккаунт 2
-- TODO: account1:transfer(account2, 100)
-- Аккаунт 2 переводит 150 на Аккаунт 3
-- TODO: account2:transfer(account3, 150)
-- Аккаунт 3 переводит 50 на Аккаунт 1
-- TODO: account3:transfer(account1, 50)
-- Аккаунт 1 пытается перевести 1000 на Аккаунт 3 (это должно завершиться ошибкой)
-- TODO: account1:transfer(account3, 1000)
-- Вывести все три аккаунта по порядку
-- TODO: вывести account1, account2, account3
Все уроки раздела Object Oriented Programming
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур