Основы объектов в 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 позволяют организовать код в логические структуры, объединяющие данные и поведение. В этой статье мы рассмотрели основы создания и использования объектов:
- Определение классов с полями и методами
- Создание объектов на основе классов
- Взаимодействие между объектами
- Практическое применение в простом примере блога
Объектно-ориентированное программирование значительно упрощает разработку, делая код более организованным, понятным и поддерживаемым. По мере усложнения программ преимущества этого подхода становятся все более очевидными.