Klassen vs. Objekte
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 3 von 65.
Eine Klasse und ihre Objekte enthalten unterschiedliche Dinge. Eine const in einer Klasse gehört zur Klasse selbst: Es gibt einen Wert, und du liest ihn über den Klassennamen aus, ohne ein Objekt zu erstellen.
# dog.gd
class_name Dog
extends RefCounted
const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"print(Dog.SPECIES) # Canis familiarisDie var-Zeilen beschreiben, was jedes Objekt enthält. Jedes mit new() erstellte Objekt erhält eine eigene Kopie dieser Variablen, die mit ihren Standardwerten beginnt:
var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # UnnamedEine Änderung an dog1 lässt dog2 unverändert. Auch ein Objekt kann die Konstante auslesen: dog1.SPECIES hat denselben Wert wie Dog.SPECIES.
Ein Objekt hat nur die Variablen, die seine Klasse deklariert. dog1.color = "brown" stoppt das Programm mit einem Fehler, weil Dog keine color-Variable hat. Jede Variable, die ein Objekt benötigt, gehört in die Klasse.
Aufgabe
EinfachVervollständige die Klasse Student in student.gd:
- eine Konstante
SCHOOLmit dem Wert"Godot High School", die von der gesamten Klasse gemeinsam genutzt wird - eine
String-Variablestudent_name - eine
String-Variablegrade, die mit"N/A"beginnt
Der bereitgestellte Code liest, wie viele Studierende folgen, und anschließend eine Zeile pro Studierendem: einen Namen, optional gefolgt von einem Leerzeichen und einer Note. Für jede Zeile wird ein Student erstellt, der Name gesetzt und die Note nur dann festgelegt, wenn die Zeile eine enthält. Anschließend werden Student.SCHOOL und alle Studierenden ausgegeben. Für die Zeilen Alice A und Bob wird Folgendes ausgegeben:
School: Godot High School
Alice has grade A
Bob has grade N/ADein Code gehört in student.gd. main.gd enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Ein-/Ausgabecode: unverändert lassen
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])
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler