Menu
CoddyTech

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 familiaris

Die 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) # Unnamed

Eine Ä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.

challenge icon

Aufgabe

Einfach

Vervollständige die Klasse Student in student.gd:

  • eine Konstante SCHOOL mit dem Wert "Godot High School", die von der gesamten Klasse gemeinsam genutzt wird
  • eine String-Variable student_name
  • eine String-Variable grade, 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/A

Dein 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])
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-GDScript-Compiler