Классы Book и User
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 102 из 110.
Задание
ЛегкоВ предыдущем уроке вы создали класс Book с базовыми свойствами и методом toString(). Теперь пришло время расширить вашу библиотечную систему, добавив класс User для представления членов библиотеки, которые могут брать книги.
Вам нужно будет создать новый файл и обновить существующие файлы:
book.dart: Улучшите существующий классBook, добавив свойствоisAvailable(boolean), которое по умолчанию равноtrue. Это позволит отслеживать, можно ли взять книгу.user.dart: Создайте новый классUserдля представления членов библиотеки. У каждого пользователя должны бытьid(String),name(String) и списокborrowedBooks, содержащий объектыBook. Включите конструктор, который инициализирует id и name, с пустым списком для заимствованных книг. ПереопределитеtoString(), чтобы он возвращал форматUser [id]: name (X books borrowed), где X — количество заимствованных книг.main.dart: Импортируйте файлы книги и пользователя. Создайте книгу с ISBN978-0-13-468599-1, названиемThe Pragmatic Programmerи авторомDavid Thomas. Создайте пользователя с idU001и именемAlice Johnson. Выведите информацию о книге, затем выведите, доступна ли она, используя форматAvailable: trueилиAvailable: false. Выведите информацию о пользователе. Затем добавьте книгу в список заимствованных книг пользователя, установите свойство книгиisAvailableв значениеfalseи снова выведите информацию о пользователе, чтобы показать обновленное количество книг.
Это установит связь между книгами и пользователями, на которой вы будете основываться при реализации полноценной системы заимствования в следующем уроке!
Ожидаемый результат:
[978-0-13-468599-1] The Pragmatic Programmer by David Thomas
Available: true
User U001: Alice Johnson (0 books borrowed)
User U001: Alice Johnson (1 books borrowed)Попробуйте сами
import 'book.dart';
// TODO: Импортируйте user.dart
void main() {
// TODO: Создайте книгу с ISBN '978-0-13-468599-1', title 'The Pragmatic Programmer' и author 'David Thomas'
// TODO: Создайте пользователя с id 'U001' и name 'Alice Johnson'
// TODO: Выведите книгу
// TODO: Выведите, доступна ли книга, используя формат: Available: true/false
// TODO: Выведите пользователя
// TODO: Добавьте книгу в список borrowedBooks пользователя
// TODO: Установите значение isAvailable книги в false
// 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
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий