Flutter/Dart: ООП с нуля. Классы и объекты

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

Для создания класса используется ключевое слово class, за которым следует имя класса. Например, создадим класс User для описания пользователя:

class User {
  String name;
  int age;
  bool isHappy;
  List<String> hobbies;
}

Внутри класса определяются поля (характеристики объекта). Каждое поле описывает некоторую характеристику, например, имя (name), возраст (age), уровень счастья (isHappy) и список хобби (hobbies). Типы данных для полей указываются явно (например, String, int, bool, List<String>). Использование явного указания типа данных является общепринятой практикой в Dart. Можно использовать var или dynamic, но явное указание типа предпочтительнее.

Создание объектов и присваивание значений

Создадим объект класса User с именем bob:

var bob = User(); 
bob.name = 'Bob';
print(bob.name); // Выведет 'Bob'

Ключевое слово new при создании объекта в Dart является необязательным. Можно указать тип данных при создании объекта, например User bob = User();, но это избыточно, так как тип уже известен из присваивания.

Значения полей объекта можно устанавливать по отдельности или в одной строке:

var bob = User()
  ..name = 'Bob'
  ..age = 40;

Две точки (..) позволяют выполнять последовательные действия после создания объекта.

Конструкторы

Создадим конструктор, который принимает параметры для инициализации полей объекта. Для того, чтобы параметры были необязательными, используем квадратные скобки:

class User {
  String name;
  int age;
  bool isHappy;
  List<String> hobbies;

  User({this.name, this.age, this.isHappy, this.hobbies}); 
}

Теперь при создании объекта можно передавать параметры:

var alex = User(name: 'Alex', age: 25, isHappy: false, hobbies: ['Basketball', 'Chess']);

Параметр name может быть как обязательным, так и необязательным, в зависимости от того, как будет определен конструктор.

Внутри конструктора значения параметров присваиваются полям объекта с помощью ключевого слова this.

Методы класса

Добавим метод info, который выводит информацию об объекте:

class User {
  // ... (поля и конструктор) ...

  void info() {
    String happyStatus = isHappy ? 'happy' : 'not happy';
    print('User: $name, $age year old, he is $happyStatus');
    print('His hobbies:');
    for (var hobby in hobbies) {
      print(hobby);
    }
  }
}

Теперь можно вызвать метод info для вывода информации об объекте:

bob.info();
alex.info();

Работа с классами и объектами в Dart похожа на другие объектно-ориентированные языки программирования. В этом уроке мы рассмотрели создание классов, объектов, конструкторов и методов. Мы не углублялись в основы ООП, предполагая, что вы уже знакомы с базовыми концепциями. Главное – понять синтаксис Dart для работы с классами и объектами.

Что будем искать? Например,программа