Классы и объекты
Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 3 из 65.
У класса и его объектов есть разные данные. const в классе принадлежит самому классу: существует одно значение, и его можно прочитать через имя класса, не создавая объект.
# dog.gd
class_name Dog
extends RefCounted
const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"print(Dog.SPECIES) # Canis familiarisСтроки var описывают, что хранит каждый объект. Каждый объект, созданный с помощью new(), получает собственную копию этих переменных, начиная с их значений по умолчанию:
var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # UnnamedИзменение dog1 оставляет dog2 без изменений. Объект тоже может прочитать константу: dog1.SPECIES имеет то же значение, что и Dog.SPECIES.
У объекта есть только те переменные, которые объявлены в его классе. dog1.color = "brown" останавливает программу с ошибкой, потому что у Dog нет переменной color. Все переменные, которые нужны объекту, добавляют в класс.
Задание
ЛегкоЗаверши класс Student в файле student.gd:
- константа
SCHOOLсо значением"Godot High School", общая для всего класса - переменная типа
Stringс именемstudent_name - переменная типа
Stringс именемgrade, изначально равная"N/A"
Предоставленный код считывает количество следующих студентов, а затем по одной строке на каждого студента: имя, за которым может следовать пробел и оценка. Для каждой строки он создаёт объект Student, задаёт его имя и задаёт оценку, только если она указана в строке. Затем он выводит Student.SCHOOL и данные каждого студента. Для строк Alice A и Bob он выводит:
School: Godot High School
Alice has grade A
Bob has grade N/AТвой код нужно написать в файле student.gd. В файле main.gd находится предоставленный код ввода/вывода, его нельзя редактировать.
Попробуйте сами
extends Node
func _ready():
# Предоставленный код ввода-вывода: оставьте его без изменений
var count := int(OS.read_string_from_stdin())
var students: Array[Student] = []
for i in count:
var parts := OS.read_string_from_stdin().split(" ", false)
var student := Student.new()
student.student_name = parts[0]
if parts.size() > 1:
student.grade = parts[1]
students.append(student)
print("School: %s" % Student.SCHOOL)
for student in students:
print("%s has grade %s" % [student.student_name, student.grade])
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript