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 = 4extends 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) # trueEl 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.
Desafío
FácilCrea la clase Car en car.gd:
- su nombre de clase es
Cary extiendeRefCounted - una variable
Stringbrandque comienza como"Generic" - una variable
intwheelsque comienza como4
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: GenericTu 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)
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
1Fundamentos de la programación orientada a objetos
Archivos externosIntroducción a la programación orientada a objetosClases vs. objetosLa palabra clave selfMétodosPropiedadesConstructor (_init)Repaso: calculadora sencilla4Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas7Señales
¿Qué es una señal?Declarar y emitirConectarse a las señalesSeñales con argumentosRepaso: sistema de salud10Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite2Propiedades de clase
Variables de instancia y estáticasFunciones estáticasMétodos setter de propiedadesMétodos getter de propiedadesPrivado por convenciónRepaso: administrador de cuentas bancarias5Encapsulación
Miembros públicos y privadosValidación con settersOcultación de informaciónPropiedades de solo lecturaRepaso: sistema de registros de estudiantes8Conceptos avanzados de POO
Composición frente a herenciaClases internasNodos como componentesRefCounted frente a NodeEnums en clases3Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosCadenas de herenciaComprobaciones de tipo con isRepaso: jerarquía de empleados6Métodos especiales
Introducción a los métodos virtualesEl método _to_stringIteradores personalizadosRepaso: lista personalizada9Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de GDScript online