Начало работы с объектно-ориентированным Dart | Часть 1

Начало работы с объектно-ориентированным Dart | Часть 1
Начало работы с объектно-ориентированным Dart | Часть 1

Привет, если вы на пути изучения Flutter/Dart или вам просто интересно почитать про разработку подписывайтесь на мой канал в telegram, буду рад вас видеть! А я сегодня поговорим про ООП в DART-е!

Предыдущая статья: Работа с List и Map | DART

В этой статье мы представляем объектно-ориентированные методы работы с классами и демонстрируем, как их можно использовать вместе с Dart. В ходе этой темы вы изучите как объявление, так и расширение объектов. Эти методы важны, поскольку Dart является объектно-ориентированным языком. Изучение основ послужит хорошим ориентиром для повышения вашего собственного уровня квалификации и более легкого внедрения кода других людей.

Статья начинается с краткого обзора ключевой терминологии, связанной с объектно-ориентированным программированием применительно к Dart. Затем мы обсудим, как включить класс в свой репертуар программирования.

По мере того, как ваша разработка становится более сложной, вы сможете использовать пользовательские классы для удовлетворения своих требований. Повышение эффективности работы с классами требует сложного обучения, поэтому делайте небольшие шаги. Со временем вы естественным образом улучшитесь и сможете включать очень сложные темы в свои общие решения.

Начало объектно-ориентированного Dart

Проблема

Вы хотите использовать объектно-ориентированное программирование с помощью Dart для создания повторно используемых компонентов.

Решение

Используйте объектно-ориентированные методы с помощью Dart для разработки кода, отражающего составные объекты, которые отражают моделируемую цель. Dart поддерживает объектно-ориентированные методы и поощряет их использование при разработке алгоритмов и структур данных, необходимых для создания ваших приложений.

Обсуждение

Расширение ваших знаний об объектно-ориентированной разработке значительно улучшит ваши навыки в Dart и Flutter. Изучение того, как создавать объекты, является базовым навыком и поможет вам понять, как связывать алгоритмы со структурами данных. Как правило, объект необходимо инициализировать с помощью специального метода, называемого конструктором. Конструктор отвечает за установку свойств внутри объекта на этапе инициализации.

Объект отражает группировку кода и типов данных в репрезентативную структуру. Например, класс book и инициализированный (созданный в виде экземпляра) объект могут иметь название, автора и издателя в качестве свойств.

На рисунке 5-1 класс book предоставляет определение, а объект book является версией класса во время выполнения. Класс book может также иметь другие свойства (например, isbn) или методы для извлечения (get) и обновления (set) связанных свойств. Удобство объединения данных и кода в определении класса станет более привычным для вас по мере использования языка Dart.

Рисунок 5-1. Пример класса Book
Рисунок 5-1. Пример класса Book

Создание класса

Проблема

Вы хотите создать объект класса, который представляет как данные, так и функциональность.

Решение

Используйте класс для объединения информации в новый объект, обеспечивающий как хранение переменных, так и функциональность для обработки информации. Вот пример того, как объявить класс в Dart:

const numDays = 7; class DaysLeftInWeek { int currentDay = 0; DaysLeftInWeek(){ currentDay = DateTime.now().weekday.toInt(); } int howManyDaysLeft(){ return numDays - currentDay; } }

Обсуждение

Dart является объектно-ориентированным языком и имеет класс Object для всех объектов Dart, кроме null. В результате объект, не имеющий значения null, является подклассом Object. По мере того, как вы будете лучше знакомиться с написанием кода Dart, создание классов станет вашей второй натурой. Объектно-ориентированное программирование предоставляет средства для моделирования идей и ассоциативного поведения. Классы предоставляют модель, в которой вы можете определить как данные, так и функциональные возможности для доступа к встроенным данным в модели.

В примере на рисунке 5-2 класс используется для определения того, сколько дней осталось в неделе.

Рисунок 5-2. Объявления класса
Рисунок 5-2. Объявления класса

В определении класса, показанном на рисунке 5-2, мы видим, что у нас есть свойство currentDay и метод howManyDaysLeft.

В объявлении используется “class” для обозначения следующего определения, включающего элементы как для переменных, так и для функций. Конструктору класса DaysLeftInWeek присваивается то же имя, что и классу, и он вызывается при создании экземпляра объекта. Используйте конструктор класса для выполнения разовых действий, когда класс должен быть создан.

Внутри класса переменная currentDay объявлена как final int, что означает, что ее значение будет определено во время выполнения и будет представлять собой целое число. Кроме того, существует объявленный метод howManyDaysLeft, который используется для выполнения вычисления.

Инициализация класса с помощью конструктора

Проблема

Вы хотите выполнять серию инструкций каждый раз, когда создается новый объект на основе класса.

Решение

Используйте конструктор класса для выполнения инициализации экземпляра объекта. Инициализация может использоваться для установки разумных значений по умолчанию для значений класса.

Вот пример того, как объявить и использовать конструктор класса:

const numDays = 7; class DaysLeftInWeek { int currentDay = 0; DaysLeftInWeek(){ currentDay = DateTime.now().weekday.toInt(); } int howManyDaysLeft(){ return numDays - currentDay; } } void main() { DaysLeftInWeek dayCalculator = DaysLeftInWeek(); print ('Today is day ${dayCalculator.currentDay}'); print ('${dayCalculator.howManyDaysLeft()} day(s) left in the week'); }

Обсуждение

В примере класс используется для определения того, сколько дней осталось в неделе. В объявлении используется “class” для обозначения следующего определения, включающего элементы как для переменных, так и для функций. На рисунке 5-3 обратите внимание, что класс объявляется путем вызова этого класса.

Рисунок 5-3. Инициализация конструктора класса
Рисунок 5-3. Инициализация конструктора класса

Конструктор принимает то же имя, что и класс, и будет вызван при создании экземпляра класса. В этом случае конструктор присваивает переменной класса currentDay значение сегодняшней даты. Обратите внимание, что в классе DaysLeftInWeek определена функция с тем же именем, что и у класса.

Чтобы использовать класс, объявите переменную (например, weekClass) для создания экземпляра класса DaysLeftInWeek. Из объявления переменная weekClass может получить доступ как к переменной, так и к функциям, связанным с классом. Опять же, мы используем ключевое слово final для объявления weekClass и указываем, что значение определяется во время выполнения.

Наконец, инструкции print демонстрируют, как получить доступ к переменной и функции для доступа к базовым данным. В обоих случаях значение класса является производным от переменной weekClass. А currentDay и метод howManyDaysLeft оба способны извлекать данные, связанные с классом.

Если вы знакомы с другими объектно-ориентированными языками, вы можете быть удивлены, что ключевое слово this опущено. Dart требует использования this только для предоставления явных указаний по используемой переменной (т.е. для shadowing переменной). Обратитесь к документации Dart по shadowing переменных, в которой описывается, как избежать этой ситуации.

44
2 комментария

ЛАЙК!

1
Ответить

Благодарю!

Ответить