Информация о счете
Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 23 из 70.
Задание
ЛегкоВаш Digital Bank становится всё более профессиональным! Теперь давайте сделаем так, чтобы ваши счета красиво отображались при печати. Добавив метаметод __tostring, вы сможете точно управлять тем, как выглядит счёт: отображать как ID счёта, так и текущий баланс в аккуратном, удобном для чтения формате.
Вы продолжите работу с существующими файлами:
Account.lua: расширьте свой class Account двумя новыми возможностями:- Измените конструктор
:new(), чтобы он принимал параметрid, идентифицирующий каждый счёт - Добавьте метаметод
__tostring, который возвращает отформатированную строку с информацией о счёте
- Измените конструктор
main.lua: создайте счета с ID и продемонстрируйте, как они отображаются при печати.
Метод __tostring должен возвращать строку в точно таком формате:
Account [ID]: Balance = BALANCEЗдесь ID — это ID счёта, а BALANCE — текущий баланс.
Вы получите четыре входных значения:
- ID первого счёта
- Сумма deposit для первого счёта
- ID второго счёта
- Сумма deposit для второго счёта
В основном файле создайте два счёта с заданными ID, внесите соответствующие суммы на каждый из них, затем напрямую выведите каждый счёт с помощью print(). Метаметод __tostring будет автоматически вызван при печати объекта счёта.
Например, если входные значения — 1001, 500, 1002 и 750, результатом должен быть:
Account [1001]: Balance = 500
Account [1002]: Balance = 750Теперь каждый счёт обладает уникальной идентичностью и может понятно описать себя: банковский опыт стал гораздо более профессиональным!
Попробуйте сами
-- Подключить модуль Account
local Account = require('Account')
-- Прочитать четыре входных значения
local id1 = io.read()
local deposit1 = tonumber(io.read())
local id2 = io.read()
local deposit2 = tonumber(io.read())
-- Создать два счёта с ID
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- Внести соответствующие суммы
account1:deposit(deposit1)
account2:deposit(deposit2)
-- Вывести каждый счёт (использует __tostring)
print(account1)
print(account2)
Все уроки раздела Объектно-ориентированное программирование
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигурПотренируйтесь самостоятельно: Онлайн-компилятор Lua