Перевод средств
Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 24 из 70.
Задание
ЛегкоВаш Digital Bank почти готов! Последняя важная функция — возможность переводить деньги между account. Именно здесь по-настоящему проявляются преимущества объектно-ориентированного дизайна: один объект account может напрямую взаимодействовать с другим объектом account.
Вы добавите метод :transfer(targetAccount, amount), который перемещает деньги с одного account на другой. Подумайте, что на самом деле включает эта операция: это снятие средств с исходного account, за которым следует внесение средств на targetAccount. Преимущество в том, что вы можете повторно использовать уже созданные методы!
Продолжайте работать с существующими файлами:
Account.lua: добавьте метод:transfer(targetAccount, amount)в свой Account class. Этот метод должен попытаться снять amount сselfи, если операция успешна, внести этот amount наtargetAccount. Если снятие не удалось (недостаточно средств), перевод не должен выполняться. Сохраните всю существующую функциональность (constructor с ID, deposit, withdraw, getBalance и __tostring).main.lua: создайте несколько account и продемонстрируйте переводы между ними, показывая, как изменяются балансы разных объектов account.
Вы получите пять входных значений:
- ID первого account
- ID второго account
- Начальное пополнение первого account
- Сумма первого перевода (с account 1 на account 2)
- Сумма второго перевода (с account 1 на account 2)
В основном файле создайте два account с указанными ID (оба начинают с балансом 0), внесите начальную сумму на первый account, затем попытайтесь выполнить оба перевода с первого account на второй. После каждой попытки перевода выведите оба account (метод __tostring покажет их текущее состояние).
Например, если входные значения — 101, 102, 500, 200 и 400, результат должен быть таким:
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200После пополнения на 500 первый account начинает с балансом 500. Первый перевод в размере 200 выполняется успешно, поэтому на account 101 остаётся 300, а на account 102 становится 200. Второй перевод в размере 400 завершается неудачей, поскольку на account 101 есть только 300, поэтому оба баланса остаются без изменений.
Попробуйте сами
-- Подключить модуль Account
local Account = require('Account')
-- Прочитать пять входных значений
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())
-- Создать два счёта с ID
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- Внести начальную сумму на первый счёт
account1:deposit(initialDeposit)
-- TODO: Попытаться выполнить первый перевод с account1 на account2
-- TODO: Вывести оба счёта после первого перевода
-- TODO: Попытаться выполнить второй перевод с account1 на account2
-- TODO: Вывести оба счёта после второго перевода
Все уроки раздела Объектно-ориентированное программирование
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигурПотренируйтесь самостоятельно: Онлайн-компилятор Lua