Menu
CoddyTech

Введение в ООП

Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 2 из 65.

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

В GDScript каждый файл скрипта — это класс. Назови его с помощью class_name и объяви переменные, которые хранит каждый объект:

# car.gd
class_name Car
extends RefCounted

var brand: String = "Generic"
var wheels: int = 4

extends 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() дважды, ты получишь две машины.

challenge icon

Задание

Легко

Создай класс Car в файле car.gd:

  • его имя класса — Car, и он наследуется от RefCounted
  • переменная типа String brand, исходное значение которой — "Generic"
  • переменная типа int wheels, исходное значение которой — 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)
quiz iconПроверьте себя

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

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript