Смешанная практика ООП в Dart
Задачи из разных тем раздела в одном наборе - без повторения одной и той же схемы решения.
Сделайте класс Line
с полями sku и price.
Сделайте класс Cart
с методом total(List<Line> lines).
Сделайте DiscountCart, который возвращает
сумму price минус 10,
но не ниже 0.
Дан список:
var items = [
Line("a", 30),
Line("b", 5),
];
Выведите итог для Cart и для DiscountCart.
Сделайте sealed class Auth
с вариантами Guest
и Member с полем name.
Сделайте класс Portal с полем Auth,
который возвращает
"hello guest"
или "hello " и имя.
Выведите оба варианта.
Сделайте абстрактный класс Storage
с абстрактным методом size()
и статическим счетчиком созданных хранилищ.
Сделайте ListStorage, который оборачивает
список строк.
Создайте два ListStorage,
выведите счетчик и оба size().
Сделайте класс Invoice с полями
id и sum.
Сделайте класс Registry
со статической картой int - Invoice.
Запишите счет 1 на сумму 100,
прочитайте по id и выведите sum.
Сделайте enum Role
с константами viewer и editor.
Сделайте класс Account с полем
role и методом canEdit(),
который возвращает true
только для Role.editor.
Сделайте класс AdminAccount, наследующий
Account(Role.editor) и переопределяющий
canEdit() так, чтобы метод всегда
возвращал true.
Выведите три результата canEdit():
Account(Role.viewer), Account(Role.editor),
AdminAccount().
Сделайте sealed class Msg
с вариантами Text с полем body
и Ping.
Сделайте класс Inbox, который хранит
список Msg и метод textCount() -
число сообщений Text.
Дан inbox из Ping(), Text("a"),
Text("b"). Выведите счетчик.
Сделайте класс Ident
с геттером id.
Сделайте класс Task
с полями id и title,
реализующий Ident.
Напишите функцию pickTitle(List<Ident> list, int id),
которая находит заголовок задачи по id.
Дан список из двух Task. Выведите заголовок
для id = 2 и для id = 9.
Сделайте класс Version
с полями major и minor.
Сделайте класс Release, который хранит
Version? и метод set(Version v).
Сделайте класс Tool
с методом label(), возвращающим "tool".
Сделайте VersionTool,
который выводит "tool " и major
из текущего Release, если версия задана,
иначе "tool ?".
Установите Version(2, 1)
и выведите label().