Skip to content

Основы объектов в Dart

Основы объектов в Dart

В программировании объект — это структура данных, которая объединяет в себе связанные данные (поля или свойства) и функциональность (методы). Dart, как и многие современные языки программирования, использует объектно-ориентированный подход.

void main() {
	var test = {
		'name': 'John',
		'age': 30,
		'city': 'New York',
	};
 
	print(test);
}
 

Создание простого класса

Класс — это шаблон для создания объектов. Давайте создадим простой класс Article (Статья):

class Article {
  // Поля (свойства) класса
  String title;
  int wordCount;
  DateTime publishDate;
  List<String> images;
 
  // Конструктор
  Article(this.title, this.wordCount, this.publishDate, this.images);
}

Создание объектов

Теперь, когда у нас есть класс, мы можем создавать объекты этого класса:

void main() {
  // Создаем объект статьи
  var article = Article(
    'Введение в Dart',
    5000,
    DateTime(2024, 8, 15),
    ['photo1.jpg', 'photo2.jpg', 'photo3.jpg']
  );
 
  // Доступ к полям объекта
  print('Название: ${article.title}');
  print('Количество слов: ${article.wordCount}');
  print('Дата публикации: ${article.publishDate}');
  print('Изображения: ${article.images}');
}

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

Добавим методы к нашему классу, чтобы он мог выполнять действия:

class Article {
  String title;
  int wordCount;
  DateTime publishDate;
  List<String> images;
 
  Article(this.title, this.wordCount, this.publishDate, this.images);
 
  // Метод для получения краткой информации о статье
  String getSummary() {
    return '$title - $wordCount слов, опубликовано ${publishDate.day}.${publishDate.month}.${publishDate.year}';
  }
 
  // Метод для добавления изображения
  void addImage(String imageUrl) {
    images.add(imageUrl);
  }
 
  // Метод для получения количества изображений
  int get imageCount => images.length;
}

Использование объектов

void main() {
  var article = Article(
    'Введение в Dart',
    5000,
    DateTime(2024, 8, 15),
    ['photo1.jpg', 'photo2.jpg', 'photo3.jpg']
  );
 
  // Вызов методов объекта
  print(article.getSummary());
 
  article.addImage('photo4.jpg');
  print('Всего изображений: ${article.imageCount}');
}

Несколько типов объектов

Создадим также класс для автора статьи:

class Author {
  String name;
  String email;
  DateTime registrationDate;
  List<Article> articles = []; // Список статей автора
 
  Author(this.name, this.email, this.registrationDate);
 
  // Метод для добавления статьи
  void addArticle(Article article) {
    articles.add(article);
  }
 
  // Метод для получения общего количества слов во всех статьях
  int getTotalWordCount() {
    int total = 0;
    for (var article in articles) {
      total += article.wordCount;
    }
    return total;
  }
 
  // Получить информацию об авторе
  String getInfo() {
    return '$name ($email) - ${articles.length} статей';
  }
}

Взаимодействие между объектами

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

void main() {
  // Создаем автора
  var author = Author(
    'Иван Петров',
    'ivan@example.com',
    DateTime(2023, 5, 10)
  );
 
  // Создаем несколько статей
  var article1 = Article(
    'Введение в Dart',
    5000,
    DateTime(2024, 8, 15),
    ['img1.jpg', 'img2.jpg']
  );
 
  var article2 = Article(
    'Объекты в Dart',
    3500,
    DateTime(2024, 9, 20),
    ['img3.jpg']
  );
 
  // Добавляем статьи автору
  author.addArticle(article1);
  author.addArticle(article2);
 
  // Выводим информацию
  print(author.getInfo());
  print('Общее количество слов: ${author.getTotalWordCount()}');
 
  // Выводим информацию о статьях
  for (var article in author.articles) {
    print(article.getSummary());
  }
}

Пример реального использования

Представим, что мы создаем систему блога:

void main() {
  // Создаем авторов
  var author1 = Author('Анна Иванова', 'anna@blog.com', DateTime(2023, 3, 15));
  var author2 = Author('Петр Сидоров', 'petr@blog.com', DateTime(2023, 7, 22));
 
  // Создаем статьи
  var techArticle = Article(
    'Особенности Dart',
    4500,
    DateTime(2024, 2, 10),
    ['dart_logo.png', 'code_example.jpg']
  );
 
  var travelArticle = Article(
    'Путешествие по Европе',
    7800,
    DateTime(2024, 8, 5),
    ['paris.jpg', 'rome.jpg', 'berlin.jpg', 'madrid.jpg']
  );
 
  var foodArticle = Article(
    'Лучшие рецепты итальянской кухни',
    3200,
    DateTime(2024, 9, 12),
    ['pasta.jpg', 'pizza.jpg']
  );
 
  // Назначаем статьи авторам
  author1.addArticle(techArticle);
  author1.addArticle(foodArticle);
  author2.addArticle(travelArticle);
 
  // Выводим информацию о блоге
  print('=== БЛОГ ===');
  print('Авторы:');
  print(author1.getInfo());
  print(author2.getInfo());
 
  print('\nСтатьи:');
  var allArticles = [...author1.articles, ...author2.articles];
  for (var article in allArticles) {
    print('- ${article.getSummary()} (${article.imageCount} изображений)');
  }
 
  // Добавляем новое изображение к статье
  foodArticle.addImage('dessert.jpg');
  print('\nОбновленная статья:');
  print('- ${foodArticle.getSummary()} (${foodArticle.imageCount} изображений)');
}

Заключение

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

  • Определение классов с полями и методами
  • Создание объектов на основе классов
  • Взаимодействие между объектами
  • Практическое применение в простом примере блога

Объектно-ориентированное программирование значительно упрощает разработку, делая код более организованным, понятным и поддерживаемым. По мере усложнения программ преимущества этого подхода становятся все более очевидными.

23 мар. 2025 г.
andron13