Klasy a obiekty
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 3 z 65.
Klasa i jej obiekty przechowują różne rzeczy. Stała const w klasie należy do samej klasy: istnieje jedna wartość, którą odczytujesz za pomocą nazwy klasy, bez tworzenia obiektu.
# dog.gd
class_name Dog
extends RefCounted
const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"print(Dog.SPECIES) # Canis familiarisLinie var opisują, co zawiera każdy obiekt. Każdy obiekt utworzony za pomocą new() otrzymuje własną kopię tych zmiennych, rozpoczynającą się od ich wartości domyślnych:
var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # UnnamedZmiana dog1 pozostawia dog2 bez zmian. Obiekt również może odczytać stałą: dog1.SPECIES ma tę samą wartość co Dog.SPECIES.
Obiekt ma tylko te zmienne, które deklaruje jego klasa. dog1.color = "brown" zatrzymuje program z błędem, ponieważ Dog nie ma zmiennej color. Każda zmienna, której potrzebuje obiekt, musi znaleźć się w klasie.
Wyzwanie
ŁatwyUzupełnij klasę Student w pliku student.gd:
- stała
SCHOOLo wartości"Godot High School", współdzielona przez całą klasę - zmienna typu
Stringo nazwiestudent_name - zmienna typu
Stringo nazwiegrade, której początkową wartością jest"N/A"
Dostarczony kod odczytuje liczbę kolejnych uczniów, a następnie po jednym wierszu na ucznia: imię i nazwisko, opcjonalnie po którym następuje spacja i ocena. Tworzy obiekt Student dla każdego wiersza, ustawia jego nazwę i ustawia jego ocenę tylko wtedy, gdy wiersz ją zawiera. Następnie wyświetla Student.SCHOOL i każdego ucznia. Dla wierszy Alice A i Bob wyświetla:
School: Godot High School
Alice has grade A
Bob has grade N/AUmieść swój kod w pliku student.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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])
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online