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 familiarisLas 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) # UnnamedCambiar 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.
Desafío
FácilCompleta la clase Student en student.gd:
- una constante
SCHOOLcon el valor"Godot High School", compartida por toda la clase - una variable
Stringstudent_name - una variable
Stringgradeque 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/ATu 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])
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