57.14K
Категория: ПрограммированиеПрограммирование

Лекция 4

1.

Основы объектноориентированного
программирования в DART:
Классы и объекты

2.

Определение классов в Dart
Класс определяет свойства (переменные или поля) и
методы (функции), которые объект может иметь.
В Dart классы определяются с использованием
ключевого слова class, за которым следует имя класса.
class ClassName {
// Поля (свойства)
String name;
int age;
}
Поля могут быть:
Публичными: доступны из любого места программы. В
Dart имя публичного поля начинается с маленькой буквы.
Приватными: доступны только внутри самого класса.
Приватные поля начинаются с символа _.
String name; // Публичное поле
int _age;
// Приватное поле
// Конструктор
ClassName(this.name, this.age);
Методы — это функции, определенные внутри класса,
которые могут работать с полями этого класса и
выполнять определенные действия.
// Методы
void method() {
print('Это метод класса $name');
}
void greet()
{
print('Привет, меня зовут $name и мне $age лет.’);
}

3.

Определение классов в Dart
Конструктор класса
Пример создания класса:
Конструктор — это специальный метод, который вызывается при
создании нового объекта. В Dart конструктор имеет то же имя,
что и класс, и используется для инициализации полей объекта.
class Car {
String model;
int year;
Стандартный конструктор: используется для инициализации
полей объекта при его создании.
Car(this.model, this.year); // Конструктор
Person(String name, int age)
{
this.name = name;
this.age = age;
}
Инициализирующий конструктор: в Dart можно использовать
краткую запись инициализации полей прямо в параметрах
конструктора.
// Метод
void displayInfo() {
print('Модель: $model, Год выпуска: $year');
}
}
void main() {
// Создание объектов класса Car
Car car1 = Car('Tesla Model S', 2022);
Car car2 = Car('BMW X5', 2018);
Person(this.name, this.age);
// Вызов методов объектов
car1.displayInfo(); // Выведет: Модель: Tesla Model S, Год выпуска: 2022
car2.displayInfo(); // Выведет: Модель: BMW X5, Год выпуска: 2018
}

4.

Пример создания объекта:
Создание объектов
class Book {
String title;
String author;
В объектно-ориентированном программировании объект — это
конкретный экземпляр класса, представляющий собой сущность
с определенными характеристиками (состоянием) и поведением
(методами)
Book(this.title, this.author);
void displayInfo() {
print('Название: $title, Автор: $author');
}
Синтаксис создания объекта
}
ClassName objectName = ClassName(parameters);
class Library {
List<Book> books = [];
ClassName — имя класса, экземпляр которого
создается.
objectName — имя переменной, в которую
сохраняется ссылка на созданный объект.
parameters — параметры, передаваемые в
конструктор класса.
Car car1 = Car('Tesla Model S', 2022);
print(car1.model); // Выведет: Tesla Model S
print(car1.year); // Выведет: 2022
void addBook(Book book) {
books.add(book);
}
void displayAllBooks() {
for (Book book in books) {
book.displayInfo();
}
}
}
void main() {
Library library = Library();
library.addBook(Book('1984',
'Джордж
Оруэлл'));
library.addBook(Book('Мастер
и
Маргарита', 'Михаил Булгаков'));
library.displayAllBooks();
}

5.

Конструкторы
1. Стандартный конструктор. Стандартный конструктор (или
дефолтный) имеет то же имя, что и класс, и используется для
инициализации полей объекта.
Person(String name, int age)
{
this.name = name;
this.age = age;
}
2. Конструктор с синтаксисом инициализации полей. Dart
поддерживает сокращенный синтаксис для инициализации
полей непосредственно в списке параметров конструктора.
Person(this.name, this.age);
3. Именованные конструкторы. Именованные конструкторы
позволяют классу иметь несколько конструкторов с различными
именами.
Person.withoutAge(this.name)
{
age = 0; // Возраст по умолчанию
}
4. Конструкторы с параметрами по умолчанию. В Dart можно
использовать именованные параметры с значениями по умолчанию.
Car({required this.model, this.year = 2020});
5. Конструкторы с параметрами инициализации полей. В Dart можно
инициализировать поля до выполнения тела конструктора с помощью
инициализирующего списка.

6.

Пример создания класса
// Класс книги с ценой
class Book {
String title;
String author;
int year;
double price;
void main() {
// Создаем книгу с начальной ценой 900
Book book = Book('Война и мир', 'Лев Толстой', 1869, 900);
// Конструктор для инициализации полей книги
Book(this.title, this.author, this.year, this.price);
// Уменьшаем цену в 3 раза
book.reducePriceByThree();
// Метод для уменьшения цены в 3 раза
void reducePriceByThree() {
price /= 3;
}
// Выводим обновленную информацию о книге
book.displayInfo();
// Метод для вывода информации о книге
void displayInfo() {
print('Название: $title, Автор: $author, Год издания: $year, Цена:
$price');
}
}
// Выводим исходную информацию о книге
book.displayInfo();
}

7.

Наследование классов
Наследование — это механизм, при котором один класс
(называемый
подклассом
или
наследником)
может
унаследовать свойства и методы другого класса (называемого
суперклассом или родительским классом).
void main (){
Employee bob = Employee("Bob", 42, "Google");
bob.display(); // Name: Bob Age: 42 Company: Google
}
extends — ключевое слово для наследования. Ключевое слово
extends используется для того, чтобы указать, что один класс
наследует другой. Класс, который использует extends,
называется подклассом или наследником
class Dog extends Animal {
}
super() — обращение к родительскому классу. Ключевое слово
super используется для обращения к свойствам и методам
родительского (супер) класса.
Employee(super.name, super.age, this.company);
@override: используется для явного указания на то, что метод в
подклассе переопределяет метод родительского класса.
class Person{
String name;
int age = 18;
Person(this.name, this.age);
void display() => print("Name: $name Age: $age");
}
class Employee extends Person{
String company;
Employee(super.name, super.age, this.company);
// переопределяем метод display
@override
void display() {
print("Name: $name Age: $age");
print("Company: $company");
}
}

8.

Самостоятельная работа
## Задача 1: Определение класса "Автомобиль"
Создайте класс `Car`, который будет представлять автомобиль. Класс должен иметь следующие свойства:
- марка автомобиля (`brand`),
- модель (`model`),
- год выпуска (`year`).
Создайте метод `printInfo()`, который выводит информацию об автомобиле в формате: "Автомобиль: [Марка] [Модель], Год
выпуска: [Год]".
**Задание:**
Создайте два объекта класса `Car`, задайте значения для свойств, и выведите информацию об этих автомобилях с
помощью метода `printInfo()`.
### Задача 2: Наследование класса "Автомобиль"
Используя класс `Car` из предыдущей задачи, создайте новый класс `ElectricCar`, который наследует от `Car`. Новый класс
должен содержать дополнительное свойство:
- ёмкость батареи (`batteryCapacity`).
Добавьте метод `printInfo()` в `ElectricCar`, который выводит дополнительную информацию об ёмкости батареи.
**Задание:**
Создайте объект класса `ElectricCar`, задайте значения для всех свойств, и выведите информацию об электрическом
автомобиле с учётом ёмкости батареи.
### Задача 3: Инкапсуляция
Создайте класс `Person`, который имеет следующие закрытые свойства (с использованием подчёркивания):
English     Русский Правила