Классы и Объекты Flashcards

1
Q

Что такое Классы?

A

Классы - это своего рода шаблон или “фабрика” для создания объектов, которые могут выполнять одинаковые действия.

class Person {
// Свойства класса
String name;
int age;

// Конструктор класса
Person(this.name, this.age);

// Метод класса
void introduce() {
print(‘Привет, меня зовут $name, и мне $age лет.’);
}
}

void main() {
// Создание объекта класса
Person person1 = Person(‘Кейт’, 20);
Person person2 = Person(‘Алекс’, 25);

// Вызов метода объекта
person1.introduce(); // Вывод: Привет, меня зовут Кейт, и мне 20 лет.
person2.introduce(); // Вывод: Привет, меня зовут Алекс, и мне 25 лет.
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое объекты?

A

Это экземпляры классов.

Каждый объект может иметь свои собственные значения свойств (переменных).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Сколько конструкторов может быть в одном классе?

A

В Dart можно иметь несколько конструкторов для одного класса с помощью именованных конструкторов.
То есть, один класс может иметь один основной конструктор и несколько именованных конструкторов.
Это полезно, когда нужно создавать объекты класса с разными наборами данных.

Именованные конструкторы позволяют более гибко создавать объекты класса с разными начальными условиями.

class Person {
String name;
int age;

// Основной конструктор
Person(this.name, this.age);

// Именованный конструктор
Person.withName(this.name) {
age = 0; // Устанавливаем возраст по умолчанию
}

// Еще один именованный конструктор
Person.withAge(this.age) {
name = ‘Неизвестно’; // Устанавливаем имя по умолчанию
}
}

void main() {
Person person1 = Person(‘Алекс’, 25); // Основной конструктор
Person person2 = Person.withName(‘Кейт’); // Именованный конструктор
Person person3 = Person.withAge(30); // Другой именованный конструктор

print(person1.name); // Вывод: Алекс
print(person2.age); // Вывод: 0
print(person3.name); // Вывод: Неизвестно
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что может содержаться внутри класса?

A

В классе могут быть геттеры и сеттеры, статические переменные и методы, константы, приватные свойства и методы, абстрактные методы и классы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Напиши пример класса Car.

A

class Car {
String model;
int year;

// Конструктор класса
Car(this.model, this.year);

// Метод для отображения информации о машине
void displayInfo() {
print(‘Модель: $model, Год: $year’);
}
}

void main() {
Car car1 = Car(‘Toyota’, 2020);
Car car2 = Car(‘Honda’, 2018);

car1.displayInfo(); // Вывод: Модель: Toyota, Год: 2020
car2.displayInfo(); // Вывод: Модель: Honda, Год: 2018
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

В чем разница между классом и функцией?

A

Несмотря на сходство, между классами и функциями есть важные отличия:

Инкапсуляция: Классы позволяют организовать данные и методы, связанные с этими данными, в одном месте. Это способствует лучшей организации кода и инкапсуляции (скрытию деталей реализации).

Наследование и полиморфизм: Классы могут наследоваться друг от друга, что позволяет создавать иерархии и переопределять методы. Функции не имеют этой возможности.

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

Таким образом, класс — это более сложная и мощная структура, чем просто функция. Классы позволяют создавать объекты с состоянием и поведением, что делает их особенно полезными в объектно-ориентированном программировании.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое конструктор?

A

Это специальный метод, который вызывается при создании объекта и используется для инициализации свойств

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Расскажи про статические переменные и методы. Что в них особенного? Когда используются. Напиши пример.

A

Статические переменные и методы принадлежат самому классу, а не объектам этого класса.

Это значит, что они общие для всех объектов данного класса и могут вызываться без создания объекта.

class Counter {
static int count = 0; // Статическая переменная

static void increment() { // Статический метод
count++;
}
}

void main() {
Counter.increment(); // Вызываем метод без создания объекта
print(Counter.count); // Вывод: 1
}

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

Статические переменные полезны для хранения данных, которые остаются неизменными и доступны всем объектам класса. Например, в классе можно хранить информацию, общую для всех его объектов, такую как параметры конфигурации или единицы измерения.

class Earth {
static const double gravity = 9.8; // Константа, общая для всех объектов класса
}

void main() {
print(Earth.gravity); // Вывод: 9.8
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Можно ли обновлять значение статической переменной извне?
При каких условиях?

A

Да, можно обновить значение статической переменной, как любой другой переменной, если она не объявлена как final или const.

Но лучше сделать её приватной и контролировать с помощью геттеров и сеттеров.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

В чём разница между final и const?

A

В Dart оба ключевых слова, final и const, используются для создания неизменяемых значений (констант), НО они отличаются в том, как и когда эти значения присваиваются.

final (окончательное значение)

Присваивается один раз: Переменной, объявленной с ключевым словом final, можно присвоить значение только один раз. Это значение может быть вычислено в момент выполнения программы.
Инициализация во время выполнения: Переменная final инициализируется один раз при первом доступе к ней. Значение может быть результатом сложных вычислений или зависеть от условий выполнения программы.

void main() {
final currentTime = DateTime.now(); // Значение присваивается во время выполнения
print(currentTime); // Выводит текущее время
}

const (константа)

Компиляция: Переменные, объявленные с const, должны быть неизменяемыми на этапе компиляции. Это означает, что значение должно быть известно и присвоено до начала выполнения программы.
Фиксированное во времени: Значение, присвоенное переменной const, должно быть абсолютно фиксированным и неизменяемым. Оно не может зависеть от данных, которые вычисляются в процессе выполнения программы.

void main() {
const pi = 3.14159; // Значение известно заранее
print(pi); // Вывод: 3.14159
}

Здесь pi — это константа, которая известна заранее и фиксирована в коде, так как её значение не меняется во время выполнения программы.

Таким образом, final позволяет создавать переменные, которые можно инициализировать во время выполнения программы, а const требует, чтобы значение было известно и неизменно на этапе компиляции.

(в конце Урока 5)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Чем отличаются от обычных классов. Напиши синтаксис.

A

Абстрактные классы могут содержать абстрактные методы, которые не имеют реализации. Эти методы должны быть реализованы в подклассах.

Абстрактные методы не имеют тела (фигурных скобок)

abstract class Animal {
void makeSound(); // абстрактный метод
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Опиши реализацию абстрактного класса в подкласса.

A

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

Если какой-то метод не реализован, то сам подкласс также должен быть объявлен как абстрактный.

abstract class Animal {
void makeSound(); // абстрактный метод
}

class Dog extends Animal {
@override
void makeSound() {
print(‘Woof!’);
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Зачем нужны абстрактные классы?

A

Абстрактные классы используются для создания базовых классов.

Основная цель абстрактных классов — задать общий интерфейс для классов-потомков и обеспечить, чтобы в этих классах были определены конкретные реализации методов.

Абстрактные классы служат шаблоном для других классов, которые должны реализовать их методы и свойства.

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

Кодовая организация: Абстрактные классы помогают группировать общие функции или поведение, чтобы не дублировать код.

Интерфейсы и полиморфизм: Абстрактные классы позволяют реализовать полиморфизм — когда объекты разных классов могут использоваться единообразно благодаря общей структуре.

abstract class Animal {
void makeSound();
}

class Cat extends Animal {
@override
void makeSound() {
print(‘Meow!’);
}
}

class Dog extends Animal {
@override
void makeSound() {
print(‘Woof!’);
}
}

void main() {
Animal myDog = Dog();
Animal myCat = Cat();

myDog.makeSound(); // Выведет: Woof!
myCat.makeSound(); // Выведет: Meow!
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly