Введение в ООП
Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 2 из 65.
Объектно-ориентированное программирование (ООП) организует программу вокруг объектов. Объект объединяет данные (переменные) и функции, которые работают с этими данными. Класс описывает, какие данные содержат его объекты и что они делают, а создавать на его основе можно столько объектов, сколько нужно.
В GDScript каждый файл скрипта — это класс. Назови его с помощью class_name и объяви переменные, которые хранит каждый объект:
# car.gd
class_name Car
extends RefCounted
var brand: String = "Generic"
var wheels: int = 4extends RefCounted позволяет Godot самостоятельно освободить объект Car, когда на него больше не ссылается ни одна переменная. Используй это для каждого класса, который хранит данные и не является узлом. Скрипт без строки extends тоже наследует RefCounted.
Вызови new() у класса, чтобы создать объект, затем обращайся к его переменным через точку:
# main.gd
var my_car := Car.new()
print(my_car.wheels) # 4
print(my_car is Car) # trueОператор is проверяет, от какого класса был создан объект. При выводе самого объекта отображается только идентификатор, например <RefCounted#-9223372009860233781>, поэтому выводи вместо него его переменные.
Класс — это чертёж, а каждый объект — отдельная вещь, созданная на его основе: вызвав Car.new() дважды, ты получишь две машины.
Задание
ЛегкоСоздай класс Car в файле car.gd:
- его имя класса —
Car, и он наследуется отRefCounted - переменная типа
Stringbrand, исходное значение которой —"Generic" - переменная типа
intwheels, исходное значение которой —4
Предоставленный код считывает количество машин для создания и создаёт каждую из них с помощью Car.new(). Он выводит количество машин и общее количество их колёс. Если создана хотя бы одна машина, код считывает марку первой машины и выводит марки первой и последней машин. Для входных данных 3 и Tesla он выводит:
Cars: 3
Wheels: 12
First car: Tesla
Last car: GenericТвой код должен находиться в car.gd. В main.gd содержится предоставленный код ввода/вывода, и его нельзя редактировать.
Попробуйте сами
extends Node
func _ready():
# Предоставленный код ввода-вывода: оставьте его без изменений
var count := int(OS.read_string_from_stdin())
var garage: Array[Car] = []
for i in count:
garage.append(Car.new())
var total := 0
for car in garage:
total += car.wheels
print("Cars: %d" % garage.size())
print("Wheels: %d" % total)
if count > 0:
garage[0].brand = OS.read_string_from_stdin()
print("First car: %s" % garage[0].brand)
print("Last car: %s" % garage[-1].brand)
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript