Классы и объекты
Часть раздела Объектно-ориентированное программирование путешествия по Dart на Coddy — урок 4 из 110.
Классы и объекты служат разным целям. Класс — это чертеж, а объект — это то, что вы создаете по этому чертежу.
Вот пример класса с переменными экземпляра:
class Dog {
String name = '';
String breed = '';
}Переменные, объявленные внутри класса (такие как name и breed), принадлежат каждому объекту, созданному на основе этого класса. Мы подробно изучим переменные экземпляра позже.
Создайте несколько объектов одного и того же класса:
Dog dog1 = Dog();
Dog dog2 = Dog();Каждый объект может иметь свои собственные уникальные значения для этих переменных:
dog1.name = 'Nicky';
dog1.breed = 'Siberian Husky';
dog2.name = 'Teemon';
dog2.breed = 'Labrador';Используйте оператор «точка» . для доступа к переменным объекта:
print('${dog1.name} is a ${dog1.breed}');
print('${dog2.name} is a ${dog2.breed}');Вывод:
Nicky is a Siberian Husky
Teemon is a LabradorКлючевое отличие: Класс Dog определяет структуру, общую для всех собак, в то время как dog1 и dog2 являются отдельными объектами со своими собственными уникальными данными.
Задание
ЛегкоДополните код, чтобы создать два объекта студента из класса Student и установить их переменные.
student.dart: Содержит классStudent(заблокировано)driver.dart: Создайте два объекта и установите их данные
Установите следующие значения:
student1: имя —'Alice'с оценкой'A'student2: имя —'Bob'с оценкой'B'
Шпаргалка
Класс — это чертеж, который определяет структуру и поведение объектов. Объект — это экземпляр, созданный на основе класса.
Определите класс с переменными экземпляра:
class Dog {
String name = '';
String breed = '';
}Создайте объекты на основе класса:
Dog dog1 = Dog();
Dog dog2 = Dog();Получайте доступ к переменным объекта и изменяйте их с помощью оператора «точка» .:
dog1.name = 'Nicky';
dog1.breed = 'Siberian Husky';
dog2.name = 'Teemon';
dog2.breed = 'Labrador';Доступ к переменным объекта:
print('${dog1.name} is a ${dog1.breed}');
// Вывод: Nicky is a Siberian HuskyПопробуйте сами
import 'student.dart';
void main() {
// TODO: Создайте два объекта Student
// TODO: Установите name и grade для student1 (name: 'Alice', grade: 'A')
// TODO: Установите name и grade для student2 (name: 'Bob', grade: 'B')
print('${student1.name} has grade ${student1.grade}');
print('${student2.name} has grade ${student2.grade}');
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
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
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн КомпоновщикПаттерн Репозиторий