Повторение: Менеджер пользователей
Часть раздела Object Oriented Programming путешествия по 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: Вывести "After removal:"
-- TODO: Снова вызвать listUsers()
-- TODO: Найти пользователя по searchId
-- Если найден, вывести информацию о нем; если не найден, вывести "User not found"
Все уроки раздела Object Oriented Programming
1Концепция 'self'
Таблицы с функциямиЯвный 'self'Синтаксис с двоеточиемТочка против двоеточияИтоги — Движущаяся точка4Проект: Цифровой банк
Настройка проектаМетод пополнения7Полиморфизм и переопределение
Переопределение методовВызов родительских методовУтиная типизацияОбщий интерфейсПроверка типаИтоги — Роли сотрудников2Паттерн прототипа класса
Концепция прототипаСвязывание через __indexКонструктор :new()Инициализация атрибутовНезависимые экземплярыИтоги — Автозавод5Перегрузка операторов в ООП
Сложение объектовВычитание объектовКонкатенация объектовСравнение объектов (<, >)Повторение — Математика кошелька8Инкапсуляция
Соглашения об именованииЗамыкания для приватностиДоступ через замыканияТаблицы только для чтенияЛогика валидацииИтоги — Защищенное хранилище11Паттерны проектирования (Lite)
Фабричные функцииТаблица SingletonПаттерн IteratorObserver (Слушатель)Итоги — Logger Factory3Состояние и поведение объектов
Переменные экземпляраГеттерыСеттерыВычисляемые свойстваФорматирование строкПроверка на равенствоПовторение — Оценка студента6Основы наследования
Настройка наследованияНаследование методовРасширение конструктораДобавление дочерних методовОбщее и уникальноеИтоги: Иерархия фигур9Композиция и примеси
Отношение "Has-A"ДелегированиеПростые примесиПрименение нескольких примесейПримеси против наследованияИтоги — Сборка робота12Финальные испытания
Повторение: Система инвентаряПовторение: Менеджер пользователейПовторение: Трекер счетаИтоговая проверка ООП