Интерфейс администратора
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 105 из 110.
Задание
ЛегкоВ предыдущем уроке вы добавили функциональность поиска в свой класс Library. Теперь давайте создадим интерфейс администратора, который позволит привилегированным пользователям управлять инвентарем библиотеки — добавлять новые книги и удалять существующие.
Вы введете новый класс Admin и расширите свою Library административными возможностями:
book.dart: Оставьте существующий классBookбез изменений.user.dart: Оставьте существующий классUserбез изменений.admin.dart: Создайте новый классAdmin, который представляет администраторов библиотеки. У администратора естьid(String) иname(String). ПереопределитеtoString(), чтобы он возвращалAdmin [id]: name.library.dart: Добавьте административную функциональность в ваш классLibrary:- Добавьте список для хранения зарегистрированных администраторов
registerAdmin(Admin admin)— добавляет администратора в библиотекуaddBookAsAdmin(String adminId, Book book)— если администратор существует, добавляет книгу и выводитadminId added "title". Если администратор не существует, выводитUnauthorized.removeBook(String adminId, String isbn)— если администратор существует и книга существует, удаляет книгу из библиотеки и выводитadminId removed "title". Если администратор не существует, выводитUnauthorized. Если книга не найдена, выводитBook not found.getBookCount()— возвращает общее количество книг в библиотеке
main.dart: Продемонстрируйте интерфейс администратора. СоздайтеLibraryи зарегистрируйте администратора (A001,Sarah Admin). Используйте администратора, чтобы добавить три книги:978-0-13-468599-1,The Pragmatic Programmer,David Thomas978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford978-0-13-235088-4,Clean Code,Robert Martin
Total books: X. Затем попробуйте добавить книгу с незарегистрированным id администратораA999. Удалите вторую книгу, используя зарегистрированного администратора. Выведите итоговое количество книг.
Ожидаемый вывод:
A001 added "The Pragmatic Programmer"
A001 added "JavaScript: The Good Parts"
A001 added "Clean Code"
Total books: 3
Unauthorized
A001 removed "JavaScript: The Good Parts"
Total books: 2Попробуйте сами
import 'book.dart';
import 'user.dart';
import 'library.dart';
import 'admin.dart';
void main() {
// TODO: Создать библиотеку
// TODO: Создать и зарегистрировать администратора (A001, Sarah Admin)
// TODO: Использовать администратора для добавления трех книг:
// - 978-0-13-468599-1, The Pragmatic Programmer, David Thomas
// - 978-0-596-51774-8, JavaScript: The Good Parts, Douglas Crockford
// - 978-0-13-235088-4, Clean Code, Robert Martin
// TODO: Вывести количество книг в формате "Total books: X"
// TODO: Попробовать добавить книгу, используя незарегистрированный ID администратора A999
// TODO: Удалить вторую книгу (978-0-596-51774-8), используя зарегистрированного администратора
// TODO: Вывести итоговое количество книг
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыБиблиотеки и импортВведение в ООПКлассы и объектыКлючевое слово thisМетодыПеременные экземпляраОсновы конструкторовИтоги — Простой калькулятор4Null-безопасность
Введение в Null-безопасностьNullable и Non-Nullable типыОператоры ? и !Ключевое слово Late и Null-безопасностьNull-aware операторыNull-безопасность в классахИтоги — Система профилей пользователей7Абстрактные классы и интерфейсы
Абстрактные классыАбстрактные методыИнтерфейсы в DartНеявные интерфейсыРеализация против наследованияМножественные интерфейсыИтоги — Калькулятор фигур10Коллекции и обобщения
Обзор List, Set, MapТипобезопасные коллекцииОбобщенные классыОбобщенные методыОграничения обобщенийIterable и IteratorИтоги: Обобщенное хранилище13Продвинутые концепции ООП
Композиция против наследованияМетоды расширенияВызываемые классыЗапечатанные классы (Dart 3)Записи (Dart 3)Паттерны и сопоставление (3.0)Перечисления с методами16Проект: Управление библиотекой
Обзор проектаКлассы Book и User2Конструкторы в Dart
Конструктор по умолчаниюИменованные конструкторыСписки инициализацииКонстантные конструкторыФабричные конструкторыПеренаправляющие конструкторыИтоги — Shape Builder5Инкапсуляция
Публичные и приватные членыСоглашение о префиксе _Приватность на уровне библиотекГеттеры и сеттеры: подробный разборСкрытие данныхИтоги — Записи о студентах8Mixins
Введение в MixinsСоздание MixinsИспользование нескольких MixinsКлючевое слово on в MixinsMixin и наследованиеMixin и интерфейсИтоги: Система животных11Специальные методы
Переопределение toString()Переопределение hashCode и ==Интерфейс ComparableМетод call()Переопределение noSuchMethodПовторение — Пользовательская коллекция14Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy3Свойства классов
Члены экземпляра и статические членыПоля Final и ConstПеременные LateСтатические методы и поляГеттеры и сеттерыИтоги — Менеджер банковского счета6Наследование
Основы наследованияКлючевое слово superПереопределение методовАннотация @overrideКлючевое слово final для классовКонструкторы и наследованиеИтоги: Иерархия сотрудников9Полиморфизм
Основы полиморфизмаПолиморфизм через интерфейсыПроверка типов во время выполненияОператоры is и asКлючевое слово covariantИтоги — Обработчик платежей12Асинхронное ООП
Futures и async/awaitОсновы StreamsКонтроллеры StreamАсинхронные конструкторыАсинхронность в методах классовИтоги — Data Fetcher15Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий