Classes vs. objetos
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 3 de 65.
Uma classe e seus objetos contêm coisas diferentes. Uma const em uma classe pertence à própria classe: há um único valor, e você o lê por meio do nome da classe sem criar um 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 familiarisAs linhas var descrevem o que cada objeto contém. Cada objeto criado com new() recebe sua própria cópia dessas variáveis, começando com seus valores padrão:
var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # UnnamedAlterar dog1 deixa dog2 como estava. Um objeto também pode ler a constante: dog1.SPECIES tem o mesmo valor que Dog.SPECIES.
Um objeto tem apenas as variáveis declaradas por sua classe. dog1.color = "brown" interrompe o programa com um erro, porque Dog não tem uma variável color. Todas as variáveis de que um objeto precisa vão para a classe.
Desafio
FácilComplete a classe Student em student.gd:
- uma constante
SCHOOLcom o valor"Godot High School", compartilhada por toda a classe - uma variável
Stringchamadastudent_name - uma variável
Stringchamadagradeque começa como"N/A"
O código fornecido lê quantos estudantes vêm a seguir e, depois, uma linha por estudante: um nome, opcionalmente seguido por um espaço e uma nota. Ele cria um Student para cada linha, define seu nome e define sua nota somente quando a linha contém uma. Em seguida, imprime Student.SCHOOL e cada estudante. Para as linhas Alice A e Bob, imprime:
School: Godot High School
Alice has grade A
Bob has grade N/ASeu código deve ficar em student.gd. main.gd contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
extends Node
func _ready():
# Código de entrada/saída fornecido: mantenha-o 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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação orientada a objetos
1Fundamentos da POO
Arquivos externosIntrodução à POOClasses vs. objetosA palavra-chave selfMétodosPropriedadesConstrutor (_init)Revisão - Calculadora simples4Polimorfismo
Revisitando a Sobrescrita de MétodosDuck TypingClasses e Métodos AbstratosDesign de InterfacesRevisão - Calculadora de Formas7Sinais
O que é um sinal?Declarando e emitindoConectando-se a sinaisSinais com argumentosRevisão - Sistema de saúde10Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite2Propriedades de Classe
Variáveis de Instância vs. EstáticasFunções EstáticasMétodos Setters de PropriedadeMétodos Getters de PropriedadePrivado por ConvençãoRecapitulando: Gerenciador de Conta Bancária5Encapsulamento
Membros públicos e privadosValidação com settersOcultação de informaçõesPropriedades somente para leituraRevisão - Sistema de registros de alunos8Conceitos Avançados de POO
Composição vs. HerançaClasses InternasNós como ComponentesRefCounted vs. NodeEnums em Classes3Herança
Herança básicaA palavra-chave superSobrescrita de métodosCadeias de herançaVerificações de tipo com isRevisão - Hierarquia de funcionários6Métodos especiais
Introdução aos métodos virtuaisO método _to_stringIteradores personalizadosRevisão - Lista personalizada9Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de GDScript online