- Документация
- Основы Dart 2.x
- Основы Dart 2.x (Классы и объекты)

За последние 30 дней: 41 просмотр, 20 посетителей.
Основы Dart 2.x (Классы и объекты)
- Dart является объектно-ориентированным языком, но в нем присутствуют некоторые отличия данной парадигмы от Java\C#.
- Dart нет специальных ключевых слов (public; private; protected) то есть спецификаторов доступа, по этому все идентификаторы «публичны» по умолчанию. Вопрос инкапсуляции решен соглашением: приватными считаются все члены класса, чье имя начинается с подчеркивания "_".
String _name = "TOYOTA"; // Приватное поле name
Классы и объекты
ООП - парадигма программирования, в которой основными концепциями являются понятия объектов и классов.
Объект — это сущность (экземпляр класса), которой можно посылать сообщения и которая может на них реагировать, используя свои данные. Объект может обладать двумя основными характеристиками: состояние - некоторые данные которые хранит объект (поля или переменные класса), и поведение - действия, которые может совершать объект (методы).
Пример программы на Dart:
void main (){ //Метод main, точка входа в программу Dart
ToyotaCars corolla = ToyotaCars(); // Создание объекта corolla класса ToyotaCars
// Изменяем данные объекта corolla
corolla.color = "Black";
corolla.vin_code = 236478;
// Вызов метода display() (тоесть происходит некое действие объекта corolla)
corolla.display();
}
class ToyotaCars{
String color; // Поле класса
int vin_code; // Ещё одно поле класса
void display(); { // Метод, который можно вызвать с помощью объекта данного класса
print("Color: $color VIN_CODE: $vin_code"); // Знак $ это интерполяция
}
}
Конструкторы
Кроме обычных методов, классы могут определять специальные методы, которые называются конструкторами. Конструкторы вызываются при создании нового объекта данного класса. Конструкторы выполняют инициализацию объекта.
Разберем 2-ю строчку кода:
ToyotaCars corolla = ToyotaCars();
Самое первое мы пишем имя класса ToyotaCars, далее имя создаваемого объекта corolla и через оператор присвоения (=) метод без параметров ToyotaCars() - он же и есть наш конструктор, который выполнить инициализацию нашего объекта corolla.
Конструктор с параметрами
Если необходимо что бы при создании объекта поля класса получали какие-то определенные значения тогда используется конструктор с параметрами:
void main (){
ToyotaCars auris = ToyotaCars("Yellow", 234453); //Определяем значения переменных
auris.display();
}
class ToyotaCars{
String color;
int vin_code;
ToyotaCars(String с, int v) //Определяем конструктор с параметрами
{
color = с;
vin_code = v;
}
void display(){
print("Color: $color VIN_CODE: $vin_code");
}
}
Ключевое слово this - всегда служит ссылкой на объект, для которого был вызван метод. Ключевое слово this можно использовать везде, где допускается ссылка на объект типа текущего класса.
Пример:
class ToyotaCars{
String color;
int vin_code;
ToyotaCars(String color, int vin_code)
{
this.color = color;
this.vin_code = vin_code;
}
Либо с помощью this, мы можем сократить определение конструктора:
class ToyotaCars{
String color;
int vin_code;
ToyotaCars(this.color, this.vin_code);
void display(){
print("Color: $color VIN_CODE: $vin_code");
}
}
Именованные конструкторы
По умолчанию мы можем определить только один общий конструктор. Если же нам необходимо использовать в классе сразу несколько конструкторов, тогда необходимо применять именованные конструкторы, это выглядит как дополнительное имя конструктору, через точку от имени класса.
Например:
void main (){
ToyotaCars corolla = ToyotaCars.corolla_only(); // Именованный конструктор.
corolla.display();
ToyotaCars auris = ToyotaCars.for_auris("Green", 334658); // Второй именованный конст.
auris.display();
}
class ToyotaCars{
String color;
int vin_code;
ToyotaCars.corolla_only(){
color = "Black";
vin_code = 784643;
}
ToyotaCars.for_auris(String c, int v){
color = c;
vin_code = v;
}
void display(){
print("Color: $color VIN_CODE: $vin_code");
}
}