Menu
CoddyTech

Clases vs. objetos

Parte de la sección Programación orientada a objetos del Journey de GDScript de Coddy. Lección 3 de 65.

Una clase y sus objetos contienen cosas diferentes. Una const en una clase pertenece a la propia clase: hay un único valor y se lee mediante el nombre de la clase sin crear un objeto.

# 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

Las líneas var describen lo que contiene cada objeto. Cada objeto creado con new() obtiene su propia copia de estas variables, con sus valores predeterminados iniciales:

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

Cambiar dog1 deja dog2 tal como estaba. Un objeto también puede leer la constante: dog1.SPECIES tiene el mismo valor que Dog.SPECIES.

Un objeto solo tiene las variables que declara su clase. dog1.color = "brown" detiene el programa con un error, porque Dog no tiene ninguna variable color. Todas las variables que necesita un objeto van en la clase.

challenge icon

Desafío

Fácil

Completa la clase Student en student.gd:

  • una constante SCHOOL con el valor "Godot High School", compartida por toda la clase
  • una variable String student_name
  • una variable String grade que comienza como "N/A"

El código proporcionado lee cuántos estudiantes vienen a continuación y luego una línea por estudiante: un nombre, seguido opcionalmente de un espacio y una calificación. Crea un Student por cada línea, establece su nombre y establece su calificación solo cuando la línea incluye una. Después imprime Student.SCHOOL y a cada estudiante. Para las líneas Alice A y Bob, imprime:

School: Godot High School
Alice has grade A
Bob has grade N/A

Tu código va en student.gd. main.gd contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

extends Node

func _ready():
	# Código de entrada/salida proporcionado: mantenlo tal como está
	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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de GDScript online