Итоги — Shape Builder
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 16 из 110.
Задание
ЛегкоДавайте создадим класс Rectangle, который объединит все техники работы с конструкторами, изученные вами в этой главе. Вы создадите универсальный класс фигуры, экземпляр которого можно создать несколькими способами.
Вы организуете свой код в двух файлах:
rectangle.dart: Определите классRectangleсо следующим содержимым:- Два поля
final double:widthиheight - Два вычисляемых поля
final double:areaиperimeter - Основной конструктор, который принимает
widthиheight, используя список инициализации для вычисленияarea(width × height) иperimeter(2 × (width + height)) - Именованный конструктор
Rectangle.square(double side), который перенаправляет к основному конструктору с равными шириной и высотой - Именованный конструктор
Rectangle.golden(double width), который создает прямоугольник с использованием золотого сечения (height = width × 1.618), перенаправляя к основному конструктору - Константный конструктор
Rectangle.unit(), который создает прямоугольник 1×1 (для этого вам понадобится отдельный const конструктор) - Метод
display(), который выводит информацию о прямоугольнике
- Два поля
main.dart: Импортируйте ваш класс прямоугольника и создайте четыре прямоугольника:- Произвольный прямоугольник с шириной
4.0и высотой3.0 - Квадрат со стороной
5.0 - Золотой прямоугольник с шириной
10.0 - Единичный прямоугольник, используя константный конструктор (создайте его как константу времени компиляции)
display()для каждого прямоугольника в порядке, указанном выше.- Произвольный прямоугольник с шириной
Метод display() должен выводить данные именно в таком формате:
Rectangle [width]x[height] | Area: [area] | Perimeter: [perimeter]Ожидаемый вывод:
Rectangle 4.0x3.0 | Area: 12.0 | Perimeter: 14.0
Rectangle 5.0x5.0 | Area: 25.0 | Perimeter: 20.0
Rectangle 10.0x16.18 | Area: 161.8 | Perimeter: 52.36
Rectangle 1.0x1.0 | Area: 1.0 | Perimeter: 4.0Попробуйте сами
import 'rectangle.dart';
void main() {
// TODO: Создайте пользовательский прямоугольник с шириной 4.0 и высотой 3.0
// TODO: Создайте квадрат со стороной 5.0
// TODO: Создайте золотой прямоугольник с шириной 10.0
// TODO: Создайте единичный прямоугольник, используя константный конструктор
// (создайте его как константу времени компиляции, используя 'const')
// TODO: Вызовите display() для каждого прямоугольника в порядке, указанном выше
}
Все уроки раздела Объектно-ориентированное программирование
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
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий