Повторение: Менеджер пользователей
Часть раздела Объектно-ориентированное программирование путешествия по Lua на Coddy. Урок 68 из 70.
Задание
ЛегкоДавайте создадим систему управления пользователями: практическое приложение, которое можно встретить во многих реальных программах! Вы создадите два класса, работающих вместе: один будет представлять отдельных пользователей, а другой — эффективно управлять их коллекцией.
Вы организуете код в трёх файлах:
User.lua: создайте класс User, представляющий одного пользователя в системе. У каждого пользователя естьidиname. Добавьте метод:getInfo(), который возвращает строку в формате"ID: {id}, Name: {name}".UserManager.lua: создайте класс менеджера, который управляет коллекцией пользователей. Подумайте, как хранить пользователей для эффективного поиска: использование ID пользователя в качестве ключа таблицы значительно упрощает поиск и удаление пользователей по сравнению с поиском в списке. Вашему менеджеру нужны следующие методы::addUser(user): добавляет объект User в коллекцию:removeUser(id): удаляет пользователя по его ID:findUser(id): возвращает User с совпадающим ID илиnil, если пользователь не найден:listUsers(): выводит информацию обо всех пользователях, по одному в строке
main.lua: объедините всё вместе! Создайте UserManager, добавьте пользователей на основе полученных входных данных, выполните операции и выведите результаты.
Вы получите пять входных данных:
- ID первого пользователя (число)
- Имя первого пользователя
- ID второго пользователя (число)
- Имя второго пользователя
- ID пользователя, которого нужно найти (число)
В основном файле:
- Создайте UserManager и добавьте обоих пользователей
- Вызовите
:listUsers(), чтобы вывести всех пользователей - Удалите первого пользователя (используя первый ID)
- Выведите
"After removal:" - Снова вызовите
:listUsers() - Найдите пользователя с ID из пятого входного параметра: если пользователь найден, выведите информацию о нём; если нет, выведите
"User not found"
Например, если входные данные — 101, Alice, 102, Bob и 102, результатом должен быть:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: BobЕсли входные данные — 201, Charlie, 202, Diana и 201, результатом должен быть:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundОбратите внимание: во втором примере после удаления пользователя 201 (Charlie) поиск по этому ID возвращает "User not found", поскольку пользователя больше нет в системе!
Попробуйте сами
-- main.lua: Свести всё воедино
local User = require('User')
local UserManager = require('UserManager')
-- Считать входные данные
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())
-- TODO: Создать экземпляр UserManager
-- TODO: Создать два объекта User с входными данными
-- TODO: Добавить обоих пользователей в менеджер
-- TODO: Вызвать listUsers() для вывода всех пользователей
-- TODO: Удалить первого пользователя (используя id1)
-- TODO: Print "After removal:"
-- TODO: Вызвать listUsers() снова
-- TODO: Найти пользователя с searchId
-- If found, print their info; if not found, print "User not found"
Все уроки раздела Объектно-ориентированное программирование
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур9Композиция и примеси
Отношение "Has-A"ДелегированиеПростые примесиПрименение нескольких примесейПримеси против наследованияИтоги — Сборка робота12Финальные испытания
Повторение: Система инвентаряПовторение: Менеджер пользователейПовторение: Трекер счетаИтоговая проверка ООППотренируйтесь самостоятельно: Онлайн-компилятор Lua