Wprowadzenie do programowania obiektowego
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 2 z 65.
Programowanie obiektowe (OOP) organizuje program wokół obiektów. Obiekt łączy dane (zmienne) z funkcjami, które na nich operują. Klasa opisuje, co jej obiekty przechowują i robią, a Ty tworzysz tyle obiektów na jej podstawie, ile potrzebujesz.
W GDScript każdy plik skryptu jest klasą. Nadaj jej nazwę za pomocą class_name i zadeklaruj zmienne przechowywane przez każdy obiekt:
# car.gd
class_name Car
extends RefCounted
var brand: String = "Generic"
var wheels: int = 4extends RefCounted sprawia, że Godot sam zwalnia obiekt Car, gdy żadna zmienna już się do niego nie odwołuje. Używaj tego dla każdej klasy przechowującej dane, która nie jest węzłem. Skrypt bez wiersza extends również rozszerza RefCounted.
Wywołaj new() na klasie, aby utworzyć obiekt, a następnie uzyskaj dostęp do jego zmiennych za pomocą kropki:
# main.gd
var my_car := Car.new()
print(my_car.wheels) # 4
print(my_car is Car) # trueOperator is sprawdza, z jakiej klasy utworzono obiekt. Wypisanie samego obiektu pokazuje tylko identyfikator, taki jak <RefCounted#-9223372009860233781>, więc zamiast tego wypisz jego zmienne.
Klasa jest schematem, a każdy obiekt to osobna rzecz zbudowana na jej podstawie: dwukrotne wywołanie Car.new() daje ci dwa samochody.
Wyzwanie
ŁatwyUtwórz klasę Car w pliku car.gd:
- jej nazwa klasy to
Car, a ona rozszerzaRefCounted - zmienna typu
Stringo nazwiebrand, której początkową wartością jest"Generic" - zmienna typu
into nazwiewheels, której początkową wartością jest4
Dostarczony kod odczytuje, ile samochodów zbudować, i tworzy każdy z nich za pomocą Car.new(). Wyświetla liczbę samochodów i łączną liczbę ich kół. Jeśli zbudował co najmniej jeden samochód, odczytuje markę pierwszego samochodu i wyświetla marki pierwszego oraz ostatniego samochodu. Dla danych wejściowych 3 i Tesla wyświetla:
Cars: 3
Wheels: 12
First car: Tesla
Last car: GenericUmieść swój kod w pliku car.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 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)
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