Menu
CoddyTech

Introducción a la programación orientada a objetos

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

La programación orientada a objetos (OOP) organiza un programa en torno a objetos. Un objeto reúne datos (variables) y las funciones que trabajan con esos datos. Una clase describe qué contienen y qué hacen sus objetos, y puedes crear tantos objetos a partir de ella como necesites.

En GDScript cada archivo de script es una clase. Asígnale un nombre con class_name y declara las variables que contiene cada objeto:

# car.gd
class_name Car
extends RefCounted

var brand: String = "Generic"
var wheels: int = 4

extends RefCounted hace que Godot libere un objeto Car por sí solo cuando ninguna variable haga referencia a él. Úsalo para cada clase que contenga datos y no sea un nodo. Un script sin una línea extends también extiende RefCounted.

Llama a new() en la clase para crear un objeto; después accede a sus variables con un punto:

# main.gd
var my_car := Car.new()
print(my_car.wheels) # 4
print(my_car is Car) # true

El operador is comprueba de qué clase se creó un objeto. Imprimir el propio objeto solo muestra un id como <RefCounted#-9223372009860233781>, así que imprime sus variables.

La clase es el plano y cada objeto es una cosa independiente construida a partir de ella: llamar a Car.new() dos veces te da dos coches.

challenge icon

Desafío

Fácil

Crea la clase Car en car.gd:

  • su nombre de clase es Car y extiende RefCounted
  • una variable String brand que comienza como "Generic"
  • una variable int wheels que comienza como 4

El código proporcionado lee cuántos autos se deben crear y crea cada uno con Car.new(). Imprime el número de autos y la cantidad total de ruedas. Cuando creó al menos un auto, lee una marca para el primer auto e imprime las marcas del primer y del último auto. Para las entradas 3 y Tesla, imprime:

Cars: 3
Wheels: 12
First car: Tesla
Last car: Generic

Tu código va en car.gd. main.gd contiene el código de entrada/salida proporcionado 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 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)
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